Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

article.md 7.8KB

5 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. title: ★ Magpie RSS, installation et utilisation(s) en tout genre du parser PHP
  2. slug: magpie-rss-installation-et-utilisations-en-tout-genre-du-parser-php
  3. date: 2005-02-09 17:46:05
  4. type: post
  5. vignette: images/logos/miss_magpie.png
  6. contextual_title1: myOpenID propose des solutions intéressantes contre le phishing
  7. contextual_url1: 20070418-myopenid-propose-des-solutions-interessantes-contre-le-phishing
  8. contextual_title2: ★ Comment utiliser OpenID, la solution d'identification tant attendue
  9. contextual_url2: 20070104-comment-utiliser-openid-la-solution-d-identification-tant-attendue
  10. contextual_title3: Afficher les x derniers billets de Dotclear en page d'accueil
  11. contextual_url3: 20050430-afficher-les-x-derniers-billets-de-dotclear-en-page-daccueil
  12. <p>Comme <a href="https://larlet.fr/david/biologeek/archives/20050206-mises-a-jour-du-site/">promis</a>, je vais détailler un peu l'installation du <a href="http://magpierss.sourceforge.net/">parser <abbr title="RDF Site Summary">RSS</abbr> PHP</a> de Magpie. Je n'ai pas trouvé beaucoup de documentation en français sur le net, si ce n'est sur le <a href="http://www.dotclear.net/forum/">forum de Dotclear</a> :). Je tiens à rappeler en guise de préambule qu'il existe un <a href="http://home.gna.org/rssreaderdc/">plugin RSS Reader</a> si vous souhaitez afficher les billets sur votre blog qui, associé au <a href="http://zeubeubeu.net/blog/2005/02/08/922-plugin-related-045">plugin related</a>, permet aussi d'afficher ces liens sur des pages externes au site mais conservant la même structure comme l'ont fait <a href="http://www.brindilles.net/lune/index.php?2004/12/14/1231-combiner-deux-plug-ins-de-dotclear-lagglutineur-de-news">Lithium</a> ou <a href="http://s.billard.free.fr/dotclear/?2005/01/10/102-mon-aggregateur-perso">Sébastien Billard</a>.</p>
  13. <h2>Installation</h2>
  14. <p>Commencez par <a href="http://sourceforge.net/project/showfiles.php?group_id=55691">télécharger l'archive</a> présente sur le site de MagpieRSS. L'archive contient pas mal de fichier mais seuls quelques uns doivent être placés sur votre <abbr title="File Transfer Protocol">FTP</abbr>&nbsp;:</p>
  15. <ul>
  16. <li><strong>rss_cache.inc</strong>, <strong>rss_fetch.inc</strong>, <strong>rss_parse.inc</strong> et <strong>rss_utils.inc</strong> dans le dossier <strong>magpierss</strong> où vous souhaitez installer votre page (/liens/magpierss/ sur ce site)</li>
  17. <li><strong>Snoopy.class.inc</strong> dans le dossier <strong>extlib</strong>, lui-même dans le dossier <strong>magpierss</strong> (/liens/magpierss/extlib/ sur ce site)</li>
  18. </ul>
  19. <p>En ce qui concerne la configuration, je ne me rappele plus très bien mais il me semble que je n'ai touché qu'au format d'export (UTF-8 dans mon cas) mais ça peut varier selon votre configuration de Dotclear notamment. Par défaut, le cache est généré pour une heure ce qui m'a semblé être un bon compromis entre actualisation/charge du serveur mais c'est paramétrable.</p>
  20. <p><strong>[Mise à jour]</strong>&nbsp;: suite à un judicieux commentaire de <strong>darn</strong>, je vous rappelle (ou vous apprend) qu'il ne faut pas laisser des extensions de fichiers <strong>.inc</strong> à vos fichiers d'inclusion en <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> donc la solution généralement adoptée est de rajouter un <strong>.php</strong> à votre fichier donc ici par exemple <strong>rss_cache.inc</strong> deviendra <strong>rss_cache.inc.php</strong>, il faut bien sûr modifier le code en conséquence (en gros faire un chercher/remplacer dans les quatre fichiers). Mais pourquoi ça pose un problème de sécurité au fait&nbsp;? Tout simplement car les serveurs sont configurés pour interpréter du <strong>.php</strong> mais pas du <strong>.inc</strong> donc votre fichier pourra être lu par tous ce qui peut entraîner des problèmes de sécurité si vous avez stocké des informations sensibles (mots de passe, etc...), ce n'est pas le cas pour ces pages mais autant prendre tout de suite de bonnes habitudes, n'est-ce pas&nbsp;? :)</p>
  21. <h2>Utilisation</h2>
  22. <p>Voila le script commenté tel qu'il est implémenté dans mon <strong>index.php</strong>&nbsp;:</p>
  23. <pre>
  24. <code>&lt;?php
  25. require_once('magpierss/rss_fetch.inc.php');
  26. /*
  27. * fonction de parsing du fil RSS prennant en argument l'adresse du fil RSS,
  28. * le nombre de billets à afficher (3 par défaut) ainsi que la taille du
  29. * résumé des billets (300 caractères par défaut)
  30. */
  31. function parse_rss($url, $nb_items_affiches=3, $taille_resume=300)
  32. {
  33. $rss = fetch_rss( $url );
  34. if (is_array($rss-&gt;items))
  35. {
  36. // on coupe le tableau en fonction du nombre de billets à afficher
  37. $items = array_slice($rss-&gt;items, 0, $nb_items_affiches);
  38. // on affiche le titre du blog en question et on fait un lien dessus
  39. echo "&lt;h1&gt;&lt;a
  40. href=\"".$rss-&gt;channel['link']."\"
  41. title=\"".$rss-&gt;channel['tagline']."\"&gt;"
  42. .$rss-&gt;channel['title']."&lt;/a&gt;&lt;/h1&gt;";
  43. // ces lignes ne concernent que ce blog mais c'est pour avoir
  44. // un exemple de ce que qu'on peut faire...
  45. echo "&lt;div lang=\"fr\"&gt;";
  46. echo "&lt;img
  47. src=\"logo_".substr($rss-&gt;channel['link'],7,7).".png\"
  48. alt=\"".$rss-&gt;channel['title']."\"
  49. class=\"vignette\"
  50. title=\"".$rss-&gt;channel['tagline']."\"
  51. /&gt;";
  52. echo "&lt;ul&gt;";
  53. // pour chacun des billets on affiche le titre,
  54. // la date et le résumé (s'ils sont disponibles)
  55. foreach ($items as $item) {
  56. $href = $item['link'];
  57. $title = $item['title'];
  58. $mois = substr($item['dc']['date'],5,2);
  59. $jour = substr($item['dc']['date'],8,2);
  60. $heure = substr($item['dc']['date'],11,2);
  61. $minute = substr($item['dc']['date'],14,2);
  62. $resume = substr(strip_tags($item['content']['encoded']),0,$taille_resume)."...";
  63. echo "&lt;li&gt;&lt;a href=\"$href\"&gt;$title&lt;/a&gt;";
  64. if($jour != '')
  65. echo " publi&amp;eacute; le $jour/$mois &amp;agrave; $heure h $minute";
  66. if($resume != '...')
  67. echo "&lt;br /&gt;&lt;span&gt;$resume&lt;/span&gt;";
  68. echo "&lt;/li&gt;";
  69. }
  70. echo "&lt;/ul&gt;&lt;/div&gt;";
  71. }
  72. else
  73. {
  74. echo "Cette erreur signifie en bon fran&amp;ccedil;ais que le fil RSS "
  75. .$url." n'a pas pu &amp;ecirc;tre obtenu dans les temps.";
  76. }
  77. }
  78. // création du tableau contenant les fils RSS
  79. $tab_rss = array
  80. (
  81. 'http://exemple/de/lien/vers/un/contenu/rss/rss.php',
  82. 'http://pour/pas/oublier/la/virgule/rss.php'
  83. );
  84. // on mélange un peu le tableau histoire que ce ne soit pas
  85. // toujours le même blog qui se retrouve en premier (facultatif)
  86. srand((float)microtime()*1000000);
  87. shuffle($tab_rss);
  88. // on appelle la fonction décrite plus haut pour chacun des
  89. // fils RSS contenus dans le tableau mélangé
  90. for( $i = 0 ; $i &lt; count($tab_rss) ; $i++ )
  91. {
  92. parse_rss($tab_rss[$i]);
  93. }
  94. ?&gt;</code>
  95. </pre>
  96. <p>Il est rare que je détaille aussi précisément mon code alors j'espère que ça vous plaît :)
  97. C'est probablement optimisable, tout commentaire est le bienvenu.</p>
  98. <h2>Applications possibles</h2>
  99. <h3>Feed on Feeds</h3>
  100. <p>Grâce à ce parser on peut réaliser son aggrégateur en ligne personnel à la manière d'un bloglines maison, c'est ce que fait <a href="http://minutillo.com/steve/feedonfeeds/">Feed on Feeds</a> qui est aussi basé sur Magpie <abbr title="RDF Site Summary">RSS</abbr>, ça marche bien j'ai testé :).</p>
  101. <h3>Planet.ubuntu-fr.org&nbsp;?</h3>
  102. <p>En fait si je me suis autant pris la tête pour comprendre ce script c'est pour pouvoir l'utiliser dans le cas d'une aggrégation des fils <abbr title="RDF Site Summary">RSS</abbr> relatifs à ubuntu qui sont éparpillés un peu partout sur le net. Si plusieurs personnes sont partantes ça peut être intéressant, surtout que ce n'est pas très difficile à implémenter... à vous de jouer&nbsp;!</p>