6) RSSを生成–XML_Serializer
前回は、RSS※1の取得ができるようになりました。今回はRSSを生成してみましょう。
RSSフィードは、XMLで記述されたコンテンツ配信フォーマットです。XML_Serializerを利用することで、RSS形式のXMLを簡単に生成することができます。
※1 RSS説明は「http://it.jfe-tec.jp/column/it_column/column_rss/」を参照
インターネットリサーチ・コンサルティング・企画、ウェブ翻訳から、Web制作、システム開発までオープンソース・ネットワークビジネスを提供
RSSの構造
RSSの構造について簡単に説明します。他にも必要な要素や属性がありますが、今回はXML_ Serializerを利用してXMLを生成することが目的なので、最低限の要素からなるこの構造で進めていきます。
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ---(1)
xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="サイトURL"> ---(2)
<title>サイトタイトル</title>
<link>サイトURL</link>
<items>
<rdf:Seq>
<rdf:li rdf:resource="記事URL"/>
<!--li要素は記事の数だけ繰り返されます-->
</rdf:Seq>
</items>
</channel>
<item rdf:about="記事URL"> ---(3)
<title>記事タイトル</title>
<link>記事URL</link>
<description>記事概要</description>
</item>
<!--item要素は記事の数だけ繰り返されます-->
</rdf:RDF>
(1):ルート要素です
(2):サイト情報を記入するchannel要素です
(3):記事ごとの情報を記入するitem要素です
ルート要素の作成
コンストラクタにオプションを指定することで、ルート要素を作成します。
<?php
$options = array( ---(1)
"rootName" => "rdf:RDF", ---(2)
"rootAttributes" => array( ---(3)
"xmlns"=>"http://purl.org/rss/1.0/",
"xmlns:rdf"=>"http://www.e3.org/1999/02/22-rdf-syntax-ns#",
"xmlns:dc"=>"http://purl.org/dc/elements/1.1/"),
"defaultTagName" => array('rdf:RDF'=>'item', ---(4)
'rdf:Seq'=>'rdf:li'),
"attributesArray" => "_attr" ---(5)
);
?>
(1):オプションを設定します
(2):ルート要素の名前を設定します
(3):ルート要素の属性を設定します
(4):繰返し出現する要素を指定します
(5):子要素の属性に設定する配列の添え字を指定します
channel要素の作成
当コラムの情報でchannel要素を作成します。
<?php
$options = array(
"rootName" => "rdf:RDF",
"rootAttributes" => array(
"xmlns"=>"http://purl.org/rss/1.0/",
"xmlns:rdf"=>"http://www.e3.org/1999/02/22-rdf-syntax-ns#",
"xmlns:dc"=>"http://purl.org/dc/elements/1.1/"),
"defaultTagName" => array('rdf:RDF'=>'item', 'rdf:Seq'=>'rdf:li'),
"attributesArray" => "_attr"
);
$url = "http://it.jfe-tec.jp/column/tech_column/column_php/"; --(1)
$xml["channel"] = array(
"_attr"=> array("rdf:about" =>$url), --(2)
"title"=>"PHPプログラミング", --(3)
"link"=>$url, --(4)
"items" => array("rdf:Seq"=>array( --(5)
array("_attr"=>array("rdf:resource"=>$url."000072.html")), --(6)
array("_attr"=>array("rdf:resource"=>$url."000075.html")) --(7)
))
);
?>
(1):当コラムのURLを$urlパラメータに格納します
(2):channel要素の属性を設定します
(3):title要素にサイトタイトルを設定します
(4):link要素にサイトURLを設定します
(5):itmes要素に記事URLを設定します
(6):当コラムの第1回「入力フォームを自動作成」の記事URLを設定します
(7):当コラムの第2回「入力値のチェック」の記事URLを設定します
items要素の作成
当コラムの記事、第1回「入力フォームを自動作成」、第2回「入力値のチェック」でitem要素を作成します。
<?php
$options = array(
"rootName" => "rdf:RDF",
"rootAttributes" => array(
"xmlns"=>"http://purl.org/rss/1.0/",
"xmlns:rdf"=>"http://www.e3.org/1999/02/22-rdf-syntax-ns#",
"xmlns:dc"=>"http://purl.org/dc/elements/1.1/"),
"defaultTagName" => array('rdf:RDF'=>'item', 'rdf:Seq'=>'rdf:li'),
"attributesArray" => "_attr"
);
$url = "http://it.jfe-tec.jp/column/tech_column/column_php/";
$xml["channel"] = array(
"_attr"=> array("rdf:about" =>$url),
"title"=>"PHPプログラミング",
"link"=>$url,
"items" => array("rdf:Seq"=>array(
array("_attr"=>array("rdf:resource"=>$url."000072.html")),
array("_attr"=>array("rdf:resource"=>$url."000075.html"))
))
);
$day = "2007-01-01T01:01:01+09:00"; ---(1)
$xml[] = array( ---(2)
"_attr"=> array("rdf:about" =>$url."000072.html"), ---(3)
"title"=>"第1回PHPプログラミング", ---(4)
"link"=>$url."000072.html", ---(5)
"description"=>"入力フォームを自動作成", ---(6)
"dc:date"=>$day ---(7)
);
$xml[] = array( ---(8)
"_attr"=>array("rdf:about" =>$url."000075.html"),
"title"=>"第2回PHPプログラミング",
"link"=>$url."000075.html",
"description"=>"入力値のチェック",
"dc:date"=>$day
);
?>
(1):日付を$dayパラメータに格納します
(2):当コラムの記事、第1回「入力フォームを自動作成」でitem要素を作成します
(3):item要素の属性を設定します
(4):title要素に記事タイトルを設定します
(5):link要素に記事URLを設定します
(6):description要素に記事概要を設定します
(7):date要素に日付
(8):同様に、第2回「入力値のチェック」でitem要素を作成します
RSSフィードの作成
XML_Serializerオブジェクトを生成してRSSフィードを出力します。
<?php
$options = array(
"rootName" => "rdf:RDF",
"rootAttributes" => array(
"xmlns"=>"http://purl.org/rss/1.0/",
"xmlns:rdf"=>"http://www.e3.org/1999/02/22-rdf-syntax-ns#",
"xmlns:dc"=>"http://purl.org/dc/elements/1.1/"),
"defaultTagName" => array('rdf:RDF'=>'item', 'rdf:Seq'=>'rdf:li'),
"attributesArray" => "_attr"
);
$url = "http://it.jfe-tec.jp/column/tech_column/column_php/";
$xml["channel"] = array(
"_attr"=> array("rdf:about" =>$url),
"title"=>"PHPプログラミング",
"link"=>$url,
"items" => array("rdf:Seq"=>array(
array("_attr"=>array("rdf:resource"=>$url."000072.html")),
array("_attr"=>array("rdf:resource"=>$url."000075.html"))
))
);
$day = "2007-01-01T01:01:01+09:00";
$xml[] = array(
"_attr"=> array("rdf:about" =>$url."000072.html"),
"title"=>"第1回PHPプログラミング",
"link"=>$url."000072.html",
"description"=>"入力フォームを自動作成",
"dc:date"=>$day
);
$xml[] = array(
"_attr"=>array("rdf:about" =>$url."000075.html"),
"title"=>"第2回PHPプログラミング",
"link"=>$url."000075.html",
"description"=>"入力値のチェック",
"dc:date"=>$day
);
require_once 'XML/Serializer.php'; --(1)
$serial = new XML_Serializer($options); --(2)
$result = $serial->serialize($xml); --(3)
echo $serial->getSerializedData(); --(4)
?>
(1):XML_ Serializerライブラリーを読み込みます
(2):オプションを指定してXML_ Serializerオブジェクトを生成します
(3):serialize()メソッドでシリアラズします
(4):getSerializedData()メソッドでシリアラズの結果(RSSフィード)を表示します
ブラウザーからこのファイルにアクセスしてみると、XML文書が表示されます。これがRSSフィードになります。

このページをRSSリーダーから確認してみると、正しく表示されていることがわかります。

このように、XML_Serializerを利用することで、RSSフィードを動的に生成することができます。
次回はデザインとロジックを分離するためのテンプレートエンジンについてご紹介します。


