HOW-TO prelevare o grabbare codice da un sito con php.

26/05/2006 by - Php

Come grabbare codice da un sito.

Questo how-to è stato scritto solo a scopo didattico. L’autore non si assume nessuna responsabilità
per ogni uso improprio (danno causato direttamente o indirettamente dall’articolo).
Prerequisiti necessari sono la discreta conoscenza di HTML e PHP.

HTML: è un linguaggio “statico” lato client. Il server riceve le richieste dal client e restituisce codice html che verrà analizzato e interpretato dal browser del client.

PHP: acronimo di “PHP: Hypertext Preprocessor” è un linguaggio scripting server-side: il server riceve le richieste dal client e genera direttamente la pagina richiesta prima di restituirla al client.

Passiamo alla pratica.
Prefissato il codice obiettivo il primo passo da affrontare è l’analisi del codice. Se la pagina fosse una semplice e statica .html non ci sarebbero impedimenti nell’utilizzo del classico copia/incolla, diventa interessante una pagina con contenuti dinamici, cioè aggiornata e/o modificata frequentemente.

E’ molto semplice prelevare codice se i dati sul sito TARGET sono impaginati uniformemente, quasi impossibile se i dati che ci interessano vengono impaginati ogni volta in maniera diversa. Nel secondo caso la crezione dello script risulterebbe inutile richiedendo aggiornamenti frequenti e parecchio tempo sia da parte dell’autore che dai webmaster che utilizzano lo script….

Attenzione: questa “famiglia” di script fa uso di pagine esterne e non può essere utilizzata su server FREE like altervista.

Si può sempre utilizzare un altro script che si occupa di scaricare e uploadare la pagina da processare inserito su crontab a esempio.

________________________________________

Visualizzazione di un box contenente un’immagine di un film in uscita al cinema.

TARGET= http://filmup.com/speciale/anteprime/index.htm

Sicuramente questa pagina viene “aggiornata” con frequenza settimanale. Non possiamo semplicemente copiare/incollare il codice di un film. Notate la linearità con cui vengono presentate le informazioni che vogliamo visualizzare.
Costruiremo uno script che effettuerà le seguenti operazioni:
– Caricamento del codice della pagina in una variabile
– Epurazione del codice
– Restituzione immagine e link a filmup.com

L’epurazione del codice è la parte più impegnativa. Dipendentemente dal tipo di dati che vogliamo ottenere la procedura cambia. In questo caso i passi sono:

– selezione del punto di inizio codice da grabbare
– selezione del punto di fine codice da grabbare
– inserimento in un array di ogni blocco film
– scelta casuale del film
– impostazione visiva e stampa

il punto di inizio deve essere una sequenza di codice formata da testo o tag che precede il codice da prelevare.

Sotto la dicitura “Questa settimana” troviamo la data di uscita dei film e una linea delimitante l’elenco dei blocchi film.

Utilizzando un browser leggiamo il sorgente delle 2 linee che ci interessano.

<font color=”Blue” face=”arial,helvetica” size=”3″><b>Questa settimana</b><br>
<font size=”1″>(in uscita il: <font color=”Black”>giorno mese anno</font>)</font></font>

Subito dopo inizia il codice di cui abbiamo bisogno. Un punto di partenza potrebbe essere

</font>)</font></font>

difficilmente verrà ripetuto nel resto della pagina ma controlliamo con “cerca” e assicuriamoci che sia una sequenza di

codice unica. Bene, ora ci occuperemo del codice successivo alla sequenza appena trovata al fine di trovare il punto finale del codice da analizzare. Controlliamo il sorgente subito l’ultimo box dei film

<div align=”center”><font face=”arial,helvetica” size=”2″><a xhref=”prec.htm” mce_href=”prec.htm” ><u><b>Clicca qui</b></u></a>, per le recensioni

dei film usciti <b>la precedente settimana</b></font></div><br>

Siamo fortunati: la sequenza <div align non è contenuta all’interno dei blocchi destinati ai film.

Grazie alle funzioni di php saremo in grado di aprire la pagina di filmup e leggerne il contenuto, modificarla sul nostro server e restituire il risultato.

<?
$webpage = “http://www.filmup.com/speciale/anteprime/index.htm”; //Pagina contenente il codice da grabbare

$fp = fopen ($webpage, “r”); //Apriamo la pagina di filmup in sola lettura

while (! feof($fp)) //Copiamo tutto il codice di filmup in $pagina
{
$riga = fgets($fp,1024);
$pagina = $pagina.$riga;
}

//Dividiamo la pagina in 2 parti:
//$pagina[0] -> da <HTML> a </font>)</font></font>
//$pagina[1] -> da </font>)</font></font> a </HTML>

$pagina = split(“</font>)</font></font>”,$pagina);

//Lavoriamo solo su $pagina[1] e dividiamo ancora la pagina
//$pagina[0] -> da </font>)</font></font> a <div align
//$pagina[1] -> da <div align a </HTML>

//NB: il codice “</font>)</font></font>” e “<div align” non verrà incluso.

$pagina = split(“<div align”,$pagina[1]);

//La nostra pagina contenente solo i blocchi dei film.

$pagina = $pagina[0];

//Modifico i link alle img e alla pagina recensione di filmup
$pagina = str_replace(“href=”/” mce_href=”/” ,”href=”http://www.filmup.com/” mce_href=”http://www.filmup.com/” , $pagina);
$pagina = str_replace(“src=”/” mce_src=”/” ,”src=”http://www.filmup.com/” mce_src=”http://www.filmup.com/” , $pagina);

//Divido i blocchi utilizzando un commento inserito dall’autore che identifica l’inizio di un nuovo blocco film
$pagina = split (“<!– start mod anteprima –>”,$pagina);

//Seleziono casualmente uno di questi blocchi
$film = $pagina[rand(1,count($pagina)-1)];

//Assegno alla variabile $img l’url della immagine comprendente il tag img
$film = split(“<td”,$film);
$img = split(“nowrap>”,$film[1]);
$img = str_replace(“</td>”,””, $img[1]);

//$img = str_replace(“67″,”87”, $img[1]); //modifico height img def 67
//$img = str_replace(“100″,”120”, $img); //modifico width img def 100

//Assegno alla variabile $nome l’url della recensione comprendente il tag a
$nome = split(“<b>”,$film[4]);
$nome = split(“</b>”,”$nome[1]”);

//Inserisco alt img
$img = str_replace(‘width=’, “alt=”Al cinema…” widht=”,$img);

//Stampo il risultato al centro pagina.
print “<center>” .$img .”<br><font size=”2″ face=”verdana”>”. $nome[0]. “</font></center>”;

?>
Ecco lo script in azione premete F5 per ottenere un nuovo screenshot…
Potete trovarne uno un pò più completo (galleria di immagini su popup) sul sito NewScript



Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.