注意 このチュートリアルは、cnb 氏によって作成され http://freedomink.org/node/62 で公開されていたものです。2005 年以降このサイトにつながらなくなってしまっているので、 Internet Archive's Wayback Machine を使って復旧させました。
ここでは、ニュースフィードの XML をほんの 5 分で作成してしまう方法を解説します。 PHP、PEAR、そして Stephan Schmidt が作成した PEAR パッケージ XML_Serializer を使用します。
ニュースフィードに最低限必要な内容は "サイト名"、 "サイトの URL" としてそのサイトの "ニュースの一覧" です。 ニュースフィードを作成するために必要なのは、 これらの情報を他のサイトが理解できる形式で表現した (ウェブ) ドキュメントを公開することです。これを実現するために、 標準的な RDF Site Summary (RSS) フォーマットを使用します。 このフォーマットは多くのサイトで用いられています。
ここでの狙いは、次のようなドキュメントを作成することです。
注意 これは "整形式の" XML ではありません。 説明用に可能な限りシンプルにした省略バージョンです。 まずは基本を理解し、それから整形式 XML の作成に進みましょう。
<?xml version="1.0" encoding="UTF-8"?> <rdf:RDF> <channel> <title>Freedom Ink</title> <link>http://freedomink.org/</link> <item> <item> <title>First Article</title> <link>http://freedomink.org/node/view/55</link> <description>Short blurb about article........</description> </item> <item> <title>Second Article</title> <link>http://freedomink.org/node/view/11</link> <description>This article shows you how ......</description> </item> </item> </channel> </rdf:RDF> |
これを PHP で行う簡単な方法を説明します。
前提条件: PEAR および XML_Serializer パッケージがインストールされていること。
次のようなデフォルトオプションを、PHP ページの先頭に記述します。
<?php require_once 'XML/Serializer.php'; $options = array( "indent" => " ", "linebreak" => "\n", "typeHints" => false, "addDecl" => true, "encoding" => "UTF-8", "tagName" => "rdf:RDF", "defaultTagName" => "item" ); ?> |
まずは、サイト上のニュース記事一覧を含む配列を作成しましょう。
配列 $stories を作成し、ひとつの記事を追加します。
$stories[] = array( 'title' => 'First Article', 'link' => 'http://freedomink.org/node/view/55', 'description' => 'Short blurb about article........' ); |
さらに別の記事を追加していく場合もやりかたは同じです。 ふつうは "for" や "foreach" のループ内で行うことになるでしょう。
$stories[] = array( 'title' => 'Second Article', 'link' => 'http://freedomink.org/node/view/11', 'description' => 'This article shows you how ......' ); |
最後に、チャネルの詳細を設定してそこに記事を追加します。
$data['channel'] = array( "title" => "Freedom Ink", "link" => "http://freedomink.org/", $stories ); |
では、PEAR の XML_Serializer パッケージで XML を作成してみましょう。
$serializer = new XML_Serializer($options); if ($serializer->serialize($data)) { header('Content-type: text/xml'); echo $serializer->getSerializedData(); } |
これだけです! このコードを含むページを訪れると、 上で見たような XML を作成して返します。
XML/RSS ファイルのパース方法については、 関連する記事を参照ください。XML/RSS ドキュメントのパースに関する最も簡単な方法が説明されています。