RSS-Feeds einbinden

Mittlerweile gibt es einige Möglichkeiten, bei WordPress RSS Feeds einzubinden.

Beispielsweise kann man bei Themes, die Widgets unterstützen, das “hauseigene” Widget RSS benutzen. Damit lassen sich sehr einfach in der Sidebar RSS-Feeds oder Atom-Feeds ausgeben. Neben der RSS-Feed-URL kann man noch einen Titel angeben, der dann über den Feed-Links erscheint:

Wordpress RSS Widget
In WordPress vorab eingebautes RSS Widget für die Sidebar

Im obigen Beispiel habe ich mir dafür einen RSS-Feed bei der Twitter-Suche zusammengestellt. Man kann auf der Ergebnisseite bei Twitter die Sprache konfigurieren und diese Ergebnisseite dann als RSS-Feed-URL unter dem Link “Feed for this query” abspeichern (bzw. die Link-Adresse kopieren). Diese wird dann im RSS-Widget eingetragen, mit einem Titel versehen und gespeichert. Ab sofort taucht dann in der Sidebar (bzw. an der Stelle, an der das Widget integriert wurde) die Feed-Link-Liste auf.

RSS Feeds über SimplePie

Eine etwas komplexere aber dafür auch umfangreichere Möglichkeit, RSS-Feeds einzubinden, ist das Plugin SimplePie für WordPress. Genaugenommen werden dabei zwei Plugins benötigt, die beide auch über die Plugin-Datenbank von wordpress.org installiert werden können: SimplePie Core und SimplePie Plugin for WordPress.

Für das SimplePie Plugin muss nach der Aktivierung noch ein Ordner “cache” unter /wp-content/ angelegt (am besten über einen FTP-Client) und mit Schreibrechten (CHMOD 0777) versehen werden.

Das SimplePie Plugin ermöglicht es, RSS-Feeds auch auf Seiten oder innerhalb von Artikeln auszugeben, indem man PHP-Code mit den notwendigen Daten einbindet (dafür ist dann auch das Plugin Exec-PHP notwendig, welches das Verwenden und Ausführen von PHP-Code innerhalb von Artikeln und Seiten erlaubt*).

Ich habe beispielsweise einen Smartphone-Bestseller RSS-Feed von Amazon auf smartphonebox.de eingebaut – und das geht so:

Im Verzeichnis des SimplePie-Plugins gibt es einen Ordner “templates”. Dort kann man eigene Template-Dateien hinterlegen, die die Ausgabe des RSS-Feeds auf der WordPress-Seite festlegen. Für den Amazon-RSS-Feed habe ich folgendes Template angelegt und als “smartphonebox.tmpl” abgespeichert:

[sourcecode language=”html”]<div class="simplepie">
{IF_ERROR_BEGIN}<p>{ERROR_MESSAGE}</p>{IF_ERROR_END}
{ITEM_LOOP_BEGIN}
<p>{ITEM_DESCRIPTION}<hr style="clear:both;" /></p>
{ITEM_LOOP_END}
</div>[/sourcecode]

Dadurch wird ein Fehler ausgegeben, wenn bei der Verarbeitung des Feeds etwas nicht stimmt bzw. wird einfach der Inhalt des RSS-Feeds (item description) mit Absatz-Tags und einer Horizontalen Linie ausgegeben.

Die dazugehörige Seite, die ich in WordPress angelegt habe, hat diesen Inhalt:

[sourcecode language=”php”]<?php
echo SimplePieWP(‘http://www.amazon.de/rss/bestsellers/ce-de/569838/ref=pd_ts_rss_link’,
array( ‘items’ => 10,
‘strip_attributes’ => false,
‘strip_html_tags’ => false,
‘processing’ => strip_rangordnung,
‘enable_order_by_date’ => false,
‘template’ => smartphonebox,
));
?>[/sourcecode]

