RSS-Item mit bestimmtem Inhalt finden und kopieren

Methode: copy_branch()

Das folgende Beispiel soll zeigen, wie es möglich ist, RSS-Feeds nach bestimmten Keywords zu filtern.

Unser Beispielfeed sieht so aus:


<rss version="0.91">
  -  <channel>
  -     -  <title>Peter Bieling - internet &amp; multimedia</title>
  -     -  <link>http://www.media-palette.de/</link>
  -     -  <description>p-bieling internet &amp; multimedia - Voller Service f</description>
  -     -  <image>
  -     -     -  <title>Ihr Wegweiser zu allen Neuigkeiten auf www.media-palette.de!</title>
  -     -     -  <url>http://www.media-palette.de/newspublic/kompass.jpg</url>
  -     -     -  <link>http://www.media-palette.de/</link>
  -     -     -  <width>82</width>
  -     -     -  <height>71</height>
  -     -  </image>
  -     -  <webMaster>info@media-palette.de</webMaster>
  -     -  <language>de-de</language>
  -     -  <item>
  -     -     -  <title>Titel 1</title>
  -     -     -  <link>http://www.testdomain.de/meldung1.html</link>
  -     -     -  <description>Hier die Description zu Meldung 1. Suchwort: Hund</description>
  -     -  </item>
  -     -  <item>
  -     -     -  <title>Titel 2</title>
  -     -     -  <link>http://www.testdomain.de/meldung2.html</link>
  -     -     -  <description>Hier die Description zu Meldung 2. Suchwort: Katze</description>
  -     -  </item>
  -     -  <item>
  -     -     -  <title>Titel 3</title>
  -     -     -  <link>http://www.testdomain.de/meldung3.html</link>
  -     -     -  <description>Hier die Description zu Meldung 3. Suchwort: Esel</description>
  -     -  </item>
  -     -  <item>
  -     -     -  <title>Titel 4</title>
  -     -     -  <link>http://www.testdomain.de/meldung4.html</link>
  -     -     -  <description>Hier die Description zu Meldung 4. Suchwort: Fisch</description>
  -     -  </item>
  -  </channel>
</rss>

Zunächst suchen wir ein RSS-Item, dessen description das Wort Fisch enthält.


<?php
require_once("xml-line.php");
$mylines = new xml_line("xml-files/rss2.xml");
$mylines->get_data(0,"rss/channel/item/description","Fisch");
$result=$mylines->xml_stream();
echo "<pre>";
echo htmlentities(print_r($result, true));
echo "</pre>";
?>

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => Hier die Description zu Meldung 4.
		Suchwort: Fisch
                    [1] => description
                    [2] => Array
                        (
                        )

                    [3] => rss/channel/item/description
                    [4] => 1-1-4-1
                )

        )

)

Der Einfachheit halber gehen wir mal davon aus, dass es nur ein Ergebnis gibt. Den Zählpfad zum gefundenen description-Element finden wir in $result[0][0][4].

Daraus ergibt sich folgender Code-Block:


<?php
if (isset($result[0][0][4])) {
    require_once("xml-line.php");
    $mylines = new xml_line("xml-files/rss2.xml");
    //Den Zählpfad aufsplitten:
    $tmp_array=explode('-',$result[0][0][4]);
    $nr=$tmp_array[2]; //Zähler für den item-Block auslesen
    $mylines->copy_branch(0,"rss/channel/item", "","","1-1-$nr");
    $result2=$mylines->xml_stream();
    $found_item = $result2[0][0][0];
    echo "<pre>";
    echo htmlentities($found_item);
    echo "</pre>";
}
?>

<item>
	    <title>Titel 4</title>
	    <link>http://www.testdomain.de/meldung4.html</link>
	    <description>Hier die Description zu Meldung 4.
		Suchwort: Fisch</description>
	    </item>

Das gesuchte item-Element befindet sich jetzt in $found_item. Man könnte es jetzt in einen anderen RSS-Feed einsetzen. Normalerweise wäre solch eine Abfrage natürlich komplexer. Man möchte ja nicht nur die description sondern auch den title durchsuchen. Außerdem muss eine Schleife eingebaut werden, für den Fall, dass der Begriff häufiger gefunden wird. Dennoch sollte das Prinzip klar geworden sein.