<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 15156 -->
<sect1 id="zend.feed.consuming-rss">
    <title>RSS フィードの使用</title>
    <para>
        RSS フィードの読み込みは、フィードの URL を指定して
        <classname>Zend_Feed_Rss</classname> のインスタンスを作成するのと同じくらい簡単です。
    </para>
    <programlisting role="php"><![CDATA[
$channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
]]></programlisting>
    <para>
        フィードの取得時にエラーが発生した場合は
        <classname>Zend_Feed_Exception</classname> がスローされます。
    </para>

    <para>
        フィードオブジェクトを取得すると、標準的な RSS の "channel"
        プロパティに対して直接アクセスできるようになります。
    </para>
    <programlisting role="php"><![CDATA[
echo $channel->title();
]]></programlisting>
    <para>
        関数の構文に注意しましょう。"getter" 方式の構文 (<code>$obj->property</code>)
        をした場合は、<classname>Zend_Feed</classname> はプロパティを XML オブジェクトとして扱います。
        一方、メソッドの構文 (<code>$obj->property()</code>)
        を使用した場合は文字列として扱います。
        これにより、特定のノードを取得したあとで、さらにその子要素にもアクセスできるようになります。
    </para>

    <para>
        チャネルのプロパティが属性を保持している場合、PHP
        の配列構文を使用してそれらにアクセスすることができます。
    </para>
    <programlisting role="php"><![CDATA[
echo $channel->category['domain'];
]]></programlisting>
    <para>
        XML の属性は子を持つことができないので、
        属性値へアクセスする際にメソッド構文を使用する必要はありません。
    </para>

    <para>
        たいていの場合は、フィードをループさせたうえで、
        個々のエントリに対して何かをすることになるでしょう。
        <classname>Zend_Feed_Abstract</classname> は PHP の <code>Iterator</code>
        インターフェイスを実装しているので、
        例えばチャネル内の全記事のタイトルを表示するには単にこのようにするだけです。
    </para>
    <programlisting role="php"><![CDATA[<?php
foreach ($channel as $item) {
    echo $item->title() . "\n";
}
]]></programlisting>
    <para>
        RSS にあまり詳しくない方のために、RSS チャネルおよび個々の RSS
        アイテム (エントリ) で利用できる標準的な要素をまとめます。
    </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>
        RSS の <code>&lt;item&gt;</code> 要素には必須要素はありません。
        しかし <code>title</code> あるいは <code>description</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> - 著者のメールアドレス</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 role="php"><![CDATA[
if ($item->propname()) {
    // ... 続行できます
}
]]></programlisting>

    <para>
        <code>$item->propname</code> 形式を使用した場合は、
        空のオブジェクトについても <code>TRUE</code> と評価されてしまうので、
        このように調べることはできません。
    </para>

    <para>
        詳細な情報は、
        <ulink url="http://blogs.law.harvard.edu/tech/rss">http://blogs.law.harvard.edu/tech/rss</ulink>
        にある RSS 2.0 の公式仕様を参照ください。
    </para>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
