Login
Freitag, 20. Januar 2012 23:29

MagpieRSS - Der magische RSS Parser für PHP ohne Image

Author : 
magpieRRS_Image_Hack

Auf der Suche nach einem leistungsfähigen RSS Parser bin ich vor einiger Zeit auf das Open-Source-Projekt MagpieRSS gestoßen. RSS-/Atom-Feeds lassen sich hiermit relativ einfach via PHP in Webseiten einbinden. Selbst die spärliche Dokumentation kann das nicht verhindern. Gesagt getan ... In einem aktuellen Prokjekt wurde allerdings gefordert das Bild des jeweiligen Artikels auf der fremden Webseite darzustellen. Kein großes Ding, da ich die spärliche Doku eigentlich verstanden hatte. Nach 2 Stunden und einigem Try and Error wurde ich eines Besseren belehrt. Auch googlen und diskutieren in einschlägigen PHP-Foren half nicht. Nach der Feststellung, dass 1000 andere ebenfalls nach einer Lösung suchten errinnerte ich mich an ein VB6 Seminar Anfang 2000. Hier fiel das Zitat von Martin Fowler : “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” Von diesem Zitat hatte der brilliante Kellan Elliott-Mccrea allerdings wohl nichts gehört als er MagpieRSS der Welt schenkte und mir nun die Gelegenheit gab, den Code etwas genauer unter die Lupe zu nehmen zu dürfen.

MagpieRSS unterliegt als Open-Source der GPL-Lizenz und kann hier runtergeladen werden. Die Installation gestaltet sich nach dem Entpacken relativ einfach. Es ist lediglich der entpackte Ordner [ magpierss-0.72 ] mit den Dateiein rss_cache.incrss_fetch.incrss_parse.incrss_utils.inc sowie Unterordnern in das Hauptverzeichnis des Webservers zu laden.

Einbinden von MagpieRSS

ist ebenfalls kein Hexenwerk. Mit dem in der Doku angebotenem Snippet :

// MagpieRSS Start -------------------------------------------------------

<?php
     require_once 'rss_fetch.inc';

     $url = 'http://www.bst-systemtechnik.de/index.php/blog?format=feed'; // URL gegen ihren Stream tauschen
     $rss = fetch_rss($url);

     echo "Site: ", $rss->channel['title'], "<br>";
     foreach ($rss->items as $item ) {
          $title = $item[title];
          $url   = $item[link];
          echo "<a href=$url>$title</a></li><br>";}?>

// MagpieRSS Ende -----------------------------------------

welches einfach in der PHP-Seite, an geeigneter Stellen eingebunden wird, kann der Feed sofort dargestellt werden.

Wichtig sind die ansprechbaren Objekte :

  • channel
  • item
  • image
  • textinput


Die wiederum in eigenen Arrays die Informationen bereitstellen.
Diese können bequem in Variablen eingelesen werden.

Beispielhaft und selbsterklärend hier das das Auslesen des Item-Objekts:

  • $title = $item['title'];
  • $url   = $item['link'];
  • $author   = $item['author'];
  • $description = $item['description'];
  • $image = $item['url'];          
  • $pubdate = $item['pubdate'];


Ein kleines Problem macht das $item['pubdate'];, es liefert hartnäckig, aber eigentlich erwartet ein falsches String-Datumsformat ( US ).

Also einfach umwandeln mit :

$item['pubdate'] = date('d.m.YY', strtotime($item['pubdate']));

Genauso einfach hatte ich das Image-Objekt erwartet. Dem war aber nicht so. Das MagpieRRS Image-Objekt war leer ! Scheinbar landet das K2-Blog Bild bzw. Thumbnail nicht im Objekt der Begierde. Da nach ausgiebiger Google Rechere auch andere nach einer Lösung suchten, gehe ich mal davon aus das es nicht am Blog-System liegt. Ich habe mir dann das Item-Objekt mal genauer angeschaut und siehe da, das Artikelbild war im $item['description'] ziemlich am Anfang in einem src-Tag versteckt. Es galt also eine Lösug zu finden das Bild rauszulösen.

Und hierfür eignen sich die PHP Funktionen strpos bzw. substr.

MagpieRSS mit Bild- bzw. Image-Hack

// MagpieRSS Image-Hack Start --------------------------------------------------------
    
<div>
       <ul>
          <?php

               require_once 'magpierss/rss_fetch.inc';             

              $url = 'http://www.bst-systemtechnik.de/index.php/blog?format=feed'; // URL austauschen

              $num_items = 10; // stellt die neuesten 10 Arikel dar
              $rss = fetch_rss( $url );
              $items = array_slice($rss->items, 0, $num_items);

              $ctitel = $rss->channel['title'];
              $cdesc = $rss->channel['description'];
           
              foreach ($rss->items as $item )
               {
                  $title = $item['title'];
                  $url   = $item['link'];
                  $author   = $item['author'];
                  $description = $item['description'];
                  $datum = $item[dc][date];
                  date('d.m.Y', strtotime($item['pubdate']));
                  $pubdate= date('d.m.Y', strtotime($item['pubdate']));   
   
                  // ---> Image Hack Start < --------------------------------

                  $start_image=strpos($description,"<i");
                  $end_image=strpos($description,".jpg") - $start_image + 5;
                  $start_short_text=strpos($description,"<p>") + 3;
                  $image=substr($description,$start_image,$end_image)." alt='blog-pic' height='45' width='100' />";
                 
                  // ---> Image Hack Ende < --------------------------------
        
                  $short_text=substr($description,$start_short_text,160);
                  $cleanString = strip_tags($short_text)." ..."; // entfernen eventueller HTML-Tags

                  $post="postet : " . $pubdate . " von " . $author;

                  echo "
                    <li>
                            </p><a href=\" ${url}\"target='_blank'></p>
                            <p>$image</p>
                            <p>${title}</p>
                            <p>${cleanString}</p>
                            <p>$post</p>   
                            </a>
                    </li>
                    ";

               }
           
            ?>
         </ul>
<div>      
// MagpieRSS Image-Hack Ende -----------------------------------------

Nun einfach den MagpieRSS Image-Hack an die geeignete Stelle in die PHP Datei kopieren und mit CSS formatieren ...

Have Fun


Medien


2 Kommentare

  • Kommentar-Link Sonntag, 29. Januar 2012 03:17 gepostet von Arnold Margolf

    Wenn du mir die URL deines Wordpress-Feeds gibst schaue ich mir das Ganze gerne mal an ...

  • Kommentar-Link Donnerstag, 26. Januar 2012 18:52 gepostet von Robert Tusch

    hey,
    ich suche auch schon laaaaange nach der Lösung. Ich habe jetzt mal deine Version ausprobiert, aber bei mir erscheint der Anfang des Textes. Das heißt, bei mit ist das Bild nicht in description. Was soll ich nun machen. Wie bekomme ich das Bild in description rein? Ich habe einen wordpress feed (also xml) und da ist es auch nicht drin.
    Ich freue mich auf deine Antwort.
    liebe Grüße
    Robert Tusch

Schreibe einen Kommentar