このブログにAmazonのリンクを貼りたくなったので、ASINを入力するとAmazonから書籍のサムネイルや著者情報などを抜き出す機能を実装するために、Amazon Product Advertising APIを使ってみることにしました。
■ インストール
gemなので、コマンド一発です。
■ 基本設定とAPI呼び出し
require 'amazon/ecs'
Amazon::Ecs.options = {
:associate_tag => '[your associate tag]',
:AWS_access_key_id => '[your developer token]',
:AWS_secret_key => '[your secret access key]'
}
# API呼び出し
res = Amazon::Ecs.item_lookup("4088767624", :response_group => 'Small, ItemAttributes, Images', :country => 'jp')
# 返ってきたXMLを表示(res.doc.to_sでも多分OK)
puts res.marshal_dump
item_lookupメソッドに限りませんが、response_groupの設定は注意が必要です。Imagesを入れないとサムネイルのURLが、ItemAttributesを入れないと出版日などの情報が取れませんでした。
■ 情報の読込
適当に取り出しています。商品ページのURLがやたらと長くなってDBに入れたくない感じになったので、適当にURLを作ってしまいました。一応、タグが機能しているかAmazonアソシエイトのリンクの動作確認ツールで確認してあります。
amazon_tag = '[your associate tag]'
res.items.each do |item|
element = item.get_element('ItemAttributes')
data = {
:asin => item.get('ASIN'),
:title => element.get("Title"),
:page_url => "http://www.amazon.co.jp/dp/#{item.get('ASIN')}?tag=#{amazon_tag}",
:isbn => element.get("ISBN"),
:author => element.get_array("Author").join(", "),
:product_group => element.get("ProductGroup"),
:manufacturer => element.get("Manufacturer"),
:publication_date => element.get("PublicationDate"),
# URL, Width, Heightの要素を持っている
:small_image => item.get_hash("SmallImage"),
:medium_image => item.get_hash("MediumImage"),
:large_image => item.get_hash("LargeImage")
}
end
# dataを表示する(省略)
■ 結果
以下のような感じで表示してみました。皇国の守護者ですな。古い作品ですが、なんで打ち切りになってしまったのか・・・。この作家が今描いているシュトヘルも面白いんだけど、このころの勢いにはなかなか追いつかないしなぁ・・・。
[書籍データの取得に失敗しました]
■ 感想
プログラム的に難しい個所はありませんが、Amazon Product Advertising APIをある程度把握しておく必要があるでしょう。
APIの呼び出し回数の制限(1時間2000回? 収益による増減もあるので少し難しい)を考慮してキャッシュしたり、ProductGroupによってとれる情報が異なる(例:本では著者が取れるが、ゲームでは取れないなど)ので、そういった差異を吸収するような表示を検討したりと、ちゃんとしたものを作る場合はそれなりに手間がかかるかと思われます。
■ 参考情報