ハテナのキーワードページのRSSはタイトルだけなので

Fastladder

http://d.hatena.ne.jp/keyworddiary/perl?mode=rss

を購買したんやけど、タイトルだけ表示であまりいけてないので、内容も含むようにRSSを修正したスクリプトを書いた。

http://nyankoro.com/hk.cgi

重いので、ファイルキャッシュした。dreamhost制約で、memcached,FastMmapとか使えないっぽいので。

#!/usr/bin/perl

use strict;
use warnings;
use URI;
use LWP::UserAgent;
use Web::Scraper;
use XML::RSS;
use CGI;
use Data::Dumper;
use Cache::File;

my $cache = Cache::File->new( cache_root => '/tmp/hk',
                                  default_expires => '3600 sec' );

print CGI->header(-type=> 'application/rss+xml' );
my $value = $cache->get( 'hk' );
if( defined $value ) {
    print $value;
}   
else {
    my $ua = LWP::UserAgent->new();
    my $response = $ua->get('http://d.hatena.ne.jp/keyworddiary/perl?mode=rss');
    my $hatena = scraper {
        process "div.body" ,
                description => 'HTML',
    };          
    
    if( $response->is_success ) {
        my $original_rss = $response->content;
        
        my $rss = XML::RSS->new();
        $rss->parse( $original_rss );

        foreach my $item ( @{ $rss->{items} } ) {
            my $res = $hatena->scrape( URI->new($item->{link}) );
            $item->{description} =  '<![CDATA[' . $res->{description} . ']]>';
        }
        $cache->set('hk', $rss->as_string );
        print $rss->as_string;

    }

}

追記

dreamhostのサーバやと、キャッシュしても重くてあかん。タイムアウトして読んでくれてない気がする。一回だけしか読み込み成功してない。orz