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.inc, rss_fetch.inc, rss_parse.inc, rss_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 :
[php]
// MagpieRSS Start ——————————————————-
<!–?php require_once ‚rss_fetch.inc‘; $url = ‚https://www.bst-systemtechnik.de/index.php/blog?format=feed‘; // URL gegen ihren Stream tauschen $rss = fetch_rss($url); echo "Site: ", $rss—>channel[‚title‘], "
";
foreach ($rss->items as $item ) {
$title = $item[title];
$url = $item[link];
echo "<a href="$url">$title</a>
";}
?>
// MagpieRSS Ende —————————————–
[/php]
welches einfach in der PHP-Seite, an geeigneter Stellen eingebunden wird, kann der Feed sofort dargestellt werden.
Wichtig sind die ansprechbaren Objekte :
[list type=“check“ class=““]
[li href=““]channel[/li]
[li href=““]item[/li]
[li href=““]image[/li]
[li href=““]textinput[/li]
[/list]
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:
[list type=“check“ class=““]
[li href=““]$title = $item[‚title‘];[/li]
[li href=““]$url = $item[‚link‘];[/li]
[li href=““]$author = $item[‚author‘];[/li]
[li href=““]$description = $item[‚description‘];[/li]
[li href=““]$image = $item[‚url‘]; [/li]
[li href=““]$pubdate = $item[‚pubdate‘];[/li]
[/list]
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
[php]
<!–?php require_once ‚magpierss/rss_fetch.inc‘; $url = ‚https://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—> <?php
require_once ‚magpierss/rss_fetch.inc‘;
$url = ‚https://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,"
") + 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 "</pre>
<ul>
<ul>
<li>
<a href=""" target="_blank">
$image
${title}
${cleanString}
$post
</a>
<ul>";</ul>
</li>
</ul>
</ul>
<ul>
<ul>
<ul>}</ul>
</ul>
</ul>
<ul>
<ul>
<ul>?></ul>
</ul>
</ul>
<ul>
<ul>[/php]
Nun einfach den MagpieRSS Image-Hack an die geeignete Stelle in die PHP Datei kopieren und mit CSS formatieren …
Have Fun