22 messaggi dal 20 febbraio 2002
Ciao ragazzi,

vi sottopongo il seguente quesito, relativo al "calcolo del cambio odierno" :)

Supponiamo di avere una pagina di prodotti, ognuno dei quali ha il prezzo espresso in Euro. Mettiamo di voler offrire al cliente la possibilità di visualizzare l'importo anche in Sterline inglesi e Dollari Statunitensi. Attualmente procedo in questo modo: vado sul sito del Sole24Ore, visito la pagina:

http://www.24oreborsaonline.ilsole24ore.com/Valute/fraSchema.asp?MENUITEM=CROSSEURO

e ne ricavo i prezzi alle voci corrispondenti. A questo punto apro il pannello di amministrazione del mio sito e digito gli importi (il cambio valuta è una variabile modificabile via database o file di testo).

La cosa funziona (ovvio) ma sarebbe molto carino poter automatizzare il tutto, senza doverci pensare più di tanto. Come si potrebbe procedere? Ho pensato questo: si potrebbe pescare la pagina che ho indicato poco fa tramite un GET XMLHTTP. In tal modo se io specifico (dal mio sito) l'url della pagina con le valute e la salvo come pagina HTML sul mio server, la posso "elaborare".

Tuttavia non è immediatissimo estrapolare i valori necessari da quel casino... Fosse una riga di testo, un TXT semplice... ma di roba ce n'è un sacco :)

Voi come procedereste?

11.886 messaggi dal 09 febbraio 2002
Contributi
Io ho fatto una cosa del genere da una pagina di yahoo per estrapolare il tempo (temperatura, nuvolette varie ecc.)
Ti conviene spenderci un po' di tempo per cercare di tirar fuori le informazioni, perchè almeno hai un servizio davvero efficiente, sempre aggiornato.

Come hai detto tu, usando XMLHTTP riesci a farlo. Non c'è bisogno però che ti salvi la pagina in quanto tutto l'output della pagina ti va a finire in una variabile. Da questa variable, poi, dovrai estrapolare i valori che ti interessano. Usa largamente le funzioni Left(), Mid() Instr() e così via.
Questo è il codice che uso io per prelevare l'output da una pagina remota:

sHTML = "http://www.ilsito.it/pagina.asp"
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objXMLHTTP.Open "GET", sHTML, False
objXMLHTTP.Send
sHTML = objXMLHTTP.responseText

sHTML contiene appunto l'output della pagina remota.
Questa qui sotto è la pagina da cui prendo il meteo
http://it.weather.yahoo.com/ITXX/ITXX0129/index_c.html
vedi ci stanno immagini tabelle... eppure con un po' di pazienza anche tu riuscirai a prelevare le informazioni sui campi.

Esempio... l'html dove è scritto il cambio con la corona è questo:
<tr class="od">
<td class="l" height="34"><b>Corona Ceca</b></td>
<td class="c">12:59</td>
<td>28,8700</td>
<td>28,8700</td>

Quindi che si deve fare? Innanzitutto vediamo in che posizione si trova la stringa "Corona Ceca"
posizione = Instr(sHTML, "Corona Ceca")

posizione avrà come valore... es: 3200 (cioè la parola Corona Ceca inizia al 3200° carattere). Quanti caratteri più avanti si trova il valore 28,8700? Li conti.... sono esattamente 50. Sappiamo che il valore è composto da 6 cifre più la virgola allora:
valorecorona = Mid(sHTML, posizione+50, 7)
e la variabile conterrà 28,8700.... ora potrebbe non essere esattamente preciso, però il metodo è questo.
Bisogna sperare che non facciano il restyle del sito ogni giorno... altrimenti le posizioni delle stringhe cambierebbero...
bye! ^_^

-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
22 messaggi dal 20 febbraio 2002
Grande risposta, ottimo tutorial, grazie!! In effetti basta che cambiono anche un solo carattere, per fregarti... ed è una cosa che può succedere, per esempio se cambia una data nella pagina, un numero... no? Non c'è quel rischio? Dovrebbe capitarti anche con yahoo, perchè non dovrebbe essere una pagina statica...

Mi viene in mente iul sistema adottato da molti siti che riportano info tratte da altri siti: spesso la "fonte" è un banale file di testo, fatto apposta dal sito originale per poter recuperare i dati comodamente.

Non è che anche ilSole o altri siti lo fanno? :D

Intanto ecco il codice, che mi genera il cambio del dollaro (prendo solo due decimali, sono sufficienti). Per ora funziona :D

------------------------------------------------
------------------------------------------------
sHTML = "http://www.24oreborsaonline.ilsole24ore.com/Valute/fraSchema.asp?MENUITEM=CROSSEURO"
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objXMLHTTP.Open "GET", sHTML, False
objXMLHTTP.Send
sHTML = objXMLHTTP.responseText

posizione = Instr(sHTML, "Dollaro USA")
valoredollaro = Mid(sHTML, posizione+52, 4)

response.write "Il dollaro oggi vale: " & valoredollaro
------------------------------------------------
------------------------------------------------

Il sistema è OTTIMO, salvo un dettaglio: se la pagina da "succhiare" è pesante, appesantisco l'apertura delle mie pagine ASP. Andremme magari integrato in modo tale da creare una Session e non ri-calcolare di nuovo tutto se uso più volte il processo di conversione...

Altra cosa: sfruttando il sistema si può fare un menù a tendina e creare lo stesso valore convertibile in varie valute :D
11.886 messaggi dal 09 febbraio 2002
Contributi
Il meteo mi funziona bene, in realtà non m'ha mai dato problemi...
Il fatto è che si, la pagina può cambiare: uno spot pubblicitario un po' più lungo potrebbe causare problemi, ma la cosa fondamentale è che non cambino gli "spazi" tra la dicitura "Corona ceca" ed il valore. Non mi importa se il nome della moneta si trova al 3000° carattere o al 3012°, tanto tutto si sposta più avanti / indietro, sia il nome che il suo valore.
Però è fondamentale che quei 50 spazi rimangano tali... di solito, hai visto sono tag di tabelle <tr> </td> questi qui, che sono immutabili a meno che non decidano di risistemare proprio tutta la tabella in un'altro modo.

Mi viene un dubbio... sarà legale una cosa del genere (appropriazione indebita???)? In fondo sono dati pubblici... da nessuna parte è scritto che non possono essere ridistribuiti. Magari nel tuo sito mettici un link al sito del sole24ore e con la scritta:"un servizio di..." così è chiaro che non cerchi di usufruire dei vantaggi di un servizio non tuo :P

Ps. Si si poi la soluzione di ricalcolare il valore è ottima, altrimenti ogni utente dovrebbe ricaricarsi la pagina. Prova a mettere i cambi delle valute in una variabile application, un'altra variabile inoltre conterrà la data e l'ora e l'ultimo aggiornamento.
Se questa data risale a... che ne so... 10 ore fa allora riaggiorna i dati, altrimenti prelevali dalle variabili application. ^__^


-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
22 messaggi dal 20 febbraio 2002
> sarà legale una cosa del genere (appropriazione indebita???)? In
> fondo sono dati pubblici... da nessuna parte è scritto che non
> possono essere ridistribuiti. Magari nel tuo sito mettici un link al
> sito del sole24ore e con la scritta:"un servizio di..." così è chiaro
> che non cerchi di usufruire dei vantaggi di un servizio non tuo :P

Secondo me non c'è alcun problema, anche perchè ti appropri di un "dato", in questo caso. Diciamo che forse il caso delle previsioni metereologiche è diverso, SE tu decidi di prenerti anche grafica e commenti vari. In tal caso magari si. Però estrapolare un "0.99" che tanto comunque estrapoleresti visitando "con gli occhi" il sito... non penso sia illecito :)


9 messaggi dal 23 gennaio 2004
www.deejaymax.com
Io ho provato con questo codice :
<%
sHTML = "http://www.24oreborsaonline.ilsole24ore.com/MainController?s=4&t=1&c=lvaleu"
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objXMLHTTP.Open "GET", sHTML, False
objXMLHTTP.Send
sHTML = objXMLHTTP.responseText

posizione = Instr(sHTML, "Dollaro USA")
valoredollaro = Mid(sHTML, posizione+52, 4)

response.write "Il dollaro oggi vale: " & valoredollaro
%>

e mi dà l'errore (0x800C0005).

Qualcuno sa darmi qualche spiegazione?

Che la forza sia con voi. DJ MAX

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.