<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.feed.consuming-rss">
    <title>Einen RSS Feed konsumieren</title>

    <para>
        Einen <acronym>RSS</acronym> Feed zu lesen, ist so einfach wie das Instanziieren eines
        <classname>Zend_Feed_Rss</classname> Objekts mit der <acronym>URL</acronym> eines Feeds:
    </para>

    <programlisting language="php"><![CDATA[
$channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
]]></programlisting>

    <para>
        Wenn beim Abrufen des Feeds Fehler auftreten, wird eine
        <classname>Zend_Feed_Exception</classname> geworfen.
    </para>

    <para>
        Sobald du ein Feed Objekt hast, kannst du auf jeden Channel-Eigenschaften eines Standard
        <acronym>RSS</acronym> Feeds direkt über das Objekt zugreifen:
    </para>

    <programlisting language="php"><![CDATA[
echo $channel->title();
]]></programlisting>

    <para>
        Beachte die Syntax der Funktion. <classname>Zend_Feed</classname> verwendet die Konvention,
        die Eigenschaften als <acronym>XML</acronym> Objekt zu behandeln, wenn sie durch die
        "Getter" Syntax für Variablen (<command>$obj->property</command>) angefordert werden, und
        als String zu behandeln, wenn sie durch die Methodensyntax
        (<command>$obj->property()</command>) angefordert werden. Dies ermöglicht den Zugriff auf
        den kompletten Text jedes individuellen Knotens, während weiterhin der komplette Zugriff
        auf alle Kindelemente erlaubt ist.
    </para>

    <para>
        Wenn Channel-Eigenschaften Attribute beinhalten, sind diese durch die <acronym>PHP</acronym>
        Array Syntax ansprechbar:
    </para>

    <programlisting language="php"><![CDATA[
echo $channel->category['domain'];
]]></programlisting>

    <para>
        Da <acronym>XML</acronym> Attribute keine Kindelemente haben können, ist die Methodensyntax
        für den Zugriff auf Attributwerte nicht notwendig.
    </para>

    <para>
        Meistens möchtest Du einen Feed durchlaufen und etwas mit seinen Einträgen machen.
        <classname>Zend_Feed_Abstract</classname> implementiert das <classname>Iterator</classname>
        Interface von <acronym>PHP</acronym>, so dass die Ausgabe aller Artikelüberschriften eines
        Channels nur dies erfordert:
    </para>

    <programlisting language="php"><![CDATA[
foreach ($channel as $item) {
    echo $item->title() . "\n";
}
]]></programlisting>

    <para>
        Wenn du mit <acronym>RSS</acronym> nicht vertraut bist, kommt hier eine Übersicht über die
        Standardelemente, die du in einem <acronym>RSS</acronym> Channel und in einzelnen
        <acronym>RSS</acronym> Elementen (Einträgen) als verfügbar erwarten kannst.
    </para>

    <para>
        Erforderliche Elemente eines Channels:
    </para>

    <itemizedlist>
        <listitem>
            <para><property>title</property> - Der Name des Channels</para>
        </listitem>

        <listitem>
            <para>
                <property>link</property> - Die <acronym>URL</acronym> einer Website, die dem
                Channel entspricht
            </para>
        </listitem>

        <listitem>
            <para>
                <property>description</property> - Ein oder mehr Sätze, die den Channel
                beschreiben
            </para>
        </listitem>
    </itemizedlist>

    <para>
        Allgemeine optionale Elemente eines Channels:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <property>pubDate</property> - Das Erscheinungsdatum dieses Informationssatzes,
                im <acronym>RFC</acronym> 822 Datumsformat
            </para>
        </listitem>

        <listitem>
            <para>
                <property>language</property> - Die Sprache, in der dieser Channel verfasst ist
            </para>
        </listitem>

        <listitem>
            <para>
                <property>category</property> - Eine oder mehrere Kategorien (durch mehrfache
                Tags spezifiziert), zu denen der Channel gehört
            </para>
        </listitem>
    </itemizedlist>

    <para>
        <acronym>RSS</acronym> <emphasis>&lt;item&gt;</emphasis> Elemente haben keine strikt
        erforderlichen Elemente. Dennoch müssen entweder <property>title</property> oder
        <property>description</property> vorhanden sein.
    </para>

    <para>
        Allgemeine Elements eines Eintrags:
    </para>

    <itemizedlist>
        <listitem>
            <para><property>title</property> - Die Überschrift des Eintrags</para>
        </listitem>

        <listitem>
            <para><property>link</property> - Die <acronym>URL</acronym> des Eintrags</para>
        </listitem>

        <listitem>
            <para><property>description</property> - Eine Zusammenfassung des Eintrags</para>
        </listitem>

        <listitem>
            <para><property>author</property> - Die E-Mail Adresse des Autoren</para>
        </listitem>

        <listitem>
            <para>
                <property>category</property> - Eine oder mehrere Kategorien, zu denen der
                Eintrag gehört
            </para>
        </listitem>

        <listitem>
            <para>
                <property>comments</property> - <acronym>URL</acronym> der Kommentare zu diesem
                Eintrag
            </para>
        </listitem>

        <listitem>
            <para>
                <property>pubDate</property> - Das Datum, an dem der Eintrag veröffentlicht
                wurde, im <acronym>RFC</acronym> 822 Datumsformat
            </para>
        </listitem>
    </itemizedlist>

    <para>
        In deinem Code kannst du hiermit immer überprüfen, ob ein Element nicht leer ist:
    </para>

    <programlisting language="php"><![CDATA[
if ($item->propname()) {
    // ... fahre fort.
}
]]></programlisting>

    <para>
        Wenn du stattdessen <command>$item->propname</command> verwendest, wirst du immer ein leeres
        Objekt erhalten, das mit <constant>TRUE</constant> evaluiert, so dass deine Prüfung
        fehlschlagen würde.
    </para>

    <para>
        Für weitere Informationen ist die offizielle <acronym>RSS</acronym> 2.0 Specification hier
        verfügbar: <ulink
            url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>
    </para>
</sect1>
