CDTubeではPlaggerで生成したRSSをフィードとして使っていたのだけども、仕様上、そうするとlinkがAmazonの商品ページへのURLになっていて、CDTubeのサイトには行かない。それじゃあ面白くないので、link先をCDTubeの映像があるページに移動させるようにした。Catalystのコントローラーでrssを作って吐き出す。XML::Feedを使って、
sub rss : Local {
my ($self,$c) = @_;
my $it = $c->model('Plagger::Entry')->search( {},{ order_by => 'cast(rate AS INTEGER) ASC',
});
my $feed = XML::Feed->new('RSS');
$feed->title( $c->config->{name} . ' RSS Feed' );
$feed->link( $c->request->base );
$feed->description('Mashup the Sing CD ranking with YouTube');
while( my $e = $it->next ) {
my $feed_entry = XML::Feed::Entry->new('RSS');
$feed_entry->title("No." . $e->rate . " " . $e->title . " by " . $e->author);
$feed_entry->link( $c->request->base . $e->rate );
$feed_entry->author( $e->author );
$feed->add_entry($feed_entry);
}
$c->res->content_type('application/rss+xml');
$c->res->body( $feed->as_xml );
}
ってな感じ。リンク先はその曲を先頭に以下それより順位が下の曲情報がでてくるという具合です(この辺も改善の余地はあるがとりあえず放置)。 rss.ttが無いとエラる。参考: Catalyst::Manual::Cookbook - Cooking with Catalyst - search.cpan.org
なのでフィードのURLが http://pulpsite.net/cdtube/rss に変更になりました。あ、date入れたいな。 ところで、100位の曲が2つあったり、取得できないエントリーがあったりとバグが結構あるね。

