RSS-Feeds mit PHP auslesen und in Seiten einbinden

Einblendung meiner RSS-Feeds auf meinem Portfolio.

In diesem Artikel möchte ich Ihnen zeigen, wie Sie RSS-Feeds anderer Blogs bei sich auf der Seite anzeigen können. Gleich vorweg: Man sollte fremde RSS-Feeds nicht unerlaubt in die eigene Seite integrieren! Die Idee für diesen Artikel kam mir als ich an meinem Portfolio gearbeitet habe. Ich wollte da unbedingt die letzten Artikel automatisch auflisten lassen.

Ich wünsche Ihnen viel Spaß beim Artikel!

Für dieses Feature benötigen wir lediglich zwei ganz kurze Funktionen. Die eine liest die RSS-Feeds ein und schreibt diese in eine Text-Datei. Die zweite Funktion liest lediglich die Text-Datei aus.

Sie fragen sich vielleicht wieso ich die Ergebnisse in einer Text-Datei zwischenspeichern möchte. Das lässt sich sehr einfach erklären. Diese Datei soll lediglich ein Mal am Tag neu beschrieben werden. Das entlastet den fremden Server und erhöht die Ladezeit der eigenen Seite um einiges.

Kommen wir nun zur eigentlichen Implementierung.

Als erstes sollten wir die RSS-Feed Adresse und den Pfad zur Datei angeben.

3
4
$feed_path = "http://www.starstormdesign.de/feed/";
$cache_file_path = "rss_feeds.txt";

Jetzt schreiben wir die erste Funktion „setRSSFeeds()“, die die RSS-Feeds auslesen und in die Datei speichern soll. Gleich zu Beginn wird die Seite mit „file_get_contents()“ eingelesen und in der Variable „$content“ gespeichert. Anschließend wird ein neues SimpleXmlElement-Objekt erstellt und der Content übergeben.

8
9
$content = file_get_contents($feed);
$xml = new SimpleXmlElement($content);

Da sie Ausgabe in einer Liste erfolgen soll, definieren wir eine neue Variable „$result“. Diese wird die Liste beinhalten. Beginnen wir also mit dem öffnenden OL-Tag:

11
$result = "<ol >";

Nun müssen die Überschriften und die dazugehörigen Lins ebenfalls zwischengespeichert werden. Dazu nutzen wir eine simple foreach-Schleife:

13
14
15
foreach($xml->channel->item as $entry) {
  $result .= '<li><h3><a href="'.$entry->link.'" title="'.$entry->title.'">'.$entry->title.'</a></h3></li>';
}

Zu Ende wird die Variable „$result“ mit dem schließenden OL-Tag versehen.

17
$result .= "</ol>\n";

Jetzt müssen wir den Inhalt der Variable nur in die Text-Datei schreiben. Das ist mit der PHP-Funktion „file_put_contents()“ ein Kinderspiel:

19
file_put_contents($path, $result);

Jetzt haben wir die erste Funktion unseres Scripts schon fertig.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function setRSSFeeds($feed, $path)
{
  $content = file_get_contents($feed);
  $xml = new SimpleXmlElement($content);
 
  $result = "<ol >";
 
  foreach($xml->channel->item as $entry) {
    $result .= '<li><h3><a href="'.$entry->link.'" title="'.$entry->title.'">'.$entry->title.'</a></h3></li>';
  }
 
  $result .= "</ol>\n";
 
  file_put_contents($path, $result);
}

Kommen wir doch gleich zur zweiten. Die Funktion „getRSSFeeds()“ überprüft wann die Text-Datei zuletzt bearbeitet wurde.

Wenn die Datei älter als 24 Stunden nicht bearbeitet wurde, so wird unsere erste Funktion „setRSSFeeds()“ aufgerufen und erst dann die Datei ausgelesen und ausgegeben.

24
25
26
27
28
if (time() >= (filectime($path)+24*60*60))
{
  setRSSFeeds($feed, $path);
  print file_get_contents($path);
}

Ist das nicht der Fall, so wird gleich der Inhalt der Datei ausgegeben. Sie werden gleich den Unterschied der Ladezeit feststellen, sobald Sie die Seite zum zweiten Mal neu laden. Und der Blogbetreiber wird sich nicht über die unnötige Serverauslastung beschweren.

29
30
31
32
else
{
  print file_get_contents($path);
}

