Asamasi::RakuAPI
2006-10-21-1
[Programming][WebTool]
楽天市場非公式ウェブサービス RakuAPI (http://rakuapi.ddo.jp/)
を操作するPerlモジュール、Asamasi::RakuAPI を作ってみました。
使用は自己責任で。
- Asamasi::RakuAPI
http://ta2o.net/tools/pm/src/Asamasi-RakuAPI-0.1.tar.gz
同様のものは、すでに id:naoya による Webservice::RakuAPI
(http://d.hatena.ne.jp/naoya/20060926/1159263533) があります。
ただ、Net::Amazon [2006-10-17-2]みたいに Cache::File を渡して中で
キャッシュできるようにしたかったので、自分用モジュールとして車輪の
再発明。あと、RakuAPI からは XML ではなく TSV をもらってくるように
して、処理を単純化しています。入出力は utf8 です。
以下、SYNOPSISとサンプルプログラムを載せておきます。
SYNOPSIS:
サンプルプログラム:
実行結果(key=fujitsu):
を操作するPerlモジュール、Asamasi::RakuAPI を作ってみました。
使用は自己責任で。
- Asamasi::RakuAPI
http://ta2o.net/tools/pm/src/Asamasi-RakuAPI-0.1.tar.gz
同様のものは、すでに id:naoya による Webservice::RakuAPI
(http://d.hatena.ne.jp/naoya/20060926/1159263533) があります。
ただ、Net::Amazon [2006-10-17-2]みたいに Cache::File を渡して中で
キャッシュできるようにしたかったので、自分用モジュールとして車輪の
再発明。あと、RakuAPI からは XML ではなく TSV をもらってくるように
して、処理を単純化しています。入出力は utf8 です。
以下、SYNOPSISとサンプルプログラムを載せておきます。
SYNOPSIS:
use Asamasi::RakuAPI; my $ar = Asamasi::RakuAPI->new(affiliate_code => $acode); my $results_ref = $ar->search({key => $key, row => 3}); for (@{$results_ref}) { print $_->{Title}, $_->{Url}, ... } # "Cache::File" も使えます。 use Cache::File; my $cache = Cache::File->new(cache_root => "/var/tmp/cache", default_expires => '48 hours'); my $ar = Asamasi::RakuAPI->new(cache => $cache, affiliate_code => $acode);
サンプルプログラム:
#!/usr/bin/perl -T use strict; use warnings; use Cache::File; use HTML::Template; use CGI; use Asamasi::RakuAPI; my $q = CGI->new(); my $key = $q->param('key') || ""; my $acode = $q->param('acode') || "YOUR_AFFILIATE_CODE"; my $cache_root_root = "/var/tmp/cache"; my $cache_rakuapi = Cache::File->new(cache_root => $cache_root_root."/rakuapi", lock_level => Cache::File::LOCK_LOCAL(), default_expires => '48 hours'); my $araku = Asamasi::RakuAPI->new(cache => $cache_rakuapi, affiliate_code => $acode); my $results_ref = $araku->search({key => $key, row => 3}); my $template = join("", <DATA>); my $t = HTML::Template->new(scalarref => \$template, die_on_bad_params => 0); $t->param(results => $results_ref); print $q->header(-charset => 'UTF-8'), $t->output(); __DATA__ <TMPL_LOOP name=results> <div class="araku-item"> <TMPL_IF name=ThumbnailUrl><a href="<TMPL_VAR name=Url>" target="_blank" title="<TMPL_VAR name=Title>"><img class="araku-image" src="<TMPL_VAR name=ThumbnailUrl>" alt="<TMPL_VAR name=Title>"></a></TMPL_IF> <span class="araku-title"><a href="<TMPL_VAR name=Url>" target="_blank" title="<TMPL_VAR name=Title>"><TMPL_VAR name=Title></a></span> <span class="araku-price"><TMPL_VAR name=Price></span> <span class="araku-tax"><TMPL_VAR name=Tax></span> <span class="araku-shop"><a href="<TMPL_VAR name=ShopUrl>" target="_blank" title="<TMPL_VAR name=ShopName>"><TMPL_VAR name=ShopName></a></span> </div> </TMPL_LOOP>
実行結果(key=fujitsu):
この記事に言及しているこのブログ内の記事