-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathanas.sh
executable file
·81 lines (64 loc) · 4.27 KB
/
anas.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/bash
### requirements ###
# curl
# jq
# csvkit
# miller
### requirements ###
set -x
cartella="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# creo due cartelle "contenitore"
mkdir -p "$cartella"/regioni
mkdir -p "$cartella"/strade
mkdir -p "$cartella"/problemi
rm -rf "$cartella"/regioni/*
rm -rf "$cartella"/strade/*
rm -rf "$cartella"/problemi/*
# scarico i file di riepilogo delle regioni
curl -sL "http://www.stradeanas.it/sites/all/modules/anas/js/anas.app.lavori_in_corso.js" | grep -Eo '("[a-zA-Z]+":{"DB":")([a-zA-Z]+)"' | sed -r 's/("[a-zA-Z]+":\{"DB":")([a-zA-Z]+)"/\2/g' | xargs -I{} sh -c 'curl -sL http://www.stradeanas.it/it/anas/app/lavori_in_corso/lavori_regione?regione="$1" | jq . >'"$cartella"'/regioni/"$1".json' -- {}
# scarico i file di dettaglio sui lavori nelle varie strade delle regioni
cd "$cartella"/regioni
for i in *.json; do
regione=$(echo "$i" | sed 's/\.json//g')
echo "$regione"
strade=$(jq <"$i" -r '.LIST_ROADS[][0]' | tr '\n' ' ')
echo "$strade"
for strada in $strade; do
echo "$strada"
echo "$regione"
curl -sL "http://www.stradeanas.it/it/anas/app/lavori_in_corso/lavori_regione_strada?regione=$regione&cod_strada=$strada" | jq '.[] |= . + {"regione": "'"$regione"'","strada": "'"$strada"'"}' >"$cartella"/strade/"$regione"_"$strada".json
done
done
# creo un unico file json di output
jq -s add "$cartella"/strade/*.json >"$cartella"/stradeAnas.json
# trasfomo in valori numerici, gli item che sono numeri ma valorizzati come stringhe
# ad esempio da $(438.733,76) a $(438733.76)
jq '((.[].importo_lav_principali| select(.) ) |= gsub("\\.";"") ) | ((.[].importo_lav_principali| select(.) ) |= gsub(",";".") ) | ((.[].importo_lav_principali| select(.) ) |= tonumber ) | ((.[].importo_lav_totale| select(.) ) |= gsub("\\.";"") ) | ((.[].importo_lav_totale| select(.) ) |= gsub(",";".") ) | ((.[].importo_lav_totale| select(.) ) |= tonumber ) | ((.[].dal_km| select(.) ) |= gsub("\\.";"") ) | ((.[].dal_km| select(.) ) |= gsub(",";".") ) | ((.[].dal_km| select(.) ) |= tonumber ) | ((.[].al_km| select(.) ) |= gsub("\\.";"") ) | ((.[].al_km| select(.) ) |= gsub(",";".") ) | ((.[].al_km| select(.) ) |= tonumber ) | ((.[].avanzamento_lavori| select(.) ) |= gsub(",";".") ) | ((.[].avanzamento_lavori| select(.) ) |= tonumber )' "$cartella"/stradeAnas.json >"$cartella"/stradeAnas_tmp.json && mv "$cartella"/stradeAnas_tmp.json "$cartella"/stradeAnas.json
# creo un unico file csv di output e sostituisco i "\r\n" presenti in descrizione con "|"
jq <"$cartella"/stradeAnas.json '((.[].descrizione| select(.) ) |= gsub("\r\n";"|") )' |
jq '((.[].descrizione| select(.) ) |= gsub("\\|$";"") )' |
in2csv -I -f json >"$cartella"/stradeAnas.csv
# creo una colonna con i CUP
mlr -I --csv put '$CUP = regextract_or_else($descrizione, "[A-Z]{1}[0-9]{2} ?[A-Z]{1}[0-9]{2} ?[0-9]{4} ?[0-9]{5} ?","")' "$cartella"/stradeAnas.csv
# creo una colonna con URL dei CUP
mlr -I --csv put 'if (is_not_null($CUP)) {$CUP_URL = "http://opencup.gov.it/progetto/-/cup/".$CUP} else {$CUP_URL = ""}' "$cartella"/stradeAnas.csv
# dati problematici
## i record in cui la data di ultimazione è espressa in questo modo $(07/02/), ovvero manca l'anno
csvgrep -c "ultimazione" -r "^../../$" "$cartella"/stradeAnas.csv >"$cartella"/problemi/stradeAnasNoAnnoUltimazione.csv
## strade di tipo non "VARIE" con "dal km" "al km" che vanno da 0 a 0
csvsql -I --query "select * from stradeAnas where al_km = 0 and dal_km = 0 and strada NOT LIKE 'VARIE'" "$cartella"/stradeAnas.csv >"$cartella"/problemi/stradeAnasAnnotazionKmNulla.csv
# faccio l'upload su data.world
source "$cartella"/config.txt
curl "https://api.data.world/v0/uploads/ondata/anas-lavori-in-corso/files" -F file=@"$cartella"/stradeAnas.csv -H "Authorization: Bearer ${DW_API_TOKEN}"
curl "https://api.data.world/v0/uploads/ondata/anas-lavori-in-corso/files" -F file=@"$cartella"/problemi/stradeAnasAnnotazionKmNulla.csv -H "Authorization: Bearer ${DW_API_TOKEN}"
curl "https://api.data.world/v0/uploads/ondata/anas-lavori-in-corso/files" -F file=@"$cartella"/problemi/stradeAnasNoAnnoUltimazione.csv -H "Authorization: Bearer ${DW_API_TOKEN}"
<<comment1
# faccio upload su carto
ogr2ogr -overwrite \
--config CARTO_API_KEY "$CARTO_API_KEY" \
-t_srs "EPSG:4326" \
-nln anas_lavori_in_corso \
-f Carto \
"Carto:tanto" \
"$cartella"/stradeAnas.geojson
comment1