Juste une quick hack rapide vieux de 15000 ans mais qui peut toujours être utile, il s’agit de la récupération via curl de flux RSS et de leur lecture avec SimpleXml.
Et comme pour moi du code bien commenté peut se passer de long discours, c’est parti:
⇀ Téléchargement du flux avec curl
<?php
// Download du flux avec curl:
$curl_hd = curl_init('http://rss.slashdot.org/Slashdot/slashdot');
// On garde une version Atom dans le coin pour la demo:
//$curl_hd = curl_init('http://rss.slashdot.org/Slashdot/slashdotatom');
// On a besoin de la reponse ...
curl_setopt($curl_hd, CURLOPT_RETURNTRANSFER, true);
// ... mais pas des headers:
curl_setopt($curl_hd, CURLOPT_HEADER, 0);
// Recuperation dans $rss du flux, et fermeture de curl.
$rss = curl_exec($curl_hd);
curl_close($curl_hd);
// Download du flux avec curl:
$curl_hd = curl_init('http://rss.slashdot.org/Slashdot/slashdot');
// On garde une version Atom dans le coin pour la demo:
//$curl_hd = curl_init('http://rss.slashdot.org/Slashdot/slashdotatom');
// On a besoin de la reponse ...
curl_setopt($curl_hd, CURLOPT_RETURNTRANSFER, true);
// ... mais pas des headers:
curl_setopt($curl_hd, CURLOPT_HEADER, 0);
// Recuperation dans $rss du flux, et fermeture de curl.
$rss = curl_exec($curl_hd);
curl_close($curl_hd);
⇀ Deux fonctions bien utiles pour parser les flux RSS et Atom
function parse_rss($doc)
{
// Pour chaque element...
foreach($doc->channel->item as $item)
{
echo $item->title . "\n";
echo $item->link . "\n";
echo $item->description . "\n\n";
}
}
function parse_atom($doc)
{
// Pour chaque element...
foreach($doc->entry as $item)
{
echo $item->title . "\n";
echo $item->link->attributes() . "\n";
echo $item->content . "\n\n";
}
}
{
// Pour chaque element...
foreach($doc->channel->item as $item)
{
echo $item->title . "\n";
echo $item->link . "\n";
echo $item->description . "\n\n";
}
}
function parse_atom($doc)
{
// Pour chaque element...
foreach($doc->entry as $item)
{
echo $item->title . "\n";
echo $item->link->attributes() . "\n";
echo $item->content . "\n\n";
}
}
⇀ Et pour finir, le parsing du flux téléchargé ($rss) avec SimpleXml:
// Creation et parsing de l'element telecharge avec SimpleXml:
$rss_doc = new SimpleXmlElement($rss, LIBXML_NOCDATA);
// Pour faire la distinction entre un fichier atom et un rss,
// on regarde juste quels tags sont presents. Dans le cas
// d'un "channel", ca sera du rss, dans le cas de l'atom,
// ce sera un "entry".
if(isset($rss_doc->channel))
{
parse_rss($rss_doc);
}
elseif(isset($rss_doc->entry))
{
parse_atom($rss_doc);
}
$rss_doc = new SimpleXmlElement($rss, LIBXML_NOCDATA);
// Pour faire la distinction entre un fichier atom et un rss,
// on regarde juste quels tags sont presents. Dans le cas
// d'un "channel", ca sera du rss, dans le cas de l'atom,
// ce sera un "entry".
if(isset($rss_doc->channel))
{
parse_rss($rss_doc);
}
elseif(isset($rss_doc->entry))
{
parse_atom($rss_doc);
}
That’s all.