[plagger][rss] RSS 2.0 pubDate

ここ (http://mark.jolt.jp/rssSearch.do) の RSS 2.0 を突っ込むと時刻情報を変換中に XML::Feed::RSS の中でエラー吐いて死ぬんだよなー。

line:85  if (my $ts = $rss->channel('pubDate'))

ここで、"Invalid format for date! at ..." とエラーを吐く。このメッセージがあるのは DateTime/Format/Mail.pm の _parse_strict と _parse_loose。

$rss->channel('pubDate') は "Mon, 15 May 2006 22:45:05 JST"。んー、これ strict_parse のフォーマットに違反してる? timezone のフォーマットが

    (?:
        \s+ (
            [+-] \d{4}  # standard form
            | $tz_RE    # obsolete form (mostly ignored)
            | [A-IK-Za-ik-z]  # including military (no 'J')
            ) # time zone (optional)
    )?

もちろん $tz_RE には JST なんてものはない。つーことで JST はアウト。むー。規格を調べてみるか。

     zone        =  "UT"  / "GMT"                ; Universal Time
                                                 ; North American : UT
                 /  "EST" / "EDT"                ;  Eastern:  - 5/ - 4
                 /  "CST" / "CDT"                ;  Central:  - 6/ - 5
                 /  "MST" / "MDT"                ;  Mountain: - 7/ - 6
                 /  "PST" / "PDT"                ;  Pacific:  - 8/ - 7
                 /  1ALPHA                       ; Military: Z = UT;
                                                 ;  A:-1; (J not used)
                                                 ;  M:-12; N:+1; Y:+12
                 / ( ("+" / "-") 4DIGIT )        ; Local differential
                                                 ;  hours+min. (HHMM)

確かに。

一応 JoltMark に要望だしてきたけど、JST やらなんやらのフォーマットを吐くのもいっぱいいるだろうし、そんなに厳しくタイムゾーンを判定しなくてもいいんだけどな。strict やめないと parse_loose 使ってくれんし。

で、ここまで調べておいて何だけど、JoltMark の RSS は JoltMark へのリンクしか含まれてないんか...。LDR で購読してるとブクマ先のリンクもでるからてっきり入ってるのかと思っていた。LDR すばらしい。