楽天APIを使って楽天アイテムのURLから商品情報を取得するPerl
楽天の個別商品のURLからAPI経由で商品情報をゲットしたい。 例えば「http://item.rakuten.co.jp/shopcode/itemname」みたいな感じのURLから。 だけど、楽天ウェブサービスって、ショップのコードを指定して キーワードでアイテムを所得するAPIはあるんだけど、 ある特定のアイテムの情報をピンポイントで得ることはできないのね。 だから、ショップコードはURLから正規表現でとってきて、 キーワードはアイテムのページのタイトルタグからとってくる。 そんでもって検索APIにかければ、俺のやりたいことができた。 WebService::Rakuten使ってます。 こんな感じ。
#!/usr/bin/perl
use strict;
use WebService::Rakuten;
use LWP::Simple;
use HTML::TokeParser;
use Encode;
our $DEV_ID = 'YUORDEVELOPERID';
our $AFF_ID = 'YOURAFFILIATEID';
my $item = &rakuten_item_from_url("http://item.rakuten.co.jp/amexalpha/ca-sr-500gt/");
print $item->itemName;
sub rakuten_item_from_url {
my $url = shift;
my ($title, $shop_code, $keyword, $item);
#get shop code and keyword from title tag
$shop_code = $1 if $url =~ m!item.rakuten.co.jp/(.*?)/!;
my $content = get($url);
my $p = HTML::TokeParser->new(\$content);
$p->get_tag("title");
$title = $p->get_trimmed_text;
Encode::from_to($title,"euc-jp","utf-8");
$keyword = $1 if $title =~ m/【楽天市場】(.*?):.*/;
my $api = WebService::Rakuten->new(
dev_id => $DEV_ID,
aff_id => $AFF_ID,
);
my $res = $api->item_search(
$keyword,
{
shopCode => $shop_code,
hits => 1,
page => 1,
}
);
if ($res->status eq 'Success'){
return @{$res->items}[0];
}else{
return;
}
}
