XML::RSSで取ってきてHTML::Templateで出力するのメモ

LWPでダウンロードした文字列を、
utf8::encode($content)
しないと文字化けする。

use strict;
use warnings;
use HTML::Template;
use LWP::UserAgent;
use XML::RSS;
use CGI qw/:standard/;

#HTTP通信でダウンロード
my $ua = LWP::UserAgent->new;
my $result = $ua->get('http://hogehoge.hoge.hoge/index.rdf');
my $content = $result->content;

#UTF8フラグを落とす
utf8::encode($content);

#RSSパーズ
my $rss = new XML::RSS;
$rss->parse( $content );
my $hoge;
foreach my $item (@{$rss->{'items'}}) {
	$hoge = $item->{'title'};
}

my $html = HTML::Template->new( filename => 'hoge.tmpl' );
$html->param( 'HOGE' => $hoge );

print header(-charset=>'utf8');
print $html->output;

なお、tmplファイルはUTF8で保存されているとする。

ついでに、テンプレートでで繰り返しフォーマットを出力するときに参照されるオブジェクトの設定は、

foreach $hoge (@hoges){
	my $item = {
	    FOO       => "foo".$hoge,
	    BAR       => "bar".$hoge,
	    BOO       => "boo".$hoge,
	};
    push( @items, $item );
}

#さらに[]でかこんであげる
my $loopobj= [@items];  
my $html = HTML::Template->new( filename => 'hoge.tmpl' );
$html->param( 'ITEMS' => $loopobj );

    • -

5/27 【追記】いろいろバグっていたので修正