mercoledì 16 marzo 2011

Script per storicizzazione bollettini nivo-meteo (e non solo)

Aggiornato lo script per la storicizzazione dei bollettini nivo-meteo.
Ho strutturato la cosa in due parti, uno script che esegue il download, il controllo ed il salvataggio del bollettino, un file che contiene l’elenco dei bollettini da manipolare, rendendo piu` comoda l’aggiunta futura di ulteriori bollettini, o il riutilizzo dello script per altri scopi (che ho gia` in mente, ma e` un’altra storia).
Lo script e` scritto in “bash”, ovviamente gira su OS *nix/bsd.

Il file, che ho chiamato “elenco”, e` strutturato e contiene la “url” del file da scaricare, uno spazio vuoto, il “nome” del file di destinazione (come volete che venga nominato), uno spazio, il tipo del file che stiamo scaricando, questo e` il mio attuale:
http://www.sian.it/infoMeteo/stampaBollettinoStampa.do?settore=C&pubblicato=true&outputFormat=2&generatorClass=it.sian.mwablx.web.print.DatiStampaBollettinoDG&chiamata=infoMeteo EmiliaRomagna-Valanghe- pdf
http://www.sian.it/infoMeteo/stampaBollettinoStampa.do?settore=B&pubblicato=true&outputFormat=2&generatorClass=it.sian.mwablx.web.print.DatiStampaBollettinoDG&chiamata=infoMeteo Toscana-Valanghe- pdf
http://www.meteotrentino.it/bollettini/today/valanghe_it.pdf Trentino-Valanghe- pdf
http://www.meteotrentino.it/bollettini/today/generale_it.pdf Trentino-Meteo- pdf
http://www.arpa.veneto.it/upload_arabba/bollettini_meteo/dolomitimeteo/dolomitimeteo.pdf Veneto-Dolomiti-Meteo- pdf
http://www.arpa.veneto.it/upload_arabba/bollettini_meteo/dolomitineve/dolomitineve.pdf Veneto-Dolomiti-Valanghe- pdf

http://www.meteoam.it/?q=printpdf/node/10897 AM-Rischio-Valanghe- pdf
http://www.meteoam.it/?q=node/10897 AM-Rischio-Valanghe- html

Lo script e` questo, i commenti all’interno aiutano a capirne il funzionamento:
#!/bin/bash

# Questo batch legge dallo standard input una linea alla volta,
# scaricando la url specificata come primo parametro, assegnandogli
# il nome specificato come secondo, e l'estensione come terzo.
# Aggiunge inoltre ANNO MESE GIORNO al nome file salvato.
# Se il file scaricato e` uguale al primo precedente lo scarta.
#
# Il file di input deve quindi essere strutturato in questo
# modo:
#       URL NAME EXT
#
# Il comando dev'essere utilizzato cosi`: $0 < inputfile
#
# NOTE:
# Al primo utilizzo viene generato un file di confronto, e` un file
# vuoto che puo`/deve essere eliminato quando almeno un'altro e`
# stato scaricato e salvato.


# Funzione Contolla Scarica E Salva
funcses () {
    if [ -e `find -name $2\* | tail -n 1` ]
        then echo ""
        else touch $2$(date +%Y%m%d -d "-1 day").$3
    fi
    wget -U mozilla $1 --output-document=$2$(date +%Y%m%d)-new.$3
    i=0
    while [ -e $2$(date +%Y%m%d)-new.$3 ]
        do
            if [ -e $2$(date +%Y%m%d -d "-$i day").$3 ]
                then
                    diff $2$(date +%Y%m%d -d "-$i day").$3 $2$(date +%Y%m%d)-new.$3 > /dev/null
                    if [ $? != 0 ]
                        then
                            mv $2$(date +%Y%m%d)-new.$3 $2$(date +%Y%m%d).$3
                        else
                            rm $2$(date +%Y%m%d)-new.$3
                    fi
                else
                    $(( i++ )) 2> /dev/null
            fi
    done
    }

# Help
if [[ $# -ne 0 || $1 = "-h" ]]
    then
        echo "uso: $0 < inputfile"
        echo "oppure"
        echo "uso: cat inputfile | $0"
        echo ""
        echo "Se non specificata redirezione accetta input manuale"
    exit 1
fi

# Lettura standard input e chiamata alla funzione
while read line
    do
        if [ "$line" != "" ]
            then
                funcses $line
        fi
done
L’uso e` semplice:
nomedelloscript < inputfile
oppure:
cat inputfile | nomedelloscript
"nomedelloscript" e` il nome del file dello script (come lo avete chiamato), "inputfile" e` l’esempio "elenco" usato sopra. Nel mio specifico caso, ho nascosto i file in una directory del web server e l’aggiornamento dei bollettini e` effettuato una sola volta al giorno dal demone "crontab":
crontab -l
# m h  dom mon dow   command
1 12 * * * cd /var/www/nivometeo/ && . /var/www/nivometeo/.dwlbnm < /var/www/nivometeo/.elenco
2 12 * * * cd /var/www/nivometeo/ && . /var/www/nivometeo/.changepermission
si puo` notare come abbia chiamato lo script “.dwlbnm” ed il file “.elenco” per l’elenco (appunto), la directory “/var/www/nivometeo” e` dove si trovano i file e dove vengono scaricati e memorizzati i bollettini.

Nessun commento:

Posta un commento