Creer un flux rss de skyblog

Description

j'utilise depuis pas mal de temps la page d'accueil google, qui me permet d'avoir en un coup d'oeil une ribambelle de flux rss.
Ca me permet par exemple d'avoir directement les derniers articles sur les blogs de mes amis, seulement, certains utilisent skyblog, et la, pas moyen de trouver un flux rss...

alors voila une source php qui le fait, dans ma page d'accueil google, j'ai mis comme flux http://addresse_du_fichier?rss.php?blogger=...
et hop, ca marche.

Ce n'est peut etre pas tres propre, mais comme je n'ai pas compris grand choses aux sources en php, j'ai juste généré un fichier qui a la meme forme qu'un flux rss normal.

edit: voila, j'ai recodé ce qu'il falait recoder pour que ca marche avec la facon dont est fait skyblog depuis quelque temps.
En éspérant que ca dure...

Source / Exemple :


<?php

/*
Codé par Pierre GROS
Si ca peux vous servir, faites vous plaisir
Changez le tant que vous voulez
mais si vous pouviez laisser ce bandeau, ca ferais plaisir à mon égo

Ce script permet de créer un flux RSS pour un skyblog (enfin tant que l'architecture de leurs pages sera celle d'aujourd'hui)

Pour que ca marche, mettez ce fichier sur un server web gérant le PHP et le flux rss sera a l'adresse: http://adresse_du_fichier/rss.php?blogger=nom_du_blog

Dernière version: 12 juillet 2006

  • /
$nb_pages_max=-1;//mettre -1 pour tous if (!empty($_GET['blogger'])){ $blogger=urlencode($_GET['blogger']);//blogger à surveiller function nettoie_phrase ($phrase) //a ameliorer, ce sont les problemes que j'ai rencontré {//cette fonction nettoie une ligne de code html pour la renvoyer proprement $phrase = utf8_encode($phrase); $phrase = strip_tags($phrase);//enleve les balises html //pose probleme si ca coupe un code html /*if (strlen($phrase) > 100) { $phrase = substr($phrase, 0, 100);//ne prends que les 100 1ers caracteres $phrase .= "..."; }*/ $phrase = trim($phrase);//vire les caracteres illisibles en début et fin de phrase return ($phrase);//renvoie la phrase propre } function retourne_date ($date)//prends la date au format skyblog et la renvoie au format RSS { //Posté le vendredi 28 avril 2006 à 01:33 //deviens //Fri, 28 Apr 2006 01:33:00 +0200 $francais = array("Posté le ", "à ", "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "novembre", "décembre", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche"); $anglais = array("", "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Nov", "Dec", "Mon,", "Tue,", "Wed,", "Thu,", "Fri,", "Sat,", "Sun,"); $date = str_replace($francais, $anglais, $date); $date .= ':00 '.date("O"); return ($date); } if (!$fp = fopen("http://$blogger.skyblog.com/","r")) { echo 'ERREUR!'."\n"; } else { // NOMBRE DE PAGES $page_courante = 1; $nb_pages = 0; $fini = false; while (!$fini AND !feof($fp)) { //on parcours toutes les lignes $page = fgets($fp, 4096); if (strpos($page,'var blog_nb_page = ') !== false) {//quand on trouve la ligne indiquant le nombre de page, on récupere la donée $nb_pages = str_replace('var blog_nb_page = ','',$page); $nb_pages = str_replace(';','',$nb_pages); $fini = true; } } if ($nb_pages_max<0 or $nb_pages_max > $nb_pages) //remet bien la valeur de $nb_pages_max $nb_pages_max = $nb_pages; // TITRE DU BLOG $en_tete = false; while (!$en_tete AND !feof($fp)) { //on parcours toutes les lignes $page = fgets($fp, 4096); if (strpos($page,'Nom du Skyblog&nbsp;:') !== false) { //en tete du flux rss header('Content-type: text/xml'); echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n"; echo '<rss version="2.0">'."\n"; echo '<channel>'."\n"; echo '<title>'.$blogger.'</title>'."\n"; echo '<lastBuildDate>'.date("r").'</lastBuildDate>'."\n";//date de l'instant ou le fichier est appelé echo '<link>http://'.$blogger.'.skyblog.com/</link>'."\n"; echo '<description>' . nettoie_phrase (fgets($fp, 4096)) . '</description>'."\n"; echo '<language>fr</language>'."\n"; echo '<copyright>'.$blogger.'</copyright>'."\n";//mets le nom du blogger en copyright $en_tete = true; } } //debut des articles $page_courante = 1; while ($page_courante <= $nb_pages_max) {//tant qu'on a pas dépassé la derniere page, on lit if ($page_courante == 1) $page_a_voir=''; else $page_a_voir = $page_courante.'.html';//affiche la page de base ou la suivante if (!$fp = fopen('http://'.$blogger.'.skyblog.com/'.$page_a_voir,"r")) { $page_courante = $nb_pages + 1; } else { //articles de la page en cours $fini = false; while (!$fini AND !feof($fp)) { $page = fgets($fp, 4096); if ((strpos($page,'<div class="article"') !== false) and (strpos($page,'id="pagination"') === false)) {//$page contiens la ligne ou il y a l'ID et ce n'est pas la merdouille à la fin $id=substr($page,strpos($page,"id=\"")+4); //recupere l'ID du message. $id=substr($id,0,strpos($id,"\"")); $title = nettoie_phrase (fgets($fp, 4096)); //récupère le titre $description = nettoie_phrase (fgets($fp, 4096));//récupere la 1ere ligne non vide de l'article, ca sera la description while (strlen($description) == 0) //si la 1ere ligne est vide, on prends la suivante $description = nettoie_phrase (fgets($fp, 4096)); while (strpos($page,'<div class="date">') === false and !feof($fp)) $page = fgets($fp, 4096);//lis jusqu'a trouver la ligne contenant les dates $creation = ""; $modification = ""; if (strpos($page, "<div class=\"modified_on\">") === false) { $creation = retourne_date(nettoie_phrase($page)); } else { $creation = substr($page, 0, strpos($page, "<div class=\"modified_on\">")); //$modification = strstr($page, "<div class=\"modified_on\">"); $creation = retourne_date(nettoie_phrase($creation)); //$modification = retourne_date(nettoie_phrase($modification)); } //on affiche le tout echo '<item>'."\n"; echo ' <title>' . $title . '</title>'."\n"; echo ' <link>http://'.$blogger.'.skyblog.com/'; if ($page_courante > 1) echo $page_courante . '.html'; echo '#'.$id.'</link>'."\n"; echo ' <pubDate>'.$creation.'</pubDate>'."\n"; echo ' <description>'.$description.'</description>'."\n"; echo '</item>'."\n"; } } } $page_courante++;//on passe a la page suivante } //fin du flux if ($en_tete) { echo '</channel>'."\n"; echo '</rss>'."\n"; } else echo "Blog inexistant!"; } } else { echo 'Veuillez indiquer un blogger'."\n"; } ?>

Conclusion :


Ca as été fait a la va-vite, mais ca donne les résultats que je voulais.

note: le fichier doit etre en UTF-8

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.