<sect1 id="zend.feed.consuming-rss">
    <title>Работа с лентой RSS</title>
    <para>
        Чтение ленты такое же простое, как создание объекта <code>Zend_Feed_Rss</code>
        с URI ленты:
    </para>

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

    <para>
        Если при извлечении ленты произошла ошибка, то будет сгенерировано исключение
        <code>Zend_Feed_Exception</code>.
    </para>

    <para>
        Создав объект ленты, вы можете получить доступ к любым стандартным
        свойствам канала RSS (channel) непосредственно в объекте:
    </para>

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

    <para>
        Обратите внимание на синтаксис функции. <code>Zend_Feed</code> использует соглашение
        об интерпретации свойств как объекта XML, если они запрошены в синтаксисе
        получения переменной (<varname>$obj->property</varname> и как строки, если они запрошены
        в синтаксисе метода (<varname>$obj->property()</varname>). Это позволяет получить доступ
        к полному тексту любого отдельного узла, что одновременно дает полный доступ
        и ко всем дочерним элементам.
    </para>

    <para>
        Если свойства канала имеют атрибуты, то к ним можно получить доступ, используя
        синтаксис массива PHP:
    </para>

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

    <para>
        Поскольку атрибуты не могут иметь дочерние элементы, то нет
        необходимости в синтаксисе метода для получения значений атрибутов.
    </para>

    <para>
        Скорее всего, вам потребуется произвести обход ленты и выполнить
        какие-либо операции с ее сообщениями. <code>Zend_Feed_Abstract</code>
        реализует интерфейс PHP <code>Iterator</code>, поэтому вывод заголовков
        всех статей в канале будет выглядеть следующим образом:
    </para>

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

    <para>
        На тот случай, если вы не знакомы с RSS, здесь приведены стандартные
        элементы, которые должны присутствовать в канале (элемент
        <code>&lt;channel&gt;</code>) и отдельных сообщениях RSS
        (элемент <code>&lt;item&gt;</code>).
    </para>

    <para>
        Обязательные элементы канала:
    </para>

    <para>
        <itemizedlist>
            <listitem>
                <para>
                    <code>title</code> - имя канала
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>link</code> - URL веб-сайта, соответствующего каналу
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>description</code> - одно или несколько предложений, составляющих
                    описание канала
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        Обычно используемые необязательные элементы канала:
    </para>

    <para>
        <itemizedlist>
            <listitem>
                <para>
                    <code>pubDate</code> - дата публикации канала в формате RFC 822
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>language</code> - язык, на котором написано содержимое канала
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>category</code> - одна или несколько (задается несколькими тегами) категорий,
                    к которым принадлежит канал
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        Элементы <code>&lt;item&gt;</code> не имеют обязательных вложенных элементов.
        Тем не менее, должны быть представлены заголовок
        <code>&lt;title&gt;</code> или описание
        <code>&lt;description&gt;</code>.
    </para>

    <para>
        Обычно используемые элементы сообщения:
    </para>

    <para>
        <itemizedlist>
            <listitem>
                <para>
                    <code>title</code> - заголовок сообщения
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>link</code> - URL сообщения
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>description</code> - краткое описание
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>author</code> - e-mail автора
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>category</code> - одна или несколько категорий,
                    к которым принадлежит сообщение
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>comments</code> - URL комментариев к данному сообщению
                </para>
            </listitem>
            <listitem>
                <para>
                    <code>pubDate</code> - дата публикации в формате RFC 822
                </para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        В своем коде вы можете проверить, имеет ли элемент непустое значение,
        следующим образом:
    </para>

    <programlisting language="php"><![CDATA[
if ($item->propname()) {
    // ... обработка
}
]]>
    </programlisting>

    <para>
        Если вместо этого использовать <varname>$item->propname</varname>, то всегда будете
        получать объект. Пустой объект расценивается как <constant>TRUE</constant>,
        поэтому такая проверка будет некорректной.
    </para>

    <para>
        Для получения более подробной информации читайте официальное описание
        спецификации RSS 2.0:
        <ulink url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>
    </para>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
