Creer un flux rss de skyblog

Soyez le premier à donner votre avis sur cette source.

Vue 11 053 fois - Téléchargée 291 fois

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

Ajouter un commentaire

Commentaires

super_mamie
Messages postés
25
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
28 juillet 2006
-
C'est vrai que je ne les trie pas, mais comme il y a bien une date pour chaque message, les lecteurs de flus RSS les trient par eux meme non?
Je suis allé voir ta source mais je ne réussi pas à la faire marcher, je t'ai quand meme passé une petite amélioration à y mettre :)
TheTransporter
Messages postés
1
Date d'inscription
mardi 25 juillet 2006
Statut
Membre
Dernière intervention
25 juillet 2006
-
Salut,

Merci pour ton script, il est très interessant.

J'aurai aimé ajouter la gestion des commentaires et j'ai modifié ton script pour qu'il aille chercher les commentaires.

J'ai fait une fonction qui traduit la date donnée par skyblog.com en timestamp unix pour éventuellement les classer par ordre décroissant (le plus récent au dessus).
Malheureusement je rencontre des problèmes encore incompris et cependant, je vous livre le code source qui fonctionne à moitié et si qqun pourrais m'aider à le completer ...
Apparemment skyblog.com utilise plusieurs templates différents en fonction du nombre de commentaires (Si 1 ou plusieurs,si plusieurs pages)...
N'hésitez pas à le completer, il fonctionne déjà a 75% !

Voici le lien: http://www.phpcs.com/code.aspx?ID=38775
super_mamie
Messages postés
25
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
28 juillet 2006
-
et voila, maintenant ca re-marche, enfin jusqu'a la prochaine fois que skyblog modifiera ses fichiers...
zaxtik
Messages postés
25
Date d'inscription
jeudi 6 avril 2006
Statut
Membre
Dernière intervention
12 octobre 2007
-
Ok merci de votre indication

Et je n'avait eu l'envie de découvrir ce que c'etait avant de rearde ici ;) merci quand meme kankrelune !!!

Sinon FhX sa peut toujours servir, c'est quand meme interréssan...

Coucou747 merci de ton explication détaillé.

Sur ceux bonne journée...byby...
FhX
Messages postés
2368
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3 -
"Va si mon petit, tu commence à m'interréssé..."

Mouais bof quand même hein :p

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.