Internet con un nuovo punto di vista.
Realizzare un robot per pagine che si aggiornano automaticamente
Questo articolo è stato pubblicato 9 mesi 28 giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Se riscontri errori o link rotti, puoi segnalarli inviando un commento.
Alcuni servizi necessitano di funzioni e informazioni che, per essere completi, devono provenire da altri siti web. Se queste informazioni, poi, sono in continuo aggiornamento, le possibilità diventano 2: inserire le novità manualmente sul sito oppure realizzare un robot che aggiorna il tutto al posto nostro.
Entriamo nel dettaglio della seconda scelta.
Passi da seguire
Innanzitutto bisogna pensare che la realizzazione di un robot non è una cosa né immediata né tantomeno semplice. Possiamo dividere il nostro lavoro in 5 compiti:
- Individuazione delle pagine da acquisire
- Posizionamento del cursore all’interno della pagina
- Acquisizione dati e spostamento del cursore
- Operazioni finali sul codice
- Impostare il crontab
A seconda delle nostre esigenze, questi compiti possono essere più o meno complessi.
In questo articolo verrà dimostrato come realizzare un semplice robot che acquisisce tutte le headlines del sito Corriere.it
Individuazione delle pagine da acquisire
Precisiamo una cosa: realizzare un robot non è sempre possibile. In alcuni siti è espressamente vietato, mentre per altri bisogna tenere in considerazione i diritti d’autore. Quindi fate attenzione su cosa volete concentrarvi.
Il primo compito è l’individuazione delle pagine da acquisire. Nel nostro caso, ci focalizzeremo sulla home page e l’acquisiremo tramite il comando file_get_contents:
$content = file_get_contents("http://www.corriere.it/index.shtml");
oppure tramite una chiamata socket con fsockopen:
//connessione al sito:
$viart_xml = fsockopen("www.corriere.it", 80, $errno, $errstr, 12);
// indicazione della pagina da chiamare:
fputs($viart_xml, "GET /index.shtml HTTP/1.0\r\n");
fputs($viart_xml, "Host: www. corriere.it\r\n");
// referer da simulare, per alcuni siti è obbligatorio:
fputs($viart_xml, "Referer: http://www.example.com\r\n");
fputs($viart_xml, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n");
if (!$viart_xml) {
die("$errstr ($errno)<br />\n");
} else {
$content = "";
while (!feof($viart_xml)) {
$content .= fgets($viart_xml, 1000000);
}
fclose($viart_xml);
}
La nostra pagina sarà codificata in HTML e sarà assegnata per intero alla variabile content.
Posizionamento del cursore all’interno della pagina
Acquisita la pagina, sarà necessario spostarci all’interno di essa e qui entra in gioco una funzione che può esserci molto utile:
function strlimit($text, $text_init = "", $text_end = "", $pos_init = 0)
{
if (strlen($text_end) > 0)
return substr($text, strlen($text_init) > 0 ? $pos = strpos($text, $text_init, $pos_init) + strlen($text_init) : 0, strpos($text, $text_end, $pos) - $pos);
else
return substr($text, strlen($text_init) > 0 ? strpos($text, $text_init, $pos_init) + strlen($text_init) : 0);
}
La funzione strlimit, realizzata ad hoc, ci permette di selezionare un testo all’interno di una variabile delimitato da text_init e text_end facendo partire la scansione da pos_init. Ad esempio:
$var = '1234564567890'; echo strlimit($var, '3', '8'); //output: 4564567 echo strlimit($var, '5', '8'); //output: 674567 echo strlimit($var, '5', '8', 6); //output: 67
La selezione del testo può avvenire in due modi: permanentemente e temporaneamente. Una selezione permanente ci permette di gestire una parte di codice più piccola che non presenterà ambiguità, mentre una temporanea ci permette di operare senza alterare la sorgente.
Nel nostro esempio possiamo vedere come applicare questa selezione, effettuando le seguenti operazioni:
// La variabile con tutto il contenuto della pagina ricordo che è $content
$content = strlimit($content, 'maincontent', 'vaschetta3');
// questa è una selezione permanente, in cui l’html viene limitato alla parte sinistra della pagina, da maincontent (la prima notizia) a vaschetta3 (le 3 immagini in fondo)
// analizzando il codice si può notare che ogni articolo inizia con un ‘homearticle-box’ e con la funzione explode siamo in grado di metterli in un array:
$articles = explode('homearticle-box', $content);
Acquisizione dati e spostamento del cursore
Ora che abbiamo tutti gli articoli, possiamo muoverci all’interno di essi per acquisirne i dettagli quali titolo, sottotitolo e occhiello. Qui entrano in gioco le selezioni temporanee che lasciano intatto il codice sorgente. Vediamo come (per semplificare ipotizzo che non ci siano news straordinarie):
for ($i = 0; $i < count($articles); $i++) {
$subtitle = strlimit($articles[$i], '<p>', '</p>');
$title = strlimit($articles[$i], '<h2>', '</h2>');
$occh = strlimit($articles[$i], 'class="hour"', '</p>');
// …
// qui ora vengono effettuate tutte quelle operazioni di pulizia e sistemazione dei tre oggetti, quail rimozione link, tag ecc. . Al termine assegniamo il risultato ad una variabile risultato.
$risultato[$i] = array(
'sottotitolo' => $subtitle,
'titolo' => $title,
'occhiello' => $occh
);
}
A questo punto avremo un array risultato con tutti gli articoli pronti per essere visualizzati o salvati in un database.
Operazioni finali
Ora sarà possibile gestire l’array per visualizzare a video le informazioni acquisite o salvarle in un database. Per quest’ultima operazione è consigliabile controllare che ogni articolo non sia già inserito per evitare doppioni facendo un controllo sul link (che rimane fisso una volta scritto).
Un esempio potrebbe essere la visualizzazione degli articoli:
for ($i = 0; $i < count ($risultato); $i++) {
echo '<h3>'.$risultato[$i]['sottotitolo'].'</h3>'."\n";
echo '<h1>'.$risultato[$i]['titolo'].'</h1>' ."\n";
echo '<h2>'.$risultato[$i]['occhiello'].'</h2>' ."\n";
echo '<hr>'."\n\n";
}
Impostare il crontab
Completata la realizzazione della pagina si passa all’impostazione del cron. Ogni piattaforma ha proprie opzioni per mettere a punto questo strumento.
Per eseguire lo script php, di norma, occorre impostare il task in modo che esegua l’azione:
cd /var/www/vhosts/example.com/httpdocs; php -q robot.php
oppure un’azione simile in base alle impostazioni del server.
Un’ottima referenza per gli orari dei task, invece, è la Wikipedia che spiega con molti esempi come impostarli.
Impostato il cron, è consigliabile effettuare dei test per vedere se il tutto funzionerà a dovere, semplicemente digitando nel proprio browser l’indirizzo del robot e verificando che il risultato sia quello previsto.
Questo è quanto, se avete suggerimenti o informazioni commentate.
(Immagine alta: Flicker, à voir etc…)
| Stampa l'articolo | Questo articolo è stato pubblicato da Giovdi il 4 ottobre 2009 alle 01:03, ed è archiviato come Guide pratiche, Programmazione: Web, Programmazione: Web server. Puoi seguire i commenti a questo post attraverso RSS 2.0. Puoi pubblicare un commento o segnalare un trackback dal tuo sito. |






