Estrarre contenuti da flickr in php con DOM e CURL
Ovviamente il modo migliore di estrarre contenuti da flickr è utilizzare le sue api ma vi offro questo script come esempio in modo che possa essere modificato per altri scopi. Il dom non può essere utilizzato solo per html ma anche per l’xml e simili, un feed RSS ad esempio.
Gli utilizzi possibili sono diversi, dall’inserire su un sito i contenuti di un altro (se i copyright lo permettono) al monitoraggio di un sito, potreste ad esempio voler ricevere un’email quando viene pubblicato un nuovo articolo sul vostro sito preferito e così via.
Ecco lo script, gia dal codice dovrebbe essere abbastanza chiaro, comunque ho aggiunto dei commenti.
Lo script estrae prima il div contenente le immagini risultanti dalla ricerca, da questo estrae le immagini e visualizza solo quelle con una determinata classe.
<?php
// Creazione dell'oggetto
$doc = new DOMDocument();
// Ci possono essere errori di parsing, con @ non vengono visualizzati
@$doc->loadHTML(getPage('http://www.flickr.com/search/?q=gatto'));
// getElementById funziona esattamente come in javascript
$imgContainer = $doc->getElementById('ResultsThumbsDiv');
// stessa cosa per getElementsByTagName, viene restituito un oggetto
$images = $imgContainer->getElementsByTagName( 'img' );
// Utilizziamo l'oggetto come fosse un array
foreach($images as $img){
// Nel risultato sono presenti altre immagini oltre alle anteprime
// Con firebug vediamo che queste hanno classe pc_img quindi controlliamo l'attributo
// Si può accedere a qualsiasi attributo con questo metodo
if($img->getAttribute('class') == 'pc_img')
echo '<img src="'.$img->getAttribute('src').'" style="float:left;"/>';
}
/*
funzione che da un'indirizzo restituisce il contenuto della pagina
*/
function getPage($url){
if (!function_exists('curl_init')){
die('CURL non è installato sul server!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
?>





