このチュートリアルは、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
を作成し、ひとつの記事を追加します。
<?php
$stories[] = array(
'title' => 'First Article',
'link' => 'http://freedomink.org/node/view/55',
'description' => 'Short blurb about article........'
);
?>
さらに別の記事を追加していく場合もやりかたは同じです。 ふつうは "for" や "foreach" のループ内で行うことになるでしょう。
<?php
$stories[] = array(
'title' => 'Second Article',
'link' => 'http://freedomink.org/node/view/11',
'description' => 'This article shows you how ......'
);
?>
最後に、チャネルの詳細を設定してそこに記事を追加します。
<?php
$data['channel'] = array(
"title" => "Freedom Ink",
"link" => "http://freedomink.org/",
$stories
);
?>
では、PEAR の XML_Serializer パッケージで XML を作成してみましょう。
<?php
$serializer = new XML_Serializer($options);
if ($serializer->serialize($data)) {
header('Content-type: text/xml');
echo $serializer->getSerializedData();
}
?>
これだけです! このコードを含むページを訪れると、 上で見たような XML を作成して返します。
XML/RSS ファイルのパース方法については、 関連する記事を参照ください。XML/RSS ドキュメントのパースに関する最も簡単な方法が説明されています。