Die ganze Funktion sieht dann folgendermaßen aus:

22
23
24
25
26
27
28
29
30
31
32
33
function getRSSFeeds($feed, $path)
{
  if (time() >= (filectime($path)+24*60*60))
  {
    setRSSFeeds($feed, $path);
    print file_get_contents($path);
  }
  else
  {
    print file_get_contents($path);
  }
}

Um die RSS-Feeds nun auf der Seite einblenden zu lassen, müssen Sie lediglich die Funktion „getRSSFeeds()“ aufrufen und die URL und den Pfad übergeben.

getRSSFeeds($feed_path, $cache_file_path);

Ich hoffe der Artikel hat Ihnen gefallen! Über Kommentare und Social Bookmarks würde ich mich sehr freuen.

ALL-INKL.COM

24 Kommentars zu dem Artikel “RSS-Feeds mit PHP auslesen und in Seiten einbinden”

  1. Avatar von Daniel
    Daniel

    Hi,
    vielleicht sollte man dazu sagen, dass „file_get_contents“ nur bei aktiviertem allow_url_fopen funktioniert. Aus diesem Grund soll man vor dem Download prüfen, ob allow_url_fopen aktiviert ist. Wenn nicht muss man cURL oder Sockets verwenden.

    Gruß
    Daniel

    • Avatar von StarSt0rm
      StarSt0rm

      Vielen Dank Daniel.
      Ich wollte zwar nur zeigen wie sowas geht, aber ich muss dir im Nachhinein absolut zustimmen. Habe nicht daran gedacht. Solch ein Hinweis könnte durchaus sinnvoll sein. Werde in Zukunft darauf aufmerksam machen. Danke!
      LG, Alex

  2. Avatar von Andy
    Andy

    Gefällt mir gut die Möglichkeit nur ob ich mir das Zutraue ohne Hilfe

    • Avatar von StarSt0rm
      StarSt0rm

      Das ist wirklich nicht so schwer. Du könntest es ja versuchen und wenn was nicht so richtig klappt eine konkrete Frage stellen. Ich helfe dann gerne weiter. 😉

  3. Avatar von Marc
    Marc

    Interessant. Ich nutze für soetwas meist MagpieRSS, werde mir Deine Lösung aber mal zu Gemüte führen, sieht gut aus.

  4. Avatar von Florian
    Florian

    Hallo Alex,

    vielen Dank für die ausführliche Beschreibung. Werde das ganz gleich mal ausprobieren.

    Beste Grüße

    Flo

  5. Avatar von Philip Hoffmeister
    Philip Hoffmeister

    Hallo,
    Das ist genau das was ich gesucht habe danke. Hast du vilt. ein Tipp wo ich einen kostenlosen Webspace mit allow_url_fopen bekomme?

    mfg. Philip Hoffmeister

    • Avatar von StarSt0rm
      StarSt0rm

      Freut mich, dass es dir geholfen hat. Leider kenne ich nicht wirklich viele FreeHoster: Funpic/Ohost und Jimdo. Auf Funpic und Ohost wird es wohl deaktiviert sein.

  6. Avatar von Robert Tusch
    Robert Tusch

    Hey,
    Bei mir ist dieses allow url fopen nicht aktiviert! Was kann ich jetzt machen oder kann man das aktivieren. Ich Entschuldige mich, wenn die Frage bei Dir lächerlich ankommt, aber ich habe davon so gut wie keine Ahnung

    Lg
    Robert

    • Avatar von StarSt0rm
      StarSt0rm

      Hallo Robert,
      das ist leider bei recht vielen Hostern deaktiviert. Alternativ könntest du die Funktion curl() verwenden. Diese hat aber eine andere Syntax und ist viel mächtiger. (Aus diesem Grund ist die Wahrscheinlichkeit groß, dass auch diese deaktiviert ist.) Ob man die Funktion aktivieren kann oder nicht, musst du bei deinem Hoster nachfragen.
      Gruß
      Alex

  7. Avatar von Robert Tusch
    Robert Tusch

    Hallo Alex,
    Vielen dank für deine schnelle Antwort. Ich werde es mal versuchen und dann wohl wahrscheinlich den Hoster wechseln. Ich hoffe es geht und danke dir einmal, dass du dir die Mühe gemacht hast, das Tutorial zu erstellen.
    Gruß
    Robert

  8. Avatar von Robert Tusch
    Robert Tusch

    Hey,
    Ich melde mich hier nocheinmal, weil ich mit curl() nicht zurechtkomme. Was soll ich jetzt genau ändern? Ich habe einen Hoster, der curl abnimmt.
    Tut mir leid, aber selbst mit der Seite komme ich nicht zurecht.
    Robert

    Ps du kannst mir auch eine Mail schreiben 🙂

    • Avatar von StarSt0rm
      StarSt0rm

      Also der Schnellste Weg wäre es, wenn du die Zeile 8 durch folgendes ersetzt:

      8
      9
      10
      11
      12
      13
      
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
      $content = curl_exec($ch);
      curl_close($ch);
  9. Avatar von Volker Rothert
    Volker Rothert

    Hallo,

    bei mir wird nichts angezeigt, code wurde mehrfach von mir geprüft aber finde keinen Fehler. Gebe ich selbst etwas in der Datei ein dan wird das auch angezeigt also ruft der code die info nicht ab oder speichert diese nicht?

    Gruß

    • Avatar von Volker Rothert
      Volker Rothert

      Fehler gefunden die 24 Std war Schuld, hätte also am nächsten Tag geklappt. Leider zeigt er alle Links an und dafür keine Kurzinfo, hoffe mal das kann man abändern.

      Gruß

      • Avatar von Alexander Bogomolov
        Alexander Bogomolov

        Freut mich, dass es doch geklappt hat.
        Doch was genau meinst du mit der „Kurzinfo“?

        • Avatar von Volker Rothert
          Volker Rothert

          Kurzinfo, es wird zur Zeit nur der Link angezeigt, es sollte aber der Link
          und eine kleine Info engezeigt werden Beispiel
          Titel
          Das Wetter spielt verrückt = Link und Titel
          Ein Hurrikan ist in der nähe von Europa aufgetaucht…..= Text kurz

          Gruß

          • Avatar von Alexander Bogomolov
            Alexander Bogomolov

            Nun ja, das ist dir überlassen wie du die Ausgabe formatierst. Du musst dazu nur mir dem Inhalt von

            $entry

            auskommen.

  10. Avatar von Flummi
    Flummi

    Guten Morgen,

    ich scheine gerade ein PHP-Kenntnis abriss zu haben.

    Ich habe das Script 1:1 auf dem Server in die rss.php gesetzt.

    Wieso zeigt er mir nichts an sondern Firefox will die ganze Zeit

    das ich Aboniere. Ich will nicht Abonieren sondern Das Ergebnis angezeigt bekommen.

    Fehlt da am Ende zu den function’s noch ein echo befehl.

    Oder verliere ich gerade mein Programmier Wissen. Das Fuchst mich absolut.

    Liebe grüße

    • Avatar von Flummi
      Flummi
      • Avatar von Flummi
        Flummi

        Sorry bin so baff, dass ich Infos unterschlage.

        Änderung am Script:

        $feed_path = „http://flummi1988.ohost.de/“;
        $file_path = „rss.xml“;

    • Avatar von Alexander Bogomolov
      Alexander Bogomolov

      Ich denke, dass es ein Verständnisproblem war:
      $feed_path beinhaltet den gesammten Pfad zum Feed: http://flummi1988.ohost.de/rss.xml
      $file_path gibt die Datei an, in der das Ergebnis (also die HTML Liste) gecachet wird.

      P.S.: Ersetze die Funktion getlastmod() durch filectime(), falls so verwendet.

      • Avatar von Flummi
        Flummi

        Vielen Dank,
        hätte man ja doch selber entdecken können, naja.
        Manchmal hat auch ein Webby mal einen schlechten Tag.

        So jetzt aber eine Nebenfrage die eigentlich verboten ist.
        Wie gewöhne ich dem blöden FF 17.0 ab, dieses Script als
        RSS Abo-Aufforderung zu sehen ?

        Wäre lieb wenn dies jemand wüsste.

        Mit I…E..,OP… und Ch… funktioniert es.
        Liebe grüße: Flummi

        • Avatar von Alexander Bogomolov
          Alexander Bogomolov

          Naja, wenn du deinen Feed als eine Liste ausgibst, dann sollte der Browser diese auch als Liste anzeigen. Wenn du aber direkt die feed.xml aufrufst, dann wird der Browser das immer für ein Abo vorschlagen.
          (Ich verstehe das Problem nicht so richtig.)