Ich habe noch einige Parameter angegeben, die die Ausgabe bzw. vor allem die Verarbeitung der RSS-Datei von Amazon beeinflussen: ‘strip_attributes’ und ‘strip_html_tags’ => false sorgen dafür, dass sämtliche Attribute, also Klassen-Bezeichnungen und HTML-Kennzeichnungen erhalten bleiben.

Mit ‘processing’ kann man den RSS-Feed nach dem Einlesen und vor der Ausgabe auf der Seite bearbeiten. In diesem Fall schneide ich einen Teil aus dem RSS-Feed von Amazon heraus. Das passiert über die PHP-Datei “strip_rangordnung.php”, die ich im Ordner “processing”, ebenfalls innerhalb des SimplePie-Plugin-Verzeichnisses, hinterlegt habe. Diese sieht so aus:

[sourcecode language=”php”]<?php
class SimplePie_PostProcess    {
function item_description($s)
{
return preg_replace(‘/<br /><br />(Die Rangordnung[^)]+)/’, ”, $s);
}
}
?>[/sourcecode]

In diesem Fall wird das RSS-item “description” nach der Zeichenfolge “<br /><br />(Die Rangordnung” (und so weiter) durchsucht und gelöscht. Bei den Amazon-Feeds steht nämlich hinter jedem item der Satz “(Die Rangordnung wird stündlich aktualisiert. In der […]-Liste finden Sie maßgebliche Informationen über die aktuelle Rangposition dieses Produkts.)”, was ich nicht x-mal wiederholt auf meiner Seite stehen haben möchte.

Danach gebe ich noch über ‘enable_order_by_date’ => false an, dass die Reihenfolge aus dem RSS-Feed einfach übernommen werden soll und keine Sortierung nach Datum erfolgt. Außerdem gebe ich mit dem Parameter “template” an, dass mein selbsterstelltes Template “smartphonebox” verwendet werden soll.

Man kann diese ganzen Parameter auch größtenteils unter den Plugin-Einstellungen von SimplePie for WordPress vornehmen. Bei meiner Vorgehensweise kann ich aber theoretisch mehrere unterschiedlich formatierte RSS-Feeds einbinden und muss mich nicht auf ein Format festlegen.

Nach dem Abspeichern der Seite (Titel nicht vergessen!) hat man es auch schon geschafft. SimplePie liest beim Aufruf der Seite automatisch den RSS-Feed von Amazon ein und gibt den Inhalt auf der Seite aus. Durch die Cache-Funktion passiert dies auch nur, wenn sich am RSS-Feed etwas geändert hat – diese Einstellung sollte man gerade bei umfangreichen RSS-Feeds mit vielen Inhalten und häufigen Änderungen nutzen.

Übrigens habe ich noch das Aussehen über die theme-CSS-Datei formatiert. Daher umgebe ich den item-Loop auch mit einem div-Container und der Klasse “simplepie”. Meine CSS-Formatierung für die Amazon-items sieht so aus – diese ist an mein Theme angepasst, kann also wahrscheinlich nicht 1:1 so übernommen werden:

[sourcecode language=”CSS”].simplepie .riRssTitle { font-size:110%; }
.simplepie p img { border:0px none;vertical-align:-3px; }
.simplepie p .riRssContributor { float:right;margin:8px 0px; }
.simplepie .url, .simplepie .url:hover { text-decoration:none;border-bottom:0px none; }
.simplepie .url img { margin-right:8px;margin-bottom:8px; }[/sourcecode]

*) In den WordPress-Einstellungen unter “Schreiben” sollte unbedingt “WordPress soll falsch verschachteltes XHTML automatisch korrigieren” ausgeschaltet sein, damit Exec-PHP einwandfrei funktioniert. Außerdem muss der Artikel oder die Seite im HTML-Modus bearbeitet und gespeichert werden und nicht im WYSIWYG-Editor.

26 Antworten auf „RSS-Feeds einbinden“

  1. Hallo, ich möchte eigentlich lieber das “hauseigene” Widget RSS benutzen. Aber mein Problem: Wenn ein Nutzer hier auf einen RSS-Eintrag klickt, wird dieser nicht auf einem zusätzlichen Fenster gezeigt, sondern meine Seite ist weg. Wie kann ich eine Funktion target=blank für das RSS-Widget erzeugen?

  2. Die Variante mit Simplepie gefällt mir gut. Die vorgefertigten Widgets sind zwar einfach und komfortabel zu nutzen, nur stösst man halt rasch an die Grenzen, sobald man etwas mehr will.

  3. Hallo,

    ich habe da ein kleines Problem. Bei mir wird immer das <?php oder aus den importierten (mit WP-o-Matic) Artikeln gelöscht.

    In den WordPress-Einstellungen unter “Schreiben” sollte unbedingt “WordPress soll falsch verschachteltes XHTML automatisch korrigieren” ausgeschaltet sein, damit Exec-PHP einwandfrei funktioniert.

    ist deaktiviert.

    Ich habe schon Exec-PHP, inline-php, PHP Execution probiert. Es ist aber immer das selbe. Beim import wird das <?php oder gelöscht und es bleibt der Quellcode als Tect stehen.

    Hast du eine Idee woran das liegen könnte?

  4. hi
    hab ein problem
    ich hab twitter poster und wp o matic installiert, aber irgendwie klappt das ganz nich so ganz. ich wollte externe rss feeds über wp zu twitter senden. hab dabei zwei probleme.
    1. ich hab twitter über widget in wp eingebettet….wp hat aber nur die funktion in kategorien einfügen
    2. wenn ich die externen rss feeds über eingestellten kategorien laufen lasse, sollten die posts zu twitter weitergeleitet werden….hmmmm naja
    bitte um rat pls

  5. Hallo, habe im Feed einen englischen Zeitstempel: Thu, 16 Dec 2010 15:38:48 +0100. SimplePie gibt mir partout kein deutsches Format aus obwohl “Locale for the website: de_DE ” hinterlegt worden ist. Auch das manuelle setzen von setlocale() in der simplepie_wordpress_2.php brachte keinen erfolg.
    Jemand eine Lösung?

  6. Hallo, mit Hilfe von “Feedstitch” habe ich diverse RSS Feeds zu insgesamt drei themenbezogenen Feeds zusammengefasst., Das Ergebnis sind also wieder drei Feeds. Nun möchte ich in WordPress (3.04) diese drei Feeds auf drei unterschiedlichen statischen Seiten ausgeben. Bislang habe ich nur das Plugin “Newspage” gefunden, aber da kann ich die drei Feeds nur untereinander auf einer Seite ausgeben. Hat jemand von Euch eine Lösung für mich? DANKE!

  7. Das ist mal ein gelungenes Tutorial! Ja, Amazon hat das Wording geändert -> ‘strip_attributes’ -> nun “(In der” statt “Die Rangordnung” – das aber nur am Rande 🙂
    Kurze Frage, wie kann man nofollow als Attribut hinzufügen -> im Beispiel mit der Smartphone-Besteller Liste ist es auch drinnen – wäre ganz praktisch, um Amazon bei einer 10er Liste nicht ganze Power mitzugeben –
    Danke und Grüße
    Heiko

  8. Hi. ich habe die Ausgabe richtig hinbekommen, zumindest anhand dieses Beispieles und und habe die FEEd url angepasst und etwas am Design.

    Allerdings bekomme ich keinen Titel ausgegeben und auch keinen “Read more” Link. Hat da jemand noch eine Idee wie man das umsetzen kann ?

    LG

  9. Hallo,
    ich bin gerade dabei ein kleines WordPress – Verzeichnis aufzubauen. Ich möchte in dem WordPress Blog Katalog zu jedem Artikel (Vorstellung des Blogs) einen RSS-Feed mit den letzten 3 Nachrichten des entsprechend verlinkten Blogs einbinden. Nutze ich dafür ein Plugin oder kann das WP von Haus schon? Weiterhin interessiert mich, ob man nach benutzerdefinierten Feldern filtern kann. Ich habe zum Beispiel ein Feld mit Thema (feld_thema) angelegt. Wie kann ich jetzt eine Ausgabe mit den Thema im Template erstellen?
    feld_thema
    ich hoffe Ihr versteht mich….
    lg

  10. Der Beitrag ist zwar nicht mehr ganz frisch, aber suche bislang vergebens nach einer Lösung:

    Bei der Einbindung eines Amazon Feeds wie oben beschrieben via SimplePie wird der Parameter “?tag=” aus der Übersicht entfernt. Auch im Beispiel auf smartphonebox de werden zwar Links ausgegeben, aber auch wieder ohne den entscheidenden Tag.

    Evtl. hat jemand eine Lösung wie man mittels preg match o. ä. einen Tag zu allen URLs aus dem Feed hinzufügen kann, bzw. dass der Feed in WordPress mit dem Tag ausgegeben wird…

    Mal schauen, ob s noch einer verfolgt 🙂
    MfG

  11. Hallo Heiko,

    meine simple-pie Templage-Datei (.tmpl) sieht mittlerweile so aus:

    <div class="simplepie">
    {IF_ERROR_BEGIN}<p class="error">{ERROR_MESSAGE}</p>{IF_ERROR_END}
    {ITEM_LOOP_BEGIN}
    <p><a href="{ITEM_PERMALINK}?tag=amazon-tag-21" rel="nofollow">{ITEM_TITLE}</a></p>
    <hr style="clear:both;" /></p>
    {ITEM_LOOP_END}
    </div>

    Meinst du, das klappt so?

    Grüße,
    Thomas

    1. Hallo Thomas,

      das nenne ich mal Wow! Danke für die prompte Antwort!
      Allerdings werden so nur die Title ohne Link ausgegeben.

      Hier meine aktuelle .tmpl

      {IF_ERROR_BEGIN}{ERROR_MESSAGE}{IF_ERROR_END}
      {ITEM_LOOP_BEGIN}
      {ITEM_DESCRIPTION}
      {ITEM_LOOP_END}

      Habe eine Art Chart Liste, die gelungen ausgegeben wird mit Bild, Titel und Artist, allerdings leicht truncated, sodass der Partnernet Tag fehlt… bin kein Pro, aber meine, dass es irgendwie via preg match + Tag zur jeder URL hinzufügen funktionieren sollte.

      Na ja, kein Problem, bin schon begeistert, dass in Echtzeit ne Antwort kam 🙂

      Danke und Grüße
      Heiko

      1. Ja, ich hatte, wie hier mal im Beitrag festgehalten, {ITEM_DESCRIPTON} ersetzt und verwende nur noch Link und Titel. Habs nicht hinbekommen, ITEM_DESCRIPTION sauber zu formatieren. Amazon das HTML davon zu sehr vermurkst. 🙂

      2. Ok, sorry Dauer-Post – nur für evtl. nachfolgende Leser – so wird zwar der Tag korrekt ausgegeben, allerdings ohne Fancy Cover, welches sich in {ITEM_DESCRIPTION} befindet.
        Na ja, ich bleib dran
        VG
        Heiko

        1. Was du noch probieren kannst: Du hängst den Parameter “tag” schon an die RSS-URL an, die du einliest (im Code auf der Seite hinter echo SimplePieWP(‘… ). Dort einfach am Ende mit ?tag=xxx-21 fortfahren. Dann hängt der Parameter “tag” an allen Links innerhalb von ITEM_DESCRIPTION.

      3. Schon getan, das ist ja das seltsame, dass beim direkten url aufruf die id auf alle links angewendet wird, aber simplepie den ? Tag in wp stripped…

  12. ups, die Antwort wurde auch truncated … hier mit Leerzeichen

    {IF_ERROR_ BEGIN}{ERROR_MESSAGE}{IF_ERROR_END}
    {ITEM_LOOP_BE GIN}
    {ITEM_DES CRIPTION}
    {ITEM_LO OP_END}

Schreibe einen Kommentar zu Thomas Langel Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert