Commit 3c2dd22a authored by aborruso's avatar aborruso

update

parent a2a16244
......@@ -167,4 +167,4 @@ I feed RSS sono basati su uno vecchio e buon standard, quindi esistono centinaia
## Nota finale "personale"
Lo stimolo che ci ha portato alla scoperta e all'approfondimento di queste risorse nasce da [questo messaggio](https://www.facebook.com/groups/dataninja/permalink/1758704061102011/) di Alice Corona e sopratutto da questo stimolo di [Andria Tzedda](https://www.facebook.com/groups/dataninja/permalink/1758704061102011/?comment_id=1758711107767973&reply_comment_id=1758711777767906&comment_tracking=%7B%22tn%22%3A%22R5%22%7D). Ringraziamo entrambi 🙏
\ No newline at end of file
Lo stimolo che ci ha portato alla scoperta e all'approfondimento di queste risorse nasce da [questo messaggio](https://www.facebook.com/groups/dataninja/permalink/1758704061102011/) di Alice Corona e da [questo stimolo](https://www.facebook.com/groups/dataninja/permalink/1758704061102011/?comment_id=1758711107767973&reply_comment_id=1758711777767906&comment_tracking=%7B%22tn%22%3A%22R5%22%7D) di Andria Tzedda. Ringraziamo entrambi 🙏
\ No newline at end of file
......@@ -9,28 +9,28 @@ mkdir -p $(pwd)/tmp
mkdir -p $(pwd)/web
#scarico feed
curl -sL "http://www.istat.it/js/rsssep.php" > "$cartella"/tmp/rowrss.rss
curl -sL "http://www.istat.it/js/rsssep.php" >"$cartella"/tmp/rowrss.rss
< "$cartella"/tmp/rowrss.rss xml2json | jq . > "$cartella"/tmp/rowrss.json
xml2json <"$cartella"/tmp/rowrss.rss | jq . >"$cartella"/tmp/rowrss.json
< "$cartella"/tmp/rowrss.json jq '[.rss.channel.item[] | {title:.title."$t",pubDate:.pubDate."$t",guid:.guid."$t"}]' | in2csv -I -f json > "$cartella"/tmp/titoli.csv
jq <"$cartella"/tmp/rowrss.json '[.rss.channel.item[] | {title:.title."$t",pubDate:.pubDate."$t",guid:.guid."$t"}]' | in2csv -I -f json >"$cartella"/tmp/titoli.csv
# scarico indice
curl -sL "http://apistat.istat.it/?q=getdslistdatagov" | jq . > "$cartella"/tmp/indice_raw.json
curl -sL "http://apistat.istat.it/?q=getdslistdatagov" | jq . >"$cartella"/tmp/indice_raw.json
# rimuovo i riferimeni agli URL ISTAT, lasciando soltanto l'ID della risorsa
< "$cartella"/tmp/indice_raw.json sed 's|http://dati.istat.it/Index.aspx?DataSetCode=||g;s|&Lang=it||g' > "$cartella"/tmp/indice.json
sed <"$cartella"/tmp/indice_raw.json 's|http://dati.istat.it/Index.aspx?DataSetCode=||g;s|&Lang=it||g' >"$cartella"/tmp/indice.json
# estraggo titolo e identifier
< "$cartella"/tmp/indice.json jq '[.dataset[] | {title:.title|gsub("^ +"; "")|gsub(" +$"; ""),identifier}]' | in2csv -I -f json > "$cartella"/tmp/indice.csv
jq <"$cartella"/tmp/indice.json '[.dataset[] | {title:.title|gsub("^ +"; "")|gsub(" +$"; ""),identifier}]' | in2csv -I -f json >"$cartella"/tmp/indice.csv
# faccio il join tra i dati del web service SDMX e i dati delle API
csvsql -I --query "select a.*,b.identifier from titoli AS a LEFT JOIN indice AS b ON a.title=b.title" "$cartella"/tmp/titoli.csv "$cartella"/tmp/indice.csv > "$cartella"/tmp/titoliCodici_tmp.csv
csvsql -I --query "select a.*,b.identifier from titoli AS a LEFT JOIN indice AS b ON a.title=b.title" "$cartella"/tmp/titoli.csv "$cartella"/tmp/indice.csv >"$cartella"/tmp/titoliCodici_tmp.csv
# rimuovo i record di cui non c'è traccia nel catalogo esposto via API
csvsql -I --query "select * from titoliCodici_tmp where identifier IS NOT NULL" "$cartella"/tmp/titoliCodici_tmp.csv > "$cartella"/titoliCodici.csv
csvsql -I --query "select * from titoliCodici_tmp where identifier IS NOT NULL" "$cartella"/tmp/titoliCodici_tmp.csv >"$cartella"/titoliCodici.csv
csvsql -I --query "select * from titoliCodici_tmp where identifier IS NULL" "$cartella"/tmp/titoliCodici_tmp.csv > "$cartella"/titoliCodici_problemi.csv
csvsql -I --query "select * from titoliCodici_tmp where identifier IS NULL" "$cartella"/tmp/titoliCodici_tmp.csv >"$cartella"/titoliCodici_problemi.csv
rm "$cartella"/tmp/titoliCodici_tmp.csv
......@@ -42,10 +42,10 @@ docs="https://medium.com/@vincpatruno/come-accedere-ai-dati-statistici-pubblicat
### anagrafica RSS
# estraggo la colonna che contiene le date in un file
csvcut "$cartella"/titoliCodici.csv -c "pubDate" | sed 1d | sed 's/T/ /g' > "$cartella"/tmp/dateRSS_tmp.csv
csvcut "$cartella"/titoliCodici.csv -c "pubDate" | sed 1d | sed 's/T/ /g' >"$cartella"/tmp/dateRSS_tmp.csv
# converto le date contenute nel file in formato standard per un feed RSS, RFC 2822
while read p; do LANG=en_EN date -Rd "$p"; done < "$cartella"/tmp/dateRSS_tmp.csv > "$cartella"/tmp/dateRSS01_tmp.csv
while read p; do LANG=en_EN date -Rd "$p"; done <"$cartella"/tmp/dateRSS_tmp.csv >"$cartella"/tmp/dateRSS01_tmp.csv
# aggiungo il carattere " a inizio e fine riga
sed -r -i 's/(.*)/"\1"/g' "$cartella"/tmp/dateRSS01_tmp.csv
......@@ -54,44 +54,43 @@ sed -r -i 's/(.*)/"\1"/g' "$cartella"/tmp/dateRSS01_tmp.csv
sed -i '1 i\pubDateRSS' "$cartella"/tmp/dateRSS01_tmp.csv
# aggiungo il file con le date in formato RFC 2822, come colonna aggiuntiva al dato di insieme
paste -d "," "$cartella"/titoliCodici.csv "$cartella"/tmp/dateRSS01_tmp.csv > "$cartella"/tmp/dateRSS02_tmp.csv
paste -d "," "$cartella"/titoliCodici.csv "$cartella"/tmp/dateRSS01_tmp.csv >"$cartella"/tmp/dateRSS02_tmp.csv
# creo una copia del file nella root
cat "$cartella"/tmp/dateRSS02_tmp.csv > "$cartella"/titoliCodici.csv
cat "$cartella"/tmp/dateRSS02_tmp.csv >"$cartella"/titoliCodici.csv
rm "$cartella"/feed.xml
cp "$cartella"/risorse/feedTemplate.xml "$cartella"/feed.xml
# aggiungo i dati di anafrafica al feed
xmlstarlet ed -L --subnode "//channel" --type elem -n title -v "$titolo" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n description -v "$descrizione" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n link -v "$selflink" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n "atom:link" -v "" -i "//*[name()='atom:link']" -t "attr" -n "rel" -v "self" -i "//*[name()='atom:link']" -t "attr" -n "href" -v "$selflink" -i "//*[name()='atom:link']" -t "attr" -n "type" -v "application/rss+xml" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n webMaster -v "andrea.borruso@ondata.it (Andrea Borruso)" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n docs -v "$docs" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n creativeCommons:license -v "http://creativecommons.org/licenses/by-sa/4.0/" "$cartella"/feed.xml;
xmlstarlet ed -L --subnode "//channel" --type elem -n title -v "$titolo" "$cartella"/feed.xml
xmlstarlet ed -L --subnode "//channel" --type elem -n description -v "$descrizione" "$cartella"/feed.xml
xmlstarlet ed -L --subnode "//channel" --type elem -n link -v "$selflink" "$cartella"/feed.xml
xmlstarlet ed -L --subnode "//channel" --type elem -n "atom:link" -v "" -i "//*[name()='atom:link']" -t "attr" -n "rel" -v "self" -i "//*[name()='atom:link']" -t "attr" -n "href" -v "$selflink" -i "//*[name()='atom:link']" -t "attr" -n "type" -v "application/rss+xml" "$cartella"/feed.xml
xmlstarlet ed -L --subnode "//channel" --type elem -n webMaster -v "andrea.borruso@ondata.it (Andrea Borruso)" "$cartella"/feed.xml
xmlstarlet ed -L --subnode "//channel" --type elem -n docs -v "$docs" "$cartella"/feed.xml
xmlstarlet ed -L --subnode "//channel" --type elem -n creativeCommons:license -v "http://creativecommons.org/licenses/by-sa/4.0/" "$cartella"/feed.xml
# imposto il tab come separatore del CSV che farà da source al feed RSS
csvformat -T "$cartella"/titoliCodici.csv > "$cartella"/tmp/titoliCodici_tmp.csv
csvformat -T "$cartella"/titoliCodici.csv >"$cartella"/tmp/titoliCodici_tmp.csv
# rimuovo la prima riga
sed -i 1d "$cartella"/tmp/titoliCodici_tmp.csv
sed -i 1d "$cartella"/tmp/titoliCodici_tmp.csv
# leggo in loop i dati del file CSV e li uso per creare nuovi item nel file XML
newcounter=0
while IFS=$'\t' read -r title pubDate guid identifier pubDateRSS
do
newcounter=`expr $newcounter + 1`;
xmlstarlet ed -L --subnode "//channel" --type elem -n item -v "" \
--subnode "//item[$newcounter]" --type elem -n title -v "$title" \
--subnode "//item[$newcounter]" --type elem -n link -v "http://dati.istat.it/Index.aspx?DataSetCode=$identifier&amp;Lang=it" \
--subnode "//item[$newcounter]" --type elem -n pubDate -v "$pubDateRSS" \
--subnode "//item[$newcounter]" --type elem -n description -v "DATA URI: http://apistat.istat.it/?q=getdim&amp;dataset=$identifier&amp;lang=0" \
--subnode "//item[$newcounter]" --type elem -n guid -v "http://dati.istat.it/Index.aspx?DataSetCode=$identifier&amp;Lang=it" \
--subnode "//item[$newcounter]" --type elem -n category -v "$identifier" -i "//item[$newcounter]/category[1]" -t "attr" -n "domain" -v "http://apistat.istat.it/specs#identifier" \
"$cartella"/feed.xml;
done < "$cartella"/tmp/titoliCodici_tmp.csv
while IFS=$'\t' read -r title pubDate guid identifier pubDateRSS; do
newcounter=$(expr $newcounter + 1)
xmlstarlet ed -L --subnode "//channel" --type elem -n item -v "" \
--subnode "//item[$newcounter]" --type elem -n title -v "$title" \
--subnode "//item[$newcounter]" --type elem -n link -v "http://dati.istat.it/Index.aspx?DataSetCode=$identifier&amp;Lang=it" \
--subnode "//item[$newcounter]" --type elem -n pubDate -v "$pubDateRSS" \
--subnode "//item[$newcounter]" --type elem -n description -v "DATA URI: http://apistat.istat.it/?q=getdim&amp;dataset=$identifier&amp;lang=0" \
--subnode "//item[$newcounter]" --type elem -n guid -v "http://dati.istat.it/Index.aspx?DataSetCode=$identifier&amp;Lang=it" \
--subnode "//item[$newcounter]" --type elem -n category -v "$identifier" -i "//item[$newcounter]/category[1]" -t "attr" -n "domain" -v "http://apistat.istat.it/specs#identifier" \
"$cartella"/feed.xml
done <"$cartella"/tmp/titoliCodici_tmp.csv
rm "$cartella"/tmp/*_tmp*
cat "$cartella"/feed.xml > "$web"/feed.xml
cat "$cartella"/feed.xml >"$web"/feed.xml
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment