Automazione scaricamento dati da sito web

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Automazione scaricamento dati da sito web

Messaggio da joe »

Devo estrarre dei dati di misurazioni reperibili al seguente indirizzo.

http://www.cartografiarl.regione.liguri ... iMeteo.asp

Dateci un'occhiata...

In pratica seleziono:

1- stazione di misura che mi interessa.
2- "Tipo di dato" scegliendo "Orario" (misurazioni ora per ora).
3- "Parametro" di interesse (può essere precipitazione, temperatura, o portata).
4- tipo di output (sempre "File ascii" con separatore ";")
5- Inizio periodo (data e ora)
6- Fine periodo (data e ora)

A questo punto premendo il bottone "Accedi ai dati", si pare una nuova finestra con scritto: "Scaricare qui il file che contiene i dati estratti"

La parola "qui" è un collegamento all'indirizzo del file da scaricare, che si può dare anche in pasto a wget per capirci.

Et voilà: ecco che in locale mi ritrovo il file che mi interessa.

Siccome devo ripetere l'operazione per diverse stazioni di misura, mi chiedevo se ci fosse la possibilità di buttare giù un semplice script, magari in bash in modo che sia possibile ottenere direttamente il file di interesse senza interagire interattivamente con l'interfaccia web.

Qualcosa da richiamare come segue, chiamiamo l'eventuale script ad esempio getdata.sh:

Codice: Seleziona tutto

getdata.sh <nome-stazione> <parametro-di-interesse>
I restanti "parametri" necessari:
- tipo di output e separatore
- inizio e fine periodo
- tipo di dato orario

li infilerei come variabili direttamente nello script, perchè sono sempre costanti... In pratica mi interessa sempre lo stesso periodo, sempre misurazioni orarie e voglio ottenere sempre lo stesso tipo di output formattato allo stesso modo.


Per automatizzare la procedura, si deve capire come funziona l'interfaccia web.
In pratica è una pagina ".asp" con dei javascript o qualcosa del genere.
Quando si selezionano manualmente i vari parametri, vengono memorizzati in pratica delle variabili che vengono passate poi a questo javascript, o qualcosa del genere e infine quando si preme "accedi ai dati" ecco che lui "crea" il link richiesto e lo mette a disposizione.

L'idea sarebbe quella di crearmi un file di testo di due colonne inputfile.txt:

Codice: Seleziona tutto

"nome_stazione" "misurazione_di_interesse"
E poi richiamare lo script bash:

Codice: Seleziona tutto

while read stazione misurazione
do
	getdata.sh "$stazione" "$misurazione"
done < inputfile.txt 
In questo modo posso con calma scegliere le stazioni di interesse in base a criteri che non sto qui a spiegarvi.
Crearmi a mano l'inputfile.txt e quindi richiamare lo script bash come mostrato sopra ottenendo in un colpo solo tutti i dati che mi servono in locale.

L'utilità è appunto il risparmio di tempo che butterei nella fase di selezione dati se usassi l'interfaccia web interattiva.


Questa è l'idea.
Siccome conosco questo forum da parecchio ormai, so che qui c'è gente pratica di sviluppo web, cui probabilmente basta un'occhiata alla pagina del link iniziale per capire come funziona e come si potrebbe utilizzare non interattivamente.
Non è che qualcuno potrebbe darmi qualche dritta su come potrei usare tipo curl o wget o altro per raggiungere lo scopo?

Se volete provare, fatemi sapere così vi indico un'"interrogazione" tipo d'esempio, in modo che possiate provare manualmente in prima persona a scaricare qualche dato e sicuramente capirete facilmente come funziona.
Purtroppo personalmente non sono pratico di web scripts e simili... ma alla fine guardando i sorgenti delle pagine mi sembra ad occhio abbastanza fattibile, solo che mi manca qualche "base" per mettere in pratica il tentativo.

Grazie in anticipo! :D

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Automazione scaricamento dati da sito web

Messaggio da targzeta »

Quello che vuoi fare tu si chiama "web scraping" e potrebbe anche non essere tanto banale in questo caso. Puoi usare wget con l'opzione per i cookie però poi comunque devi anche analizzare la pagina di ritorno del sito per prelevare alcuni parametri.
Da un'occhiata veloce tu devi raggiungere il link finale (l'URL che ottieni cliccando su "Accedi ai dati") passandogli un po' di parametri, alcuni di facile intuizione, altri meno. Probabilmento vorrà anche il cookie di sessione ASP inizializzato alla prima richiesta.
Forse, vista l'entità del problema, potresti anche pensare di usare qualche linguaggio più complesso, tipo il python con la libreria "requests".

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

Purtroppo non conosco il Python, anzi diciamo pure che conosco solo bash, per questo speravo di cavarmela con wget, curl, sed ecc..

A esempio tempo fà avevo fatto uno script per ottenere i miei bonus residui associati alla mia sim Tim che uso per connettermi.
Solitamente si va sul sito timinternet.it e si apre un frame lentissimo in flash. Quel frame però ha un indirizzo e se ne può visualizzare il sorgente pagina.

Da questo sorgente sono reperibili tra gli altri un secondo link che è ciò che serve perchè contiene alcuni altri parametri, questa volta semplicemente da visualizzare.

Codice: Seleziona tutto

url="http://www.timinternet.it/timmobile/cda/homepage.do"
url1=$(curl -s $url | grep -B1 "id=\"iframe_cruscotto\"" \
          | grep https                         \
          | sed 's/.*src=;$//'                 \
          | sed 's/^.*\(http.*\)".*$/\1/')
[ "x$url1" = "x" ] && exit 1
curl -s $url1 | grep "&euro\|Credito\|numero\|Valida\|Hai ancora\|Da utili\|Mancano\:\|[0-9][0-9]/[0-9][0-9]/[0-9][0-9]"|sed 's/<label>//g;s/<\/label>//g;s/<p>//;s/<\/p>//g;s/<span>//;s/<\/span>//;s/<p.*">//'|tr -s ' ' > outlog

Era solo un esempio probabilmente più semplice di quello che mi serve adesso.
Il problema è che in questo caso no riesco a capire quale sia l'indirizzo da scaricare.
E come fare poi a creare il link finale coi parametri che mi servono...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

targzeta ha scritto: Quello che vuoi fare tu si chiama "web scraping" e potrebbe anche non essere tanto banale in questo caso. Puoi usare wget con l'opzione per i cookie però poi comunque devi anche analizzare la pagina di ritorno del sito per prelevare alcuni parametri.
Da un'occhiata veloce tu devi raggiungere il link finale (l'URL che ottieni cliccando su "Accedi ai dati") passandogli un po' di parametri, alcuni di facile intuizione, altri meno. Probabilmento vorrà anche il cookie di sessione ASP inizializzato alla prima richiesta.
Forse, vista l'entità del problema, potresti anche pensare di usare qualche linguaggio più complesso, tipo il python con la libreria "requests".
Riprendo la questione che vi avevo proposto, non ho più avuto il tempo di approfondire. Adesso che sto avendo a che fare con quell'interfaccia mi accorgo che scaricare a mano i dati che mi servono è veramente lungo. Bisogna impostare ogni volta l'intervallo di date di interesse, il formato del file che si vuole ottenere ecc ecc.
Effettuare automaticamente le richieste di cui sopra sarebbe davvero un grande risparmio di tempo.

Ho dato un'occhiata al web-scarping in python. Non conosco quel linguaggio, ma avendolo provato in altre occasioni ho visto che è abbastanza "intuitivo" e penso che per quel poco che serve a me non dovrei aver troppi problemi anche a leggermi un po' di documentazione.

Il problema però è che le mie lacune stanno "a monte", cioè di web scraping non ne so assolutamente nulla. E mentre, come nel caso dell'esempio del "sito Tim", è facile avere accesso al sorgente della pagina che contiene le "stringhe" da visualizzare. Invece sull'interfaccia del sito che trovate in primo post mi pare tutto più "nascosto".
Metto il link nuovamente anche qui, visto che è passato del tempo:
http://www.cartografiarl.regione.liguri ... iMeteo.asp

Ecco, forse prima di addentrarmi nel discorso automazione col python penso sia il caso di capire meglio come funziona il sito della regione.

Quello che vi chiedo è qualche consiglio su quale tipo di documentazione, esempi, chiavi di ricerca considerare per capire come funziona l'estrazione dei dati nella pagina.
I passi faccio manualmente per estrarre i dati sono i seguenti:
  • Nel campo in cima tipologia località: scelgo "stazione"
  • Tipo di dato: scelgo "orario"
  • Parametro: ad esempio scelgo PRECIPITAZIONE - Precipitazione cumulata
  • Tipo di output: scelgo "File ascii"
  • Separatore: scelgo "punto e virgola"
  • Inizio periodo (dd/mm/yyyy): inserisco a mano la data di inizio (es. 01/01/2015 00:00)
  • Fine periodo (dd/mm/yyyy): inserisco a mano la data di inizio (es. 31/12/2015 23:59)
  • A questo punto punto clicco su "accedi ai dati".
Cosa succede:
Si apre una finestra pop-up con in cima scritto: "Scaricare qui il file che contiene i dati estratti": la parola "qui", in realtà è un link che punta al file che vogliamo scaricare.
Quell'indirizzo finale è qualcosa del genere: http://www.cartografiarl.regione.liguri ... 044332.txt

Se io copio quell'indirizzo e poi lo do in pasto a wget, questo lo scarica senza problemi. Quindi ne deduco che il discorso dei cookies potrebbe non essere così stringente. Tant'è che se provate il link sopra dovreste riuscire anche a scaricarlo senza problemi. Ma forse quello che intendeva "targzeta" nel suo intervento in riferimento ai cookies entra in gioco prima di aver ottenuto il link finale...

Cosa vorrei automatizzare, praticamente a me interesserebbe impostare in uno script i vari "parametri" che ho messo in grassetto: tipologia località, tipo di dato, parametro, tipo di output, separatore, inizio periodo, fine periodo.
A quel punto lanciando lo script vorrei che venisse direttamente ottenuto il link finale e scaricato il file corrispondente.
Alcuni parametri sarebbe poi il caso di passarli allo script come argomenti da riga di comando, ma questo non sarà un problema... Come dicevo il problema per me (beata ignoranza) è capire come passare quei parametri alla pagina ( o agli script che stanno nascosti nella pagina ) per cui il primo passo è capire come funziona quel sito.

Mi aiutate a capire in che direzione cercare informazioni per capire il funzionamento del sito?

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Automazione scaricamento dati da sito web

Messaggio da conraid »

Il "problema" è capire l'ID della richiesta, perché il form (che schifo quel sito comunque) crea una stringa così

Codice: Seleziona tutto

http://www.cartografiarl.regione.liguria.it/SiraQualMeteo/script/PubAccessoDatiMeteoPost.asp?CodParam=PRECPBIWC1&CodTema=STAZIONE&IdEstraz=DE&Frequenza=HH&TipoOutput=ASCII&Separatore=;&IdRichiesta=86264905146116&IdRichiestaCarto=&DataIniz=01/01/2015&InizOra=00:00&DataFine=30/11/2015&FineOra=23:59
ora, anche cambiando qualche parametro, ma lasciando lo stesso ID (IdRichiesta=86264905146116), dopo puoi scaricare 86264905146264.txt con i dati diversi. Quindi puoi giocare su questo.

Mandi una richiesta con dati diversi, ma quell'id e dopo scarichi il file ID.txt

Molto fumoso e ambiguo, ma è la prima cosa che mi è venuta in mente di fare.

Fatto da browser funziona, non ho provato da linea di comando.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

Intanto grazie per la rapida risposta.
Interessante...
Ti faccio una domanda banalissima: come hai ottenuto quella stringa?
Intendo proprio da dove l'hai letta?

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Automazione scaricamento dati da sito web

Messaggio da conraid »

joe ha scritto:Intanto grazie per la rapida risposta.
Interessante...
Ti faccio una domanda banalissima: come hai ottenuto quella stringa?
Intendo proprio da dove l'hai letta?
È quella che compare nella finestra popup da cui scarichi il file.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

Ah ecco,

Chiedo scusa per la banalità del ragionamento...
Per accedere alla finestra pop-up bisogna cliccare su "accedi ai dati".
Ho provato a impostare una stazione il dato di interesse l'intervallo temporale ecc...
Se copio l'indirizzo a cui punta quel bottone "accedi ai dati" leggo:

Codice: Seleziona tutto

javascript:invia('ESTRAZ','87424631649907',document.forms[0]);
Molto esplicativo... #-o

Se invece ci clicco sopra con il tasto destro e scelgo "ispeziona elemento" (usando chromium come browser) si accede ad una sorta di sorgente pagina... Che contiene in effetti vari parametri tra cui anche l'id richiesta...

In sostanza, come dicevi bisogna capire come e quando viene generato l'ID richiesta...
Faccio qualche prova a tentoni...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

http://www.cartografiarl.regione.liguri ... eOra=23:59

Analizzo meglio l'url della pagina finale, pagina in cui è contenuto l'url del file da scaricare, lo spezzo in varie parti:

Codice: Seleziona tutto

http://www.cartografiarl.regione.liguria.it/SiraQualMeteo/script/PubAccessoDatiMeteoPost.asp?
CodParam=PRECPBIWC1
CodTema=STAZIONE
IdEstraz=DE
TipoOutput=ASCII
Separatore=;
IdRichiesta=86264905146116
IdRichiestaCarto=
DataIniz=01/01/2015
InizOra=00:00
DataFine=30/11/2015
FineOra=23:59
Cosa c'è:

- tipo di dato (CodParam), in questo caso PRECPBIWC1 immagino stia per "precipitazione cumulata" perchè nell'esempio avevo scelto di prelevare i dati di un pluviometro. Se ad esempio si sceglie un'altra stazione che misura ad esempio il livello dell'acqua nel fiume "CodParam" viene impostato a "CodParam=LIVAIDRWID" (che dovrebbe appunto contraddistinguere "livello medio del torrente"). Insomma ad ogni tipo di parametro che si vuole ottenere corrisponde un codice.

- codtema=stazione, secondo me dice semplicemnte che l'nterrogazione è stata condotta selezionando in alto "stazione" (tipologia località).

- Idestraz=ID, non saprei... Ma non mi pare una variabile...

- poi le altre sono intuitive... a parte appunto id_estrazione che non si capisce bene come venga generata.

Cosa manca:

- Non vedo però in quell'indirizzo riferimenti alla stazione di interesse.... Mi aspetterei ad esempio qualcosa come "&ID_Staz=ME00039"... Dove ad esempio ME00039 è l'identificativo di una stazione di misura.

E questo è fondamentale perchè devo in qualche modo poter scegliere la stazione di misura da cui scaricare i dati, è abbastanza ovvio...
Forse la stazione di interesse è già nascosta nell'id_richiesta.

L'url in cima, permette, cambiando alcuni parametri, ad esempio l'intervallo temporale scelto, di ottenere un file di dati differente ma sempre relativo alla stessa stazione.
Inoltre se una stazione ha misurato ad esempio sia pioggia che temperatura, il nostro id_richiesta ci permette di accedere ad entrambi i dati, basta cambiare il codice riportato in "CodParam=".

Quindi i "parametri" visibili nell'url sono modificabili, ma quelli non presenti (come l'id_stazione) devono essere già definiti prima di aprire il link "accedi ai dati".

In pratica secondo me bisogna lavorare sulla prima pagina non su quella dove sta il link al file finale.
In particolare in quella occorrerà inserire l'identificativo della stazione... con qualche automatismo....
Per ora ho visto solo che le stazioni hanno degli id.. E l'ho visto usando la funzione "ispeziona elemento" del browser chromium.

Probabilmente chi si intende di web, con la funzione "ispeziona elemento" penso capirà come si interagisce col sito...
Sinceramente io la vedo un po' dura... almeno per quelle che sono le mie capacità.

Ricordo solo che lo scopo sarebbe avere uno script che prenda come argomenti variabili la stazione e il tipo di dato esempio:

Codice: Seleziona tutto

script "genova - pontedecimo" livellomedio
L'intervallo di date invece è di fatto una costante, nel senso che a me interessa sempre lo stesso intervallo di date ma per diverse stazioni.
Il tipo di dato di interesse può avere per i miei scopi tre valori: livello medio del torrente, precipitazione cumulata, temperatura media dell'aria.

Riassumendo, penso di non sbagliarmi tropo affermando che:
l'accesso alla pagina iniziale e la scelta della stazione di misura determina un id_richiesta che identificherà univocamente la stazione di misura scelta.
Se analizzate la pagina principale ad esempio troverete:

Codice: Seleziona tutto

<option value="ME00039" selected="">GENOVA - PONTEDECIMO (Genova)</option>
Questo dopo aver scelto la stazione di "genova - pontedecimo", tanto per fare un esempio.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

joe ha scritto: Riassumendo, penso di non sbagliarmi tropo affermando che:
l'accesso alla pagina iniziale e la scelta della stazione di misura determina un id_richiesta che identificherà univocamente la stazione di misura scelta.
Se analizzate la pagina principale ad esempio troverete:

Codice: Seleziona tutto

<option value="ME00039" selected="">GENOVA - PONTEDECIMO (Genova)</option>
Questo dopo aver scelto la stazione di "genova - pontedecimo", tanto per fare un esempio.
Non è del tutto corretto. Ho fatto ancora qualche test e ho notato questo comportamento:

Collegandomi alla pagina principale ed eseguendo un'interrogazione: ad esempio "piogge cumulate" "stazione di misura pippo". Ecco che viene creato ad esempio un id_richiesta: "1234" ad esempio. Quando clicco "accedi ai dati" ecco che il link a cui vengo rimandato conterrà nell'indirizzo l'id_richiesta "1234". Ma non conterrà riferimenti espliciti alla stazione scelta pur puntando di fatto a dati relativi ad essa.

La cosa interessante è che se torno nella pagina principale senza riaggiornarla (con ctrl+r oppure F5 insomma) e scelgo un'altra stazione di misura, l'id_richiesta non cambia.
Di fatto eseguendo una seconda interrogazione con stesso parametro scelto nella prima (nell'esempio "pioggie cumulate"), con lo stesso intervallo di ore di prima, ma scegliendo una seconda stazione "pluto". Ecco che il link "accedi ai dati" sarà identico a prima...

In sintesi l'id_richiesta sembra solo legato all'apertura della pagina principale dell'interfaccia e non alla scelta di una diversa stazione di misura come avevo ipotizzato nel post precedente.

Per automatizzare l'interrogazione bisogna quindi capire come viene scelta "dietro le quinte" la stazione.
Manualmente si seleziona dal menù a tendina, e selezionando una certa stazione si va a modificare il sorgente pagina
Ispezionando l'elemento "menù a tendina" relativo alla scelta della stazione ecco cosa appare nel sorgente dopo aver scelto ad esempio la stazione di "Sanremo".

Codice: Seleziona tutto

<select name="Ubic" style="font-size:14px;" onchange="inviaTema(document.forms[0],'STAZIONE',false);">
<option value="ME00015">ALPE GORRETO (Genova)</option>
<option value="ME00062">ALPE VOBBIA (Genova)</option>
<option value="ME00173">ARENZANO (Genova)</option>
<option value="ME00310">ARENZANO-PORTO (Genova)</option>
[...]
<option value="ME00024">ROCCHETTA NERVINA (Imperia)</option>
<option value="ME00030">RUGGE DI PONTEDASSIO (Imperia)</option>
<option value="ME00006" selected="">SANREMO (Imperia)</option>
<option value="ME00279">SEBORGA (Imperia)</option>
<option value="ME00228">SELLA DI GOUTA (Imperia)</option>
[...]
<option value="ME00297">VERZI LOANO (Savona)</option>
<option value="ME00248">VILLA PONZA (Savona)</option>
</select>
Come si vede sono elencate tutte le stazioni (così come sono contenute e visibili dal menù a tendina... io ne ho riportate soltanto alcune... ).
E la cosa importante è che la stazione scelta viene contraddistinta dalla dicitura ' selected="" '.

Penso che si debba quindi "postare" la stazione scelta al server interagendo in modo automatico con il menù a tendina della scelta stazione.
Non ho capito come si possa automatizzare questa "selezione" quindi vi giro la domanda...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

Nessuno offre di più?
È così criptica quell'interfaccia web?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3789
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Automazione scaricamento dati da sito web

Messaggio da joe »

Aggiorno appena la situazione.
Purtroppo la faccenda non è per me affatto semplice perchè davvero di questi argomenti non ne so nulla. Per questo chiedevo anche qualche link ad informazioni mirate.
Si aggiunge il fattore tempo, nel senso che al momento non ho troppo tempo per documentarmi, o meglio non ho troppo tempo per spulciare documentazione potenzialmente inutile allo scopo... Non so se avete presente quando si brancola nel buio... ecco.

Ciononostante, grazie a qualche ricerca in rete ho trovato in un forum un consiglio che veniva dato ad un utente in una situazione simile alla mia. Consiglio molto generico, ma tutto sommato utile per capire come funziona quel diabolico sito.
Si consigliava di collegarsi al sito con un qualsiasi browser (nel mio caso chromium) e premere F12.
In questo modo si apre l'interfaccia "sviluppatore".
Da questa se si seleziona in alto "Network" e si filtrano tutti gli oggetti impostando "Documents".
Si vedono tutte le richieste che vengono fatte al server e le risposte che ci ritorna. Legate al particolare oggetto presente nella pagina che abbiamo sotto il naso.

Ho pensato di condividere con voi questa "scoperta" perchè penso che per alcuni di voi sia così molto più facile capire come funziona il marchingenio.

Potete fare un semplice test:
- vi collegate all'indirizzo principale
- premete F12 e salta fuori l'interfaccia sviluppatore
- scegliete Network e filtrate Documents
- adesso aggiornate la pagina
- vedrete che compaiono 3 frames di cui è composta la pagina principale. A tutti e tre corrisponde la richiesta "GET" (abbiamo fatto una richiesta http, niente di che...).
- a questo punto si può provare a selezionare ad esempio "stazione", in alto nella pagina principale e guardare cosa accade nella nostra finestra "strumenti sviluppatore" (o development tools per gli anglofili)
- compare l'oggetto "PubAccessoDatiMeteo12.asp" che nell'header riporta "POST", infatti selezionando "stazione" abbiamo eseguito una richiesta immettendo praticamente un dato.
- sempre negli headers c'è anche una voce "Form Data", che ha il seguente valore: "TipoTema=STAZIONE&Azione=&CodRete=&CodTema=STAZIONE"
- poi compare anche ""PubAccessoDatiMeteo13.asp/CodTema=STAZIONE" che invece ha "Request Method" "GET".
- A questo punto non vedo ancora nessun riferimento numerico a "IdRichiesta". Va detto che ci sono in gioco dei cookies e che la connessione riporta "keep-alive" (wget ha un'opzione keep-cookies o qualcosa del genere, le cose possono avere simile scopo, ma non ne sono sicuro)
- sulla pagina principale intanto è comparso il solito menu a tendina da cui si può selezionare la stazione di nostro interesse. Se ne scegliamo una ecco che qualcosa di interessante si vede aggiungersi nel dev tools. Ad esempio io ho scelto una stazione a caso "Alpe Vobbia (Genova)".
- Si aggiunge di nuovo l'oggetto blabla12.asp che di fatto è la richiesta della pagina http://www.cartografiarl.regione.liguri ... eteo12.asp
anche sta vola con metodo "POST" perchè anche sta volta avendo scelto qualcosa abbiamo di fatto comunicato qualcosa al server.
- andando a vedere gli headers ecco che alla voce "Form Data" compaiono CodUbiq: ME00062 (che sarebbe l'identificativo della stazione scelta sopra (alpe vobbia nel mio esempio). Ma poi compare anche il foxxuto IdRichiesta: (IdRichiesta:56653167886083).
Se scelgo la visualizzazione sorgente di questa voce "From Data" ecco come appare:

Codice: Seleziona tutto

CodBacino=&CodUbic=ME00062&CodProv=&Ubic=ME00062&LatMin=&LonMin=&LatMax=&LonMax=&Frequenza=HH&Azione=INSERISCI_TEMA&CodTema=STAZIONE&IdRichiesta=56653167886083&IdRichiestaCarto=
Il problema è ancora una volta l'id_richiesta che non l'ho scelto io da qualche parte, ma secondo me viene creato al volo da qualche meccanismo nascosto.
- Ad ogni modo a questo punto si avrebbero tutti gli elementi per costruire il nostro link finale (v.di post precedenti)

Per il momento non vado oltre.

Aggiungo invece una nota sull'utilissimo dev tools di chromium: cliccndo col destro sull'oggetto aggiunto possiamo anche copiare la nostra richiesta in formato "curl". Ecco come appare:

Codice: Seleziona tutto

curl 'http://www.cartografiarl.regione.liguria.it/SiraQualMeteo/script/PubAccessoDatiMeteo12.asp' -H 'Cookie: ASPSESSIONIDAQRBAQCC=FJABGCJDLHBPHEKNIAOEJGBH; ASP.NET_SessionId=i5hyuuepnk15x02hntshrrv2; ASPSESSIONIDAQTBATAD=OJAODKIDOOONBKCBJCFPBDCB; ASPSESSIONIDASRBAQDC=OIPHFIKDKNMAJJPFKFCBDKIK; ASPSESSIONIDAQTACTAD=GOLLDDHDKNGDMFCHMBINHMJC; ASPSESSIONIDCQSAAQDC=OFHBCNLDJMFCLNHLMHABPJKE; ASPSESSIONIDCSQBCTBD=KCKHCDDAHCADBGAMJBLIDMIK; ASPSESSIONIDASQBCTAC=CMCLNBFABDIFPNCIMCOOKFPC; ASPSESSIONIDCQSBATBC=LGCOPLBAJKKJALHLGGFBNNCM; ASPSESSIONIDCQQDBQDC=NHADALJAGDPOBBLFIJEBHBKL; ASPSESSIONIDCSTCCTAC=KJBJDCOAIKHJHNDDPKJGEJHB; ASPSESSIONIDCSRBASBC=IEENLEMABPLLMFBAPCENGBDO; ASPSESSIONIDASTACRAC=JPLJBJJBJCBCAEJHNKODCDPJ; ASPSESSIONIDCQQCAQDD=MAHBPLKBDNBJPOBINGNJFKPJ; ASPSESSIONIDCQSBATBD=BFPNEJNBLGAHJPNGKIEDMECN; ASPSESSIONIDCQSDCSBC=CPCDHNGBBFPCPJDNDJIBAFNN; ASPSESSIONIDCSQCDTAC=EMFFFCFCDFAGJKFEOINHOFBG; ASPSESSIONIDASTABQCC=JIJODGBCDPBOAPJHFDCIIKBH; ASPSESSIONIDCQSBCSAC=HGBDFKEABJKMKBKAIKJLKJJH; ASPSESSIONIDCSTAASBD=BADFHPEALPDOCNIKMBIONFAC; ASPSESSIONIDAQSDDQBC=KGCPNHGADDCOJIAABDHKLFGL; ASPSESSIONIDAQRABQDD=LNKOHABALKOBMDJGDBNOAKHI; ASPSESSIONIDASRDDSBC=DDKDMHHAFCHHMJNPNMGBJHJK; ASPSESSIONIDCSTADQBD=COLJKDABBDHLHDCEFJDAPPAE; ASPSESSIONIDCQSBDTBC=GNPEDJLAELDOCFGBJOCCLKPM; ASPSESSIONIDAQTDCTAC=BHPLPPGBBPOMGEDNAOMGPPHB; ASPSESSIONIDCQRCASAC=BHIFPBGBOGJJKHOGHFDLLJKP; ASPSESSIONIDCQSBAQCC=HKAHEMJBEAKBMFLCKJKAAAJF; ASPSESSIONIDAQQAAQCC=OHKFJHKBBDGHGDJKPDICKMGI; ASPSESSIONIDCQQBBQCD=OENJJNBCJHPPMDNFPCIPCBBJ; ASPSESSIONIDCQRAATAC=HCGGHKLCJHKLELJMGDGNOHPP; ASPSESSIONIDCSRAATBC=OILPMPBAHIJBMKCGIDFDCGJA; ASPSESSIONIDAQTDBQCD=BBPLKOHBNECEFDHPFEFGPCGJ; ASPSESSIONIDCSRDARDD=PBIMPKEBOCNNEIMNCHNMLPLE; ASPSESSIONIDAQRBDRDD=DCLDMMIBEDLFJHJPPLNNNEIJ; ASPSESSIONIDCQRCBRCC=PCIFHNJBANNIKKANCOHLLNFG; ASPSESSIONIDCQSCCTBC=AHNBKPDALMLIAPOHODHHFAOM; ASPSESSIONIDASRCBRDC=OADPIPEAGJHKNKNAECDFLJHL; ASPSESSIONIDAQQDARDC=JDAPHLMDIIHBBJAIEFEOFEHH; ASPSESSIONIDCQRBDRBD=IGOPLDFAMPLEJOIDBCDAGNID; ASPSESSIONIDAQRCCSAC=DPOHHENBPPKBJNCLOHKIJOOC; ASPSESSIONIDCSSCCQDD=DPPFDKLBIHGGBIJOCMNEAPKC; ASPSESSIONIDASQABRDC=BPLBEAOBBAIILBECHDEIFLHG; ASPSESSIONIDCSQADQDD=LCPLMGPBMBHMKMKDLMLLLJMC; ASPSESSIONIDASSBDSAD=NPNDMHACKOGJCLGPEDHAHADL; ASPSESSIONIDCQSDAQCD=BAKHOLCCHDKILAKCOHLONOOH; ASPSESSIONIDCSQCBRCD=EMIJNOJCDLNJHJIDAGJGGMCA; ASPSESSIONIDCQRABTBD=EHLGPCGCLFFLHEGNEIHCBEFP; ASPSESSIONIDCSRCASBC=LGIBPPKCHKHMIFMCFMBGEPHC; ASPSESSIONIDAQTDBSBD=CMDLHMOCICJIJJGDPNEFAFKM; ASPSESSIONIDASTDBRCD=OGIPKGDDPNPKHAFOLAOJHNAP; ASPSESSIONIDCSTADRCD=MKAPLBEDNMELFGJBIIOKILAM; ASPSESSIONIDASSCCRCC=MHNPEHFDNGGABDFNOANKPHLJ; ASPSESSIONIDCQTDARCD=IEHAKPCDLEIBJCIDEBPMCDGG; ZNPCQ003-31333400=26f55a5d; ASPSESSIONIDAQRADSBC=AACADECBAKPCEBDNLLPOKHCD; ASPSESSIONIDCQRCAQDC=HJLJDOHBHMPGKIAAKGONIKAJ; ASPSESSIONIDCQSCDTAC=OFGJEMBCKENBCOHHBCOGAJGJ' -H 'Origin: http://www.cartografiarl.regione.liguria.it' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4,en-GB;q=0.2' -H 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: http://www.cartografiarl.regione.liguria.it/SiraQualMeteo/script/PubAccessoDatiMeteo12.asp' -H 'Connection: keep-alive' --data 'CodBacino=&CodUbic=ME00062&CodProv=&Ubic=ME00062&LatMin=&LonMin=&LatMax=&LonMax=&Frequenza=HH&Azione=INSERISCI_TEMA&CodTema=STAZIONE&IdRichiesta=56653167886083&IdRichiestaCarto=' --compressed
Ecco che appare in ultima riga anche l'id_richeista. Che da qualche parte deve essere stato generato...

Ok, ad ogni modo si è scoperto in qualche modo come "selezionare" la stazione.

Manca l'id_richiesta anche se potrebbe non essere così necessario conoscerlo, almeno a questo punto dell'interrogazione.
Ad esempio se fosse possibile simulare la selezione della stazione (Ad esempio con curl o wget) e funzionasse anche senza piazzarci un id richiesta... E se poi nella successiva pagina che ci viene data, che è la "*13.asp" si riesce a leggere anche l'id richiesta.... Ecco che senza conoscerlo in anticipo saremmo comunque in grado di utilizzarlo dopo quando ci servirà costruire il link finale.
Il tutto è un po' contorto. Perchè come dicevo brancolo nel buio...

Non sarebbe male qualche vostra considerazione, commento o ancora meglio se volete provare ad eseguire il test descritto sopra probabilmente ci capirete più di me (mi riferisco a chi mastica web scripting e diavolerie del genere).

Al prossimo aggiornamento! :)

Rispondi