Perl で、RSS で配信されたエントリーの日付を処理する

HTTP::Date クラスを使うと RSS で配信されたエントリーの日付 (dc:date) を変換してくれる。この場合、RSS のソースによって米国から日本のニュースにアクセスした場合などは、時差 (タイムゾーン) を考慮する必要があるため注意する。

使用するクラス


use HTTP::Date;
#!/usr/bin/perl use LWP::UserAgent; use HTTP::Request; use HTTP::Date; # 初期化 my $html; my $timezone = 'JST'; my $url = 'https://www.yoursite.com/index.rdf'; my $rss = new XML::RSS; my $proxy = new LWP::UserAgent; # UseAgent の作成 my $req = new HTTP::Request(GET=>$url); my $res = $proxy->request($req); # $url にアクセスする my $xml = $res->content; # コンテンツ (この場合は RSS/XML) を取得 # RSS を解析 eval {
$rss->parse($xml);
}; if($@) {
# $rss->parse が失敗したとき
} # @{$rss->{items}} に、RSS のすべてのエントリー (item) が入る foreach my $item ( @{$rss->{items}} ) {
my $date        = HTTP::Date::str2time($item->{dc}->{date}, $timezone);

$html    .=    qq|<a href=$item->{link}>$item->{title}</a><br>\n|; # タイトルをリンクつきで出力
$html    .=    qq|$description<br>|    if $item->{description};    # 概要 (description) を出力
$html    .=    qq|[<a href=$item->{link}>続きを読む</a>]<hr size=1>\n|;
} print $html; 1;