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 doneL’uso e` semplice:
nomedelloscript < inputfileoppure:
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/.changepermissionsi 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