|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
[c++]prendere dati dal web!
ciao a tutti!
io volevo creare un programma capace di raccogliere dei dati da alcune pagine web dando in imput al programma stesso l'indirizzo di queste pagine... esiste un modo per fare ciò? grazie mille a tutti ! |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
http://msdn.microsoft.com/en-us/libr...31(VS.85).aspx http://msdn.microsoft.com/en-us/libr...30(VS.85).aspx in particolare qui: http://msdn.microsoft.com/en-us/libr...22(VS.85).aspx non é molto difficile. se invece vuoi scrivere un sorgente portabile che funzioni anche su Linux, ahité e che Dio ti aiuti: devi usare l'interfaccia BSD dei sockets (che contiene porcate a tratti stupefacenti) ed imparare le basi del protocollo HTTP; se poi devi pure passare per un proxy allora tanti saluti. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
Quote:
no io non devo passare ne per proxy ne per linux ne per niente! ora mi leggo tutto! |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
a proposito, se per "raccogliere dati da alcune pagine web" intendevi dire che devi fare il parsing dell'HTML e leggere il contenuto di alcuni tag allora puoi farti aiutare dall'implementazione Microsoft del DOM:
http://msdn.microsoft.com/en-us/libr...87(VS.85).aspx solo che questa é una cosa giá piu difficile perché richiede una minima conoscenza di COM, il layer di interoperabilitá che permette a quello e a molti altri set di API di essere usati virtualmente da qualunque linguaggio di programmazione. per una vita agevole in un ambiente COM in C++, ATL é d'obbligo, solo che non lo danno piu con l'SDK; dovresti scaricare il vecchio Platform SDK, che ancora contiene ATL ed MFC e che si trova qui: http://www.microsoft.com/downloads/d...6-9da2b03d9b92 |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
Quote:
ti dico cosa vorrei fare di preciso: si tratta di pagine di un gioco online. ho pagine come questa: http://www94.hattrick.org/Club/Players/Player.aspx?PlayerID=241160761&BrowseIds=241160761,240825163,240712091,241797788,241617612,241749748,241797858,237809268,235863168,234575276,230123304,240782777,241316416,241797938,241797951,241797964,241797963,241797995,241334685,241023848,241794878,234254045,241621155,241320522,241544552 e io vorrei fare un programma che, dato il link mi prenda un dato qualsiasi...che so il nome del giocatore! Ultima modifica di moritzplatz : 13-04-2009 alle 18:46. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
|
Quote:
cmq in Java per parsare pagine web c'è HttpClient in .NET c'è sicuramente qualcosa di simile.. non vedo perchè scomodar cose di tropp basso livello
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Basta usare cUrl |
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
in generale se il tuo programma deve girare solamente su Windows conviene usare solo roba giá presente in Windows: fare diversamente é stupido, significa solo aumentare la dimensione di download (e magari anche ridurre la qualitá). |
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
http://msdn.microsoft.com/en-us/libr...87(VS.85).aspx é un punto d'inizio; per il resto usa ATL. se non hai mai visto in vita tua nulla di COM allora dimenticati questo post, lascia perdere e usa qualche altro sistema |
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ah, non é detto che tu debba usare il C++: ad esempio il DOM é molto piu accessibile se usi Windows Script Host, che significa che dovresti scrivere in JScript o in VBScript il tuo programmetto (eliminando in una volta sola un mare di complicazioni).
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
siè vero potrei farlo in javascrit!
quindi mi devo studiare questo DOM...ok ora vedo! grazie! |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Quote:
Da quel momento se scarichi un altro programma che usa curl quando fai doppio click sul pacchetto le dipendenze sono soddisfatte, quindi non reinstalla un bel niente, usa curl che è già installato |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
ho trovato questa guida sul DOM
http://javascript.html.it/guide/lezi...etto-document/ solo che guardando l'html mi sono scoraggiato.... ma non esiste una funzione che mi prende l'html di una pagina e me lo salva in un file di testo? poi così potrei lavorarmelo agevolmente in C++ |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
string download;
//array per contenere gli eventuali errori
char errorBuffer[CURL_ERROR_SIZE];
//Inizializzazione di CURL
CURL *curl = curl_easy_init();
//Impostazione del buffer per gli errori
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &errorBuffer[0]);
//Impostazione della url da scaricare
curl_easy_setopt(curl, CURLOPT_URL, "http://url.da.scaricare");
//caso mai il sito rispondesse con Location impostiamo curl per reindirizzare
//automaticamente
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
//Ipostazione della funzione di callback richiamata da curl sulla ricezione di dati
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
//Impostazione del dato da passare alla callback
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &download);
//Non ci interessa l'header http tra i dati letti dalla callback
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//Esecuzione dell'operazione
CURLcode result = curl_easy_perform(curl);
if (result != CURLE_OK) //Errore!
cout << errorBuffer << endl;
else
{
//a questo punto in download ci sono i dati correttamente scaricati
ofstream of("download.html");
of << download;
}
//Cleanup
curl_easy_cleanup(curl);
//Da qualche parte la callback sarà:
int writer(char *data, size_t size, size_t nmemb, std::string *buffer)
{
//il return di un valore differente da size * nmemb causa l'interruzione del download con segnalazione di errore
if (!buffer)
return 0;
//Accodamento dei dati ricevuti
buffer->append(data, size * nmemb);
return size * nmemb;
}
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
ecco io devo includere curl
#include "curl/curl.h" dove lo trovo questo file? |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jul 2008
Città: roma (monti)
Messaggi: 808
|
ma non credo ci sia di default questa libreria...
! |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#20 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:15.




















