10049 Letture

Download iterativo di un certo numero di file da un server remoto

Problema: scaricare iterativamente ed in modo completamente automatico un certo numero di file da un server remoto senza ricorrere a software di terze parti. Proviamo a risolvere il problema utilizzando un semplice script VBS.
Supponiamo di voler scaricare una serie di immagini presenti all'indirizzo http://www.nomedelserver.abc/images/. Esaminando gli URL presenti nelle pagine web del sito, si nota che alle immagin sono stati assegnati i nomi seguenti: img_01.jpg, img_02.jpg, img_03.jpg (...) img_50.jpg. Si ha a che fare, quindi, con cinquanta indirizzi complessivi (da http://www.nomedelserver.abc/images/img_01.jpg sino a http://www.nomedelserver.abc/images/img_50.jpg).

Creiamo quindi un file con estensione .vbs memorizzandolo in una cartella di propria scelta. Il file .vbs dovrà quindi essere aperto con un normale editor di testo ed incollatovi al suo interno il contenuto di questo file.


La subroutine in testa al file (HTTPDownload) si occupa di gestire la procedura di download di ciascun file remoto. Essa riceve in ingresso un URL (indirizzo) facente riferimento all'elemento da prelevare ed il percorso locale ove tale oggetto deve essere memorizzato (percorso_locale).
I passi compiuti dalla subroutine HTTPDownload sono illustrati in modo succinto sotto forma di commenti.

Lo script, in prima istanza, provvede a memorizzare nella variabile dir_locale il percorso corrente ossia la cartella dalla quale è stato avviato il file .vbs.
Si ricorre quindi, per tre volte, alla funzione InputBox: essa fa comparire a video una semplice finestra di dialogo. Nella prima l'utente dovrà digitare l'indirizzo da usare per recuperare gli elementi memorizzati sul server remoto avendo cura di sostituire, nel nostro caso, il numero dell'immagine con il "segnaposto" ?? (esempio: http://www.nomedelserver.abc/images/img_??.jpg).


Nelle due successive finestre di dialogo, si potranno indicare il numero di partenza e quello finale: nel nostro caso, rispettivamente, 1 e 50. In questo modo lo script sostituirà al "segnaposto" ?? inserito nel nome del file, di volta in volta, i numeri che vanno da "01" a "50".

Il tutto si chiarisce osservando le istruzioni seguenti:


For i=start_number to end_number
    HTTPDownload Replace(URL,"??", right("0000" & i, l_end_number)), dir_locale
Next


Dopo aver acquisito dall'utente l'URL, il numero iniziale e quello finale, lo script entra in un ciclo For ... Next utilizzato per scaricare iterativamente (chiamata alla sub HTTPDownload) ogni file dal server remoto (nel nostro caso, le cinquanta immagini). La funzione Replace provvede a sostituire, per ogni singolo URL, il segnaposto "??" con il numero di elemento corrente.
right("0000" & i, l_end_number) antepone automaticamente degli zeri ai numeri che non hanno il medesimo numero di cifre del valore finale. Supponiamo che il numero iniziale sia 1 e quello finale 200: lo script tenterà di prelevare dall'URL remoto i file denominati img_001.jpg, img_002.jpg, img_003.jpg sino ad arrivare ad img_200.jpg.

Facendo doppio clic sul file .vbs, gli oggetti remoti saranno scaricati nella medesima cartella ove è stato creato lo script.
Quella presentata è una semplice soluzione per rispondere ad un'esigenza pratica. L'approccio utilizzato ha ovviamente enormi margini di miglioramento.


Download iterativo di un certo numero di file da un server remoto - IlSoftware.it