とあるRSSを、XML::Feedでパースしたら、うまくいきませんでした。そのRSSを
RSS Validator - feedAnalyzer RSSの構文チェック [feedanalyzer.com]
で調べてみたら、
"lastBuildDate" の日付の表記が間違っています。
"pubDate" "lastBuildDate" などではRFC 822の表記方法を使用します。
○正 > "Fri, 01 Jun 2005 03:00:00 +0900" (一例です 文字の間のスペースに注意してください)
○誤 > "Fri, 01 Mar 2009 03:00:00 +09:00"
とか出まして、RFC 822に従っていないので、XML::Feed(が使っているDateTime)が日付として認識できなかったようです。
ということで、これを生成しているのはなにかと思って調べてみたら、
<generator>http://www.futomi.com/library/rss/index.html?1.1.0</generator>
と書いていたので、該当するアドレスに飛んでみたら、RSS生成スクリプトでした。
RSS簡単一発作成『RSS 生成 CGI』 - futomi's CGI Cafe [www.futomi.com]
というわけで、シェアウェアだそうなので、インストールすることはとりあえずせずに、問題箇所を探してみました。
Filename: admin.cgi.patch
*** admin.cgi.orig 2006-07-25 11:57:00.000000000 +0900
--- admin.cgi 2009-03-10 11:46:26.000000000 +0900
***************
*** 876,882 ****
if($CONF{'TIMEZONE_OFFSET'} =~ /^\-/) {
$tz_sign = '-';
}
! my $tz = $tz_sign . sprintf("%02d", abs($CONF{'TIMEZONE_OFFSET'})) . ':00';
my $channel_pub_date = "$pubdate[6], $pubdate[3] $pubdate[4] $pubdate[5] $pubdate[2]:$pubdate[1]:$pubdate[0] ${tz}";
#image::title
my $image_title = $CONF2{'IMAGE_TITLE'};
--- 876,882 ----
if($CONF{'TIMEZONE_OFFSET'} =~ /^\-/) {
$tz_sign = '-';
}
! my $tz = $tz_sign . sprintf("%02d", abs($CONF{'TIMEZONE_OFFSET'})) . '00';
my $channel_pub_date = "$pubdate[6], $pubdate[3] $pubdate[4] $pubdate[5] $pubdate[2]:$pubdate[1]:$pubdate[0] ${tz}";
#image::title
my $image_title = $CONF2{'IMAGE_TITLE'};
このスクリプトを使っている人は、上のパッチを当てるといいんじゃないでしょうか。
フィードアグリケータを作っている僕としてはこれどうすればいいんでしょうね。