parent
ba84978d30
commit
0c10a7dbe2
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
export SCHEMA="Ciudad;Fecha;Hora;Estado;Visibilidad;Temperatura;Sensacion;Humedad;Viento;Presion"
|
@ -0,0 +1,118 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
source ./.weather-schema
|
||||
FIELD_COUNT=$(echo $SCHEMA | grep -o ";" | wc -l)
|
||||
URL=https://ssl.smn.gob.ar/dpd/zipopendata.php?dato=tiepre
|
||||
TMPDIR=/tmp/weather
|
||||
OUT=$HOME/.weather
|
||||
CITY="La Plata"
|
||||
|
||||
print=false
|
||||
|
||||
help() {
|
||||
cat <<EOF
|
||||
|
||||
Usage: $(basename $0) [OPTION]
|
||||
|
||||
This script will fetch a zip file from datos.gob.ar and extract the .txt that
|
||||
holds the latest info gathered from all the weather stations in Argentina.
|
||||
After that, all lines except the one containing the city specified by the \$CITY
|
||||
variable will be removed and the data will be formated and saved in the \$OUT file
|
||||
|
||||
More info: https://datos.gob.ar/dataset/smn-estado-tiempo-presente
|
||||
|
||||
Default \$CITY selected: $CITY
|
||||
Default \$OUT file: $OUT
|
||||
|
||||
Options:
|
||||
-c Set the \$CITY variable
|
||||
-C Cleanup tmp directory
|
||||
-o Set the \$OUT file
|
||||
-p Print the output instead of saving it
|
||||
-h Print this message
|
||||
EOF
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
if [ -d $TMPDIR ]; then
|
||||
rm -rf $TMPDIR/*
|
||||
fi
|
||||
}
|
||||
|
||||
# Parse args
|
||||
while getopts "hCpc:" opt; do
|
||||
case $opt in
|
||||
h)
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
C)
|
||||
cleanup
|
||||
exit 0
|
||||
;;
|
||||
c)
|
||||
CITY=$OPTARG
|
||||
;;
|
||||
o)
|
||||
OUT=$OPTARG
|
||||
;;
|
||||
p)
|
||||
print=true
|
||||
;;
|
||||
\?)
|
||||
echo "" >&2
|
||||
help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Create dir if not exists
|
||||
if [ ! -d /tmp/weather ]; then
|
||||
mkdir -p $TMPDIR
|
||||
fi
|
||||
|
||||
# Get the dataset
|
||||
curl -s "$URL" --output $TMPDIR/weather.zip
|
||||
unzip -q $TMPDIR/weather.zip -d $TMPDIR
|
||||
|
||||
# Sanitize
|
||||
iconv -f latin1 -t utf8 $TMPDIR/*.txt | tr -d '
' > $TMPDIR/final.txt
|
||||
|
||||
# Cut city data
|
||||
data=$(cat $TMPDIR/final.txt | grep -i "$CITY" || echo "notfound")
|
||||
|
||||
if [ "$data" = "notfound" ]; then
|
||||
echo "Error: City/Weather station not found"
|
||||
cleanup
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Process string
|
||||
processed=""
|
||||
for (( i = 0; i <= $FIELD_COUNT; i++ )); do
|
||||
field_number=$(($i +1))
|
||||
field=$(echo $SCHEMA | cut -d ";" -f $field_number)
|
||||
value=$(echo $data | cut -d ";" -f $field_number)
|
||||
|
||||
line="${field}=$(echo ${value/\//} | sed -e 's/^[ ]*//')"
|
||||
|
||||
if [ ! $i = $FIELD_COUNT ]; then
|
||||
processed="${processed}${line}\n"
|
||||
else
|
||||
processed="${processed}${line}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Print or save?
|
||||
if [ "$print" = true ]; then
|
||||
echo -e "$processed"
|
||||
else
|
||||
rm $OUT
|
||||
echo -e "$processed" >> $OUT
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
cleanup
|
Loading…
Reference in new issue