RSS シンジケーションは最近では至るところで目にします。つまり、PHP 開発者にとって少なくとも RSS とその仕組みを理解することは不可欠なことです。そこで、この記事では RSS の基礎知識とその多彩な使用方法のいくつかをはじめ、PHP を使ってデータベースから RSS フィードを作成する方法、そして XML_RSS モジュールで既存の RSS を読み取り、HTML に変換する方法を説明します。

Tracy Peterson, Freelance Writer, Freelance Developer

Tracy Peterson は、経験豊富な LAMP 開発者であるとともに、ソフトウェア・プロジェクト・マネージャーでもあります。現在、カリフォルニア州サンホセ在住です。



2006年 12月 05日

何ですって?RSS について聞いたことがない?

RSS シンジケーションはちまたで最も一般的な TLA (3 文字の頭字語) の 1 つとして挙げられます。RSS はさまざまなことを表す頭字語ですが、現在では Really Simple Syndication を表すというのが一般的です。これが、この極めて日常的で極めて便利な標準の最新の言い回しになっています。

インターネットの歴史がまだ浅かった頃、ユーザーのコンピューターでは Pointcast というソフトウェアがデータをスクリーンセーバー・アプリケーションにプッシュして、あらゆる種類のニュースを更新していました。そのうち Netscape や Microsoft などのブラウザー開発者が、この非常に人気の高いサービスに似たものを作成しようと乗り出しました。なかでも最も広く受け入れられたバージョンを作り出したのは Netscape で、これがインターネットで未開発の分野にリリースされ、ついには今日の RSS となった次第です。

RSS はブロードキャスト・システムによく似たもので、最近更新された情報を多数の受信者に配布します。相当な数のユーザーがいる場合、RSS フィードはビーコンのように動作し、ユーザーの目を更新情報に向けさせます。読者の注意を引き付けておくためにまさに切望されていた手段を提供する RSS は、当然のことながら、コンテンツ・プロバイダーの間でさかんに使用されるようになりました。

図 1 のアイコンが表示されていれば、そのサイトではまず間違いなく RSS フィードを使用できます。このアイコンが事実上の標準のアイコンになっており、そのサイトの更新情報の配信に RSS を使用できることを表します。このアイコンの曲線が表すのは電波で、RSS フィードの本質、ブロードキャストを象徴しています。

図 1. RSS の標準アイコン
RSS の標準アイコン

RSS アプリケーション

RSS フィードの読み取りは相当な数のアプリケーション (多くは無料) で可能で、そのうちの多くではフィードの集約も可能です。集約機能があると、ユーザーが、受信するコンテンツの量や内容を調整できます。それぞれのリーダーには異なる機能があり、インターネットから送られる圧倒的な量の情報を理解できるように設計されています。

例をいくつか挙げると、Mozilla の Thunderbird と Firefox、Microsoft の Internet Explorer 7 と Office の次期のバージョンなど、RSS アプリケーションは検索エンジンとほとんど同じくらい身近なものになっています。フィードを取得して読み取る方法はさまざまなので、自分にあったものを見つけられるはずです。ただし、好みにうるさいソフトウェア開発者なら、独自のものを作成したいと思うかもしれません。この記事では、そういった開発者のためにこれから詳細を掘り下げていきます。


RSS の使用方法

あなたが自分のサイトのコンテンツを一般に公開したいとしたら、それがインターネットにコンテンツを掲載するそもそもの理由になります。大勢のユーザーがそのサイトとコンテンツの存在を知ったとして、彼らは毎日サイトにアクセスして更新を調べるでしょうか。おそらく違うでしょう。あなたは頻繁にアクセスするサイトで毎日更新をチェックしますか? おそらく違うでしょう。そこで活躍するのが RSS です。

サイトの読者にとって、RSS は非常に役立ちます。それは、サイトに掲載される意見やニュースを重視する読者にとってはなおさらです。サイトに頻繁に戻らなくても、コンテンツが更新または追加されると同時にそれがわかるため、時間と手間を省くことができると同時に何も見落とすことがありません。

コンテンツ生成もお手のものです。RSS フィードを組み込んで、独自のサイトのコンテンツ・アグリゲーションを供給するようにすればいいだけの話です。フィードからデータを抽出して自分のサイトに組み込むだけのほんのわずかな時間で相当な量のコンテンツをサイトに追加できます。

個人的には、Craigslist (www.craigslist.org) などの各種のサイトのフィルタリング結果からフィードを集めるために RSS を使っています。このちょっとしたトリックの目的は、中古の電子機器を買うことです。つまり、サイトの検索を設定してから RSS で検索結果のページを処理することができるのです。例えば、ある価格範囲のカメラを探すためにフィードを設定すれば、誰かがその価格範囲内でカメラを売りに出したときに、RSS フィードでその投稿を見ることができます。最初の入札者になりたければ、これは大きなメリットになるはずです。


RSS 2.0 の標準フォーマット

RSS 標準では、フィードのコンテンツの定義と制約を設けています。フィード元はあらゆるデータ・ソースにすることが可能で、フィードがインターネット文書を定義し、本質的にはリンクとその説明のリストを構成します。

リスト 1 の RSS フォーマットを見てください。ここでは NASA の「Liftoff News」フィードからのサンプル文書を使用しています。

リスト 1. RSS 2.0 文書のサンプル
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>

    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>
    
    <item>
      <title>Space Exploration</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
      <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
        will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
      <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
    </item>
    
    <item>
      <title>The Engine That Does More</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
      <description>Before man travels to Mars, NASA hopes to design new engines
        that will let us fly through the Solar System more quickly.  The proposed
        VASIMR engine would do that.</description>
      <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
    </item>
    
    <item>
      <title>Astronauts' Dirty Laundry</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
      <description>Compared to earlier spacecraft, the International Space
        Station has many luxuries, but laundry facilities are not one of them.
        Instead, astronauts have other options.</description>
      <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
    </item>
  </channel>
</rss>

上記の XML 形式文書で最初にある子オブジェクトは、<channel> の定義です。チャネルはフィード自体とその関連情報でしかありません。多くの RSS フィードのチャネル・オブジェクトは 1 つですが、任意のフィルターごとに個別のフィードが必要な場合には、チャネル・オブジェクトを複数にすることができます。チャネル・オブジェクトには title、link および description オブジェクトが必要です。これらのオブジェクトがフィードに関する基本的な記述情報を定義します。オプションのオブジェクトとしては、language、copyright、managingEditor、webMaster、pubDate、lastBuildDate、category、generator、docs、cloud、ttl、image、rating、textInput、skipHours、および skipDays があります。

チャネルに含めることのできる項目の数に制限はありません。ITEM 要素のすべての要素はオプションですが、要素を有効にするためにはタイトルまたは説明が少なくとも 1 つ必要です。要素には、title、link、description、author、category、comments、enclosure、guide、pubDate、および source があります。


PHP の活躍場所

この記事は、読者に PHP を使用した経験があり、変数を渡して結果を返す関数を使用できるということを前提としています。PHP には多くの関数があり、アプリケーションの内外で XML をすんなり処理します。

まずローカル側に保管されたデータ・ソース、コンテンツ管理システム、ブログ、あるいはインターネット文書のフォーマットに適合するコンテンツから情報を取得し、その情報をユーザーにフィードとして配信します。それにはこのデータを取得して RSS オブジェクトにフォーマット設定し、要求を処理しなければなりません。

サイトの構成部分に追加コンテンツが必要な場合、サイトに追加するコンテンツ文書を至るところで検索する代わりに、すでに用意されている多数の RSS フィードを利用することができます。これらのフィードをサイトに取得して操作するには、XML_RSS を使用します。

XML_RSS() は、XML RSS ファイルを解釈するという複雑な作業を簡単にしてくれる PEAR パッケージです。PEAR は無料で使用できる PHP 関数のオープン・ソース・ライブラリーで、継続的に開発されています。ご使用の PHP システムにはすでに PEAR がインストールされているかもしれませんが、この記事のためにインストールしなければならない場合もあります (リンクについては、「参考文献」を参照)。XML_RSS() は単なる関数で、RSS フィードの場所を指定すると、そのフィードの XML を配列にロードし、PHP アプリケーションで使用できるようにします。配列の要素には、読み取られた RSS ファイルの要素と属性に関連付けられた名前付きのキーが指定されます。


データを抽出する

RSS データ・フォーマットがどのようなものかわかったら、世界に配信したいデータを検討し、そのフォーマットに当てはめてみましょう。有難いことに PHP には強力な RSS と XML 処理機能があるため、これらの機能を使えば開発時間を短縮できます。一般的な多くの Web 標準と同じく、PHP にはアプリケーションですぐに使用できる多数の素晴らしい関数があります。

みんなに知らせる

他の人からフィードが読み取れるようにフィードを作成したとしても、どうやってそのフィードの存在を知らせるのでしょうか?それには、自分のホーム・ページの先頭に次のタグを追加することで、Mozilla Firefox、Microsoft Internet Explorer、そして他のリーダーに、作成したフィードについて知らせることができます。

<link rel="alternate" type="application/rss+xml"
href="URL_FOR_YOUR_FEED" title="FEED_TITLE" />

忘れずに、自分の URL とフィード・タイトルでタグを更新してください。

この記事では、"" を使ってデータベースからデータを抽出し、そのデータを RSS フィードのフォーマットにします。この RSS フィードは、呼び出されるたびにデータセットへの最新の追加内容を検索し、新しい RSS を要求側に返すように設定します。

フィードは自分のサイト上にあるあらゆるデータ・ソースから送られてきますが、結局は、RSS フィードを受け取る側がそのデータを使用するのに十分な情報があることを確認する必要があります。そのためには少なくとも、URL の名前と説明が必要です。自分のサイトで公開されているデータであれば、どれでもフィードに変換できます。

Web アプリケーションのデータベースに接続し、更新された情報を抽出して XML RSS 文書形式に設定するには、PHP を使用します。

データを抽出するための基本機能

使用するデータベースが決まったら、通常通りに接続を作成し、ユーザーが読み取れるようにレイアウトされた XML を表示するページを生成します。

ページを要求側に送信する

データを独自のコードですべて確実にフォーマット設定したら、そのデータが適切に渡されることを確実にして、誰かがあなたの URL をリーダーに入力したときに、期待する XML RSS フィードを取得できるようにします (リスト 2 を参照)。

リスト 2. 完全な RSS.php
<?php

$database =  "nameofthedatabase";
$dbconnect = mysql_pconnect(localhost, dbuser, dbpassword);
mysql_select_db($database, $dbconnect);
$query = "select link, headline, description from `headlines` limit 15";
$result = mysql_query($query, $dbconnect);

while ($line = mysql_fetch_assoc($result))
        {
            $return[] = $line;
        }

$now = date("D, d M Y H:i:s T");

$output = "<?xml version=\"1.0\"?>
            <rss version=\"2.0\">
                <channel>
                    <title>Our Demo RSS</title>
                    <link>http://www.tracypeterson.com/RSS/RSS.php</link>
                    <description>A Test RSS</description>
                    <language>en-us</language>
                    <pubDate>$now</pubDate>
                    <lastBuildDate>$now</lastBuildDate>
                    <docs>http://someurl.com</docs>
                    <managingEditor>you@youremail.com</managingEditor>
                    <webMaster>you@youremail.com</webMaster>
            ";
            
foreach ($return as $line)
{
    $output .= "<item><title>".htmlentities($line['headline'])."</title>
                    <link>".htmlentities($line['link'])."</link>
                    
<description>".htmlentities(strip_tags($line['description']))."</description>
                </item>";
}
$output .= "</channel></rss>";
echo $output;
?>

上記のリストを順を追って見ていきましょう。このリストではまず、ローカル・データベースに対するデータベース接続オブジェクトを設定しています。このデータベース内のテーブルには、見出し、リンク、説明フィールドが含まれるレコードがあり、後にこれらの情報を XML 応答に書き込むことになります。次にデータベース接続の結果を使って、MYSQL_QUERY() により、そのテーブルに対して SQL クエリーを実行しています。そのクエリーの実行結果オブジェクトは、WHILE を使って 1 つずつ書式を整え直され、そのデータはさらに新しい単純配列に再フォーマット設定されます。

新しい配列が準備できたら、$output 変数の中に XML ファイルの作成を開始し、返された応答ごとに 1 つずつ $line 配列を一巡して新しい要素を追加します。SQL ステートメントで応答数を 15 に制限しているため、この処理には長い時間かかりません。このコード・フラグメントを開始ビルディング・ブロックとして使用するには、ダミーのリンク、データベース名、そしてログイン情報をご使用の環境に合わせて置き換える必要があります。

このスクリプトが実行されると、リスト 3 のような簡潔でわかりやすい RSS ファイルが出力されます。

リスト 3. RSS.php の出力
<?xml version="1.0"?>
    <rss version="0.97">
        <channel>
            <title>Our Demo RSS</title>
            <link>http://www.tracypeterson.com/RSS/RSS.php</link>
            <description>A Test RSS</description>
            <language>en-us</language>
            <pubDate>Mon, 13 Nov 2006 22:46:06 PST</pubDate>
            <lastBuildDate>Mon, 13 Nov 2006 22:46:06 PST</lastBuildDate>
            <docs>http://someurl.com</docs>
            <managingEditor>you@youremail.com</managingEditor>
            <webMaster>you@youremail.com</webMaster>
    <item rdf:about="http://www.tracypeterson.com/">
            <title>This is Tracy's Web Page!</title>
            <link>http://www.tracypeterson.com/</link>
            <description>This is a demonstration of how to get PHP to work for 
your RSS feed.</description>
        </item><item rdf:about="http://www.tracypeterson.com">
            <title>This is Tracy's site again!</title>
            <link>http://www.tracypeterson.com</link>
            <description>Again, this is a demonstration of the power of PHP 
coupled with RSS.</description>
        </item></channel></rss>

これで、誰もが RSS.php への URL を入力して、新しい RSS ファイルに含まれるすべての新規コンテンツをロードできるようになります。


データを取り込む

RSS フィードを PHP スクリプトに組み込んで、他の配列と同じように使用できるようにするには、XML_RSS() 関数を使用します。それによって、データベースへのクエリーとまったく同じように、適切と思われる方法で配列を使用できるようになります。

この例では RSS.php に接続し、コピーをロードして順不同リストに表示します (リスト 4 を参照)。

リスト 4. showfeed.php
<?php
require_once "XML/RSS.php";

$rss =& new XML_RSS("http://www.tracypeterson.com/RSS/RSS.php");
$rss->parse();

echo "<h1>Headlines from <a
href=\"http://www.tracypeterson.com/RSS/RSS.php\">Tracy 
        Peterson's Site</a></h1>\n"; echo "<ul>\n";

foreach ($rss->getItems() as $item) {
  echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . 
"</a></li>\n";
}
echo "</ul>\n";
?>;

リスト 4 の例は、PEAR マニュアルからそのまま抜粋したもので、非常に簡潔です。ラインごとに検討して、この例には XML_RSS() クラスで使用可能な少数のメソッド、コンストラクター、そして parse() しか使用されていないことを確かめてみましょう。解析では、出力を前述した配列としてレンダリングしているだけです。

まず、require_once() 関数を使用して PEAR システムから RSS.php ファイルをロードしています。PEAR が正しく設定されていて XML_RSS がインストールされていれば、この関数はこのインクルード・ファイルを正確に見つけ、XML_RSS オブジェクトは使えるようになっているはずです。次に、$rss という名前の新しいオブジェクトを作成しています。このオブジェクトは、フィードの URL を XML_RSS コンストラクターに渡した結果、作成されるものです。

RSS フィードの値を返すには、ただ単に parse() メソッドを使用しているだけです。最初の echo 行は、RSS フィードを人間が読めるようにするために使用する基本 HTML を設定するところから始まっています。この例では、この順不同リストが私のサイトからの見出しリストであることを宣言しています。

foreach() ステートメントでは、getItems() メソッドを使って、解析されたフィードからの各項目要素を新しい配列 $items として取得しています。それぞれの配列要素には、それが含まれる実際の XML にちなんだ名前が付けられます。この例ではリンクとタイトルしか使用していないので、説明を追加し、これに関してもう少し説明します。RSS フィード全体がこの形式でレイアウトされるまで、foreach ループは処理する度に次の要素に移動します。

それはここで、表示結果のそれぞれに説明を追加します。

foreach() ループ内に、リスト 5 に太字で示す行を追加してください。

リスト 5. 説明の追加
foreach ($rss->getItems() as $item) {
  echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . 
"</a></li><br>";
echo $item['description'] . "<br><br>\n"; }

上記では、順不同リストに改行と説明行を追加しているだけです。以下が、showfeed.php の出力例です。

図 2. showfeed.php の出力
showfeed.php の出力

まとめ

インターネットは全般的に、そこに潜む驚くべき可能性に気が付き始めたにすぎません。今現在は、RSS がもたらすアクセシビリティーの向上によって、読者に最新情報を提供するプロセスを単純化できるようになりました。つまり、新しい情報があるかどうか読者がわざわざ調べなくても、更新を即時に読者にアラートすることができます。

この記事で、RSS フォーマットの標準と、フィードの作成方法、受信方法、そして使用可能な HTML に変換する方法を学んだ今、そのスキルをもっと大きなアプリケーションで使用してみてください。

参考文献

学ぶために

  • RSS ニュース・フィードの紹介」(James Lewin 著、developerWorks、2000年 11月): コンテンツ・シンジケーションを目的とした RSS ファイルの作成と使用方法に関する初期の記事です。
  • XML and how it will change the Web」(Doug Tidwell 著、developerWorks、1999年 11月): XML が Web 技術の次なる改革として見なされていた頃の古典的記事です。
  • RSS 2.0 によるコンテンツ配信」(James Lewin 著、developerWorks、2003年 12月): RSS 2.0 と新しい RSS 開発について取り上げたこの記事で、シンジケーションがどのように主流になっていくかを学んでください。
  • シンジケーションの概要、(RSS) Really Simple Syndication」(Vincent Lauria 著、developerWorks、2006年 3月): フィード・リーダーにはどのようなものがあるのか、そしてニーズに合ったフィード・リーダーを判断するときに役立つ情報を入手してください。
  • Add developerWorks RSS feeds to your site」(Doug Tidwell 著、developerWorks、2005年 10月): このデモでは、数行のコードを Web サイトに貼り付けるだけで、RSS フィードを介して developerWorks の情報にアクセスする方法を紹介しています。
  • Architectural manifesto: Designing an RSS reader」(Mikko Kontio 著、developerWorks、2005年 5月): RSS リーダーの設計でアーキテクチャーに焦点を当てた記事です。
  • IBM XML 認証: XML や関連技術の IBM 認定開発者になる方法について調べてください。
  • XML の Technical library: 広範な技術に関する記事とヒント、チュートリアル、標準、そして IBM レッドブックについては、developerWorks XML ゾーンを参照してください。
  • developerWorks technical events and webcasts: これらのセッションで最新情報を入手してください。
  • developerWorks XML ゾーンで XML のすべてについて学んでください。

製品や技術を入手するために

  • PEAR - PHP Extension and Application Repository: PEAR のホーム・ページにアクセスして、再使用可能な PHP コンポーネント用のフレームワークと分散システムについて調べてください。
  • PEAR :: Package :: XML_RSS: Resource Description Framework (RDF) Site Summary (RSS) 文書用のパーサーをダウンロードしてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source, Web development
ArticleID=241325
ArticleTitle=PHP と RSS: その仕組みを理解する
publish-date=12052006