<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<sect1 id="zend.feed.consuming-rss">
    <title>RSS フィードの使用</title>
    <!-- Skip-EN-Revisions: 21606, 21818 -->
    <para>注意：このドキュメントでは、英語版のリビジョン 21606, 21818 の更新内容をスキップしています。</para>
    <para>
        <acronym>RSS</acronym> フィードの読み込みは、フィードの <acronym>URL</acronym> を指定して
        <classname>Zend_Feed_Rss</classname> のインスタンスを作成するのと同じくらい簡単です。
    </para>
    <programlisting language="php"><![CDATA[
$channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
]]></programlisting>
    <para>
        フィードの取得時にエラーが発生した場合は
        <classname>Zend_Feed_Exception</classname> がスローされます。
    </para>

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

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

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

    <para>
        必須のチャネル要素
    </para>

    <para>
        <itemizedlist>
            <listitem>
                <para><code>title</code> - チャネルの名前</para>
            </listitem>
            <listitem>
                <para><code>link</code> - チャネルに対応するウェブサイトの <acronym>URL</acronym></para>
            </listitem>
            <listitem>
                <para><code>description</code> - チャネルについての説明</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        よく使用されるオプションのチャネル要素
    </para>

    <para>
        <itemizedlist>
            <listitem>
                <para><code>pubDate</code> -
                コンテンツの発行日を <acronym>RFC</acronym> 822 の日付書式で表したもの</para>
            </listitem>
            <listitem>
                <para><code>language</code> - チャネルで使用している言語</para>
            </listitem>
            <listitem>
                <para><code>category</code> -
                チャネルの所属するカテゴリ (複数の場合は複数のタグで指定)</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        <acronym>RSS</acronym> の <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> - アイテムの <acronym>URL</acronym></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> - このアイテムに関連するコメントの <acronym>URL</acronym></para>
            </listitem>
            <listitem>
                <para><code>pubDate</code> - アイテムの発行日を <acronym>RFC</acronym> 822 の日付書式で表したもの</para>
            </listitem>
        </itemizedlist>
    </para>

    <para>
        要素が空要素であるかどうかは、以下のようにして調べられます。
    </para>
    <programlisting language="php"><![CDATA[
if ($item->propname()) {
    // ... 続行できます
}
]]></programlisting>

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

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