昨日ちょっと気になったので触ってみた。
ヘルパーがあるので
script/myapp_create.pl create model Net::Amazon Net::Amazon
でモデル作成。yamlに
Model::Net::Amazon:
token: 'amazon_token'
locale: 'jp'
を設定して、Root.pmに
sub default : Private {
my ( $self, $c ) = @_;
my $ua = $c->model('Net::Amazon');
my $response = $ua->search( asin => '4873112109' );
if ( $response->is_success ) {
$c->response->body( $response->as_string );
} else {
$c->response->body( $response->message );
}
}
で、ルートにアクセスすると
[1] マーク ルッツ/デイビッド アスカー, "初めてのPython 第2版", 2004, ¥ 5,040, 4873112109
と表示される。あとは/ASIN/XXXXXXのURLでJSON返すようにすればMochikit(javascript)からいい感じで扱えるはず。うーんナイス!
さらに、Net::Amazonはキャッシュが使えるのでCatalyst::Model::Net::Amazonでもキャッシュを効かせたい。C::M::Net::Amazonに直接書いた。
use Cache::File;
use base qw/ Catalyst::Model::Net::Amazon /;
my $cache = Cache::File->new(
cache_root => '/tmp/amazon_cache',
default_expires => '30 min',
);
__PACKAGE__->config(cache => $cache);
Net::AmazonがCache::Fileオブジェクトをとるので、このようにModelに直接書いたのだけど、cache_rootとかdefault_expiresを設定ファイルに追い出すことはできないのだろうか?