RSS2.0のauthor/dc:creatorを追加する

HTMLScrapingのサンプルスクリプトHTMLToFeed.class.phpで、RSSを作成しています。


その際、itemにauthorを追加しても表示されない問題がありました。
問題を解決したので、メモしておきます。



author

HTMLToFeed.class.phpのソースを覗いてみたところ、authorを処理していませんでした。
authorには対応しない仕様だったのですね。


サンプルスクリプトとあるのですから贅沢いってはいけません。
そこで以下の行を追加して対応しました。


203行目に以下の行を追加

if (!empty($item->author)) {
$item_element->appendChild($doc->createElement('author', $item->author));
}


252行目に以下の行を追加

public $author = '';


これでautohrを表示することができます。


dc:creator

RSS2.0のauthorは、「記事の著者の Email アドレス」なんだそうです。


RSS 2.0 Specification 日本語訳
 http://www.futomi.com/lecture/japanese/rss20.html#ltauthorgtSubelementOfLtitemgt


名前もメールアドレスのあとに()にくくっていれるのは問題ないらしいですけど、この要素を記述するときはメールアドレスが不可欠らしい。
しかしここにメールアドレスを書くことはおそらくSPAM業者のいい鴨になるだけなので、避けたいところです。


RSS2.0でも拡張要素として、dc:creator要素を使うことは問題ないようです(実際、WordPressのRSS2.0フィードではauthorではなく、dc:creatorで記事の著者を示しています)。


そこで、上記の改造は止めてdc:creator要素に記述することにしました。


156行目以降の4行

$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = $format_output;
$root = $doc->appendChild($doc->createElement('rss'));
$root->setAttribute('version', '2.0');


を、以下に置き換え

$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = $format_output;
$ns = array(
'dc' => 'http://purl.org/dc/elements/1.1/',
);
$root = $doc->appendChild($doc->createElement('rss'));
$root->setAttribute('version', '2.0');
$root->setAttribute('xmlns:dc', $ns['dc']);


203行目(上記を追加後の207行目)に以下を追加

if (!empty($item->dccreator)) {
$item_element->appendChild($doc->createElement($ns['dc'], 'dc:creator', $item->dccreator));
}


252行目(上記を追加後の259行目)に以下を追加

public $dccreator = '';


問題なく表示されるようになりました
(ソース読んで、仕様にあわせるのにそれなりに時間かかりました;_;)