<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.feed.consuming-rss">
    <title>Consommer un flux RSS</title>

    <para>
        Lire un flux <acronym>RSS</acronym> se résume à instancier un objet <classname>Zend_Feed_Rss</classname>
        en passant l'URL du flux&#160;:
    </para>

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

    <para>
        Si une erreur a lieu lors de l'obtention du flux, une
        <classname>Zend_Feed_Exception</classname> sera déclenchée.
    </para>

    <para>
        Une fois que vous disposez d'un objet "flux <acronym>RSS</acronym>", vous pouvez accéder aux propriétés
        <acronym>RSS</acronym> standard du canal, et ce directement à partir de l'objet&#160;:
    </para>

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

    <para>
        Notez la syntaxe utilisée&#160;: un appel de fonction.
        <classname>Zend_Feed</classname> utilise une convention selon laquelle les propriétés sont
        traitées comme des objets <acronym>XML</acronym> si elles sont demandées au moyen de la syntaxe
        <code>$obj-&gt;propriété</code> et comme des chaînes si elles sont demandées au moyen de la
        syntaxe <code>$obj-&gt;propriété()</code>. Ceci permet d'accéder à la totalité du contenu
        textuel d'un nœud particulier tout comme à l'ensemble des enfants de ce nœud.
    </para>

    <para>
        Si les propriétés du canal possèdent des attributs, ils sont accessibles à l'aide de
        l'indexage <acronym>PHP</acronym>&#160;:
    </para>

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

    <para>
        Comme les attributs <acronym>XML</acronym> ne peuvent avoir des enfants, la syntaxe
        <code>$obj-&gt;propriété['attribut']()</code> n'est pas nécessaire pour accéder aux valeurs
        des attributs.
    </para>

    <para>
        La plupart du temps vous voudrez itérer sur le flux et réaliser quelque chose avec
        ses entrées. <classname>Zend_Feed_Abstract</classname> implémente l'interface
        <code>iterator</code> de <acronym>PHP</acronym>, ce qui résume au code suivant l'affichage des titres de tous
        les articles du canal&#160;:
    </para>

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

    <para>
        Si vous n'êtes pas un familier de <acronym>RSS</acronym>, voici les éléments standard associés au
        canal <acronym>RSS</acronym> et à ses éléments pris séparément (les entrées).
    </para>

    <para>Les éléments requis pour les canaux sont&#160;:</para>

    <para>
        <itemizedlist>
            <listitem>
                <para><code>title</code> (titre)&#160;: le nom du canal</para>
            </listitem>

            <listitem>
                <para>
                    <code>link</code> (lien)&#160;: l'URL du site Web correspondant au canal
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>description</code>&#160;: une ou plusieurs phrases décrivant le canal
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>Les éléments optionnels pour les canaux sont&#160;:</para>

    <para>
        <itemizedlist>
            <listitem>
                <para>
                    <code>pubDate</code> (date de publication)&#160;: la date de publication de
                    l'ensemble, au format <acronym>RFC</acronym> 822
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>language</code> (langue)&#160;: la langue dans laquelle est écrit le
                    canal
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>category</code> (catégorie)&#160;: un ou plusieurs noms de catégorie
                    (spécifiés au moyen de plusieurs balises) auquel appartient le canal
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        Les éléments <acronym>RSS</acronym> <code>&lt;item&gt;</code> n'ont pas d'éléments requis particulier.
        Cependant soit <code>title</code> soit <code>description</code> doivent être
        présents.
    </para>

    <para>Les éléments communs sont&#160;:</para>

    <para>
        <itemizedlist>
            <listitem>
                <para><code>title</code> (titre)&#160;: le titre de l'élément</para>
            </listitem>

            <listitem>
                <para><code>link</code> (lien)&#160;: l'URL de l'élément</para>
            </listitem>

            <listitem>
                <para><code>description</code>&#160;: un résumé de l'élément</para>
            </listitem>

            <listitem>
                <para><code>author</code> (auteur)&#160;: l'adresse e-mail de l'auteur</para>
            </listitem>

            <listitem>
                <para>
                    <code>category</code> (catégorie)&#160;: une ou plusieurs catégories auquel
                    appartient l'élément
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>comments</code> (commentaires)&#160;: l'URL des commentaires relatifs à
                    cet élément
                </para>
            </listitem>

            <listitem>
                <para>
                    <code>pubDate</code> (date de publication)&#160;: la date à laquelle l'élément
                    a été publié, au format <acronym>RFC</acronym> 822
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        Dans votre code vous pouvez toujours tester si un élément est non-vide au moyen du
        test suivant&#160;:
    </para>

    <programlisting language="php"><![CDATA[
if ($element->nomPropriete()) {
    // ... traitement
}
]]></programlisting>

    <para>
        Si vous utilisez à la place de la condition <code>$element-&gt;nomPropriete</code>,
        vous obtiendrez toujours un objet qui, même vide, sera évalué comme <constant>TRUE</constant>, donc
        le test échouera.
    </para>

    <para>
        Pour plus d'informations, la spécification <acronym>RSS</acronym> 2.0 officielle est disponible à
        l'adresse&#160;: <ulink url="http://blogs.law.harvard.edu/tech/rss">
        http://blogs.law.harvard.edu/tech/rss</ulink>
    </para>
</sect1>
