Blog zu den Themen Webentwicklung, technisches Online Marketing und Suchmaschinenoptimierung

WordPress Feed mit PHP auslesen

Gestern habe ich den letzten Feinschliff an meinem neuen Portfolio torbenleuschner.de vorgenommen. Im Bereich Weblog wollte ich einen Bereich integrieren, in dem der Besucher zum einen meine letzten Tweets und Erwähnungen angezeigt bekommt, zum anderen wollte ich aber auch auf meine neusten Blogeinträge hinweisen. Da ich aus Sicherheitsgründen von meinem Portfolio aus nicht extra eine SQL-Verbindung zur WordPress-Datenbank aufbauen wollte, entschied ich mich dafür, denn normalen Feed des Blogs auszulesen.

Gesagt getan, oder etwa doch nicht? Natürlich suchte ich erst einmal im Netz nach passenden Lösungsansätzen, wurde aber nicht wirklich fündig. Zwar gab es etliche Ansätze, welche aber zum einen grausam formatiert oder nicht für WordPress-Feeds, sondern normale XML-Dateien geeignet waren. Im Zuge dessen entschied ich mich dafür, selber eine Lösung zu entwickeln. Gesagt getan…

Dieser Quellcode ist natürlich nicht die vollständige Formatierung, so wie ihr sie bei mir im Portfolio findet. Es wird lediglich der Feed durchgegangen und in einem geordneten Array gespeichert, um später ganz simpel per foreach() darauf zugreifen zu können.

Der Quellcode im Detail

Zeile 2: Wir erstellen aus dem XML-File ein SimpleXML-Element. Die Funktion simplexml_load_file() wurde mit PHP5 eingeführt und bietet ein mächtiges Werkzeug um auf einfachste Weise XML-Dateien zu verarbeiten. Ohne diese Funktion müssten wir hier mit etlichen regulären Ausdrücken arbeiten, um den XML-String zu verarbeiten.

Zeile 5: Die erste foreach()-Schleife durchläuft das SimpleXML-Element und speichert die Ergebnisse in der Variablen $value

Zeile 7: Sofort startet die nächste foreach()-Schleife welche diesmal die Variable $value durchläuft. Bei $value handelt es sich natürlich wiederrum um ein Array, weshalb der Indez in $key und der Wert in $value2 gespeichert wird. Die zwei foreach-Schleifen müssen sein, da die Struktur des WordPress-Feeds mehrfach geschachtelt ist, wie ihr im angehängten Screenshot seht.

Zeile 9: Wir überprüfen ob der Array-Index von $value „item“ ist. In diesem XML-Zweig befinden sich nämlich die einzelnen WordPress-Artikel: [item]Artikel 1[/item] [item]Artikel2[/item]

Zeile 11: Natürlich steht zwischen einem [item]-Zweig nicht nur ein String, wie gerade demonstriert, sondern wiederrum ein weiteres Array-XML-Objekt. Dieses Lesen wir mit dieser dritten foreach()-Schleife nun auch noch aus.

Zeile 12: Nun speichern wird das Ergebnis in unserem in Zeile 4 angelegten Array. Dabei handelt es sich um einen zweidimensionalen Array. Für jedes Blogartikel wird im ersten Array-Index eine laufende Nr. (beginnend bei 0) vergeben. Diese wird übrigens durch die Variable $count gehändelt. Im zweiten Index steht die Eigenschaft der jeweiligen Zeile. Dies ist bei einem WordPress Feed z.B. „title“ für die Artikelüberschrift, „description“ für den Textauszug, „pubDate“ für das Veröffentlichungsdatum oder „link“ für die URL zum Artikel.

Wenn ihr das ganze testen möchtet, könnt ihr ganz unten einfach ein print_r($result); anhängen. Um zum Beispiel einen die Überschrift eures letzten Blogeintrags verlinkt auszugeben, verwendet ihr folgenden Code: <a href=“‚.$result[0][‚link‘].'“>‘.$result[0][‚title‘].'</a>

Dieser Artikel wurde am 17.12.2010 veröffentlicht

Wer schreibt hier?

Torben Leuschner - Webentwickler

Hi, ich bin Torben und baue leidenschaftlich gerne Webseiten. Also habe ich mein Hobby zum Beruf gemacht und bin seit 2008 als Webentwickler Selbständig tätig. Obwohl ich schwerpunktmäßig für Kunden arbeite habe ich auch sehr viel Freude an der Realisierung eigener Projekte. Daraus resultierend hat sich eine große Affinität zu den Themen Online Marketing und Suchmaschinenoptimierung entwickelt. Gelegentlich schreibe ich auf Twitter, viel aktiver bin ich allerdings auf Facebook. Gerne können wir uns dort vernetzen!

Wie stehst du dazu?

  1. Hast du da irgendwelche Informationen zur Geschwindigkeit? Drei verschachtelte foreach-Schleifen sehen ja alles andere als performant aus.

    • Da das Dokument ja erst einmal mit der PHP nativen Funktion simplexml_load_file() strukturiert wird, müsste an der Stelle die Geschwindigkeit passen.

      Die meisten Feeds sind ja so eingestellt, dass nur die letzten 10 Artikel angezeigt werden. Von daher halte ich auch die Datenmenge für überschaubar.

      Wenn du wirklich sehr performant arbeiten willst, führe nur alle 30 Minuten diese Funktion aus. Die Ausgabe speicherst du in einer Textdatei und lädst diese dann ein. Cache halt ;-)

  2. Hmmh, lade in ähnlicher Form einen WordPress-Feed. Mir entgleiten dabei solche Tags: 15

    Sicher wegen der Doppelpunkte. Nach deinem System leider auch … dazu ne Idee?

  3. Hallo,

    also ich bekomme außer “ ’.[‚title‘].’ ’.[‚title‘].’ ’.[‚title‘].’ ’.[‚title‘].’ “ leider noch nichteinmal etwas ausgegeben – woran könnte das liegen? Script wurde außer Feeddatei nicht geändert.

Schreibe einen Kommentar

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