=====
一年程前に、一定のURLでリクエストすると、xmlで情報が帰って来たので、これでやろうと思った。でもどういう訳か出来ない! どうやら、APIの仕様が変わり、timestampやら電子署名を追加して送らなくてはならないようだ。Amazonの"Signed Requests Helper"と言うサイトがあって、Access KeyとSecret Keyを入れれば、URLを作ってくれるサイトはあるのだが、これでははかどらない。仕方がないので、ググった結果、ruby-awsを使うことにした。
まず、ruby-awsのインストール。普通は、gem install ruby-awsで出来るはずなのだが、どうしても私の環境ではうまくいかない。(Mac OSX Snow Leopard, ruby 1.8.7, gem 1.3.1)
やむを得ず、ruby-awsのサイトからダウンロードし、直接、インストールをしてみた。
ダウンロードして、解凍後、ruby-aws-0.7.0の中にある、setup.rbを実行する。(INSTALLファイルを参照)
$ ruby setup.rb config $ ruby setup.rb setup # ruby setup.rb install
("#"のところは、ルート権限が必要な場合、sudo ruby setup.rb install)
次に、configファイルを作成。ユーザーのhomeで、下記の内容のファイルを作り、名前を".amazonrc"として保存。
[global] key_id = 'アクセスキー' secret_key_id = 'アクセスの秘密キー' associate = 'アソシエートのコード' locale = jp cache = true cache_dir = .
rubyのスクリプト(amazon_isbn.rb)は、こんな感じ。(エラー発生時の処理は書いていない)
require 'amazon/aws' require 'amazon/aws/search' isbn = ARGV.shift # 引数にISBNを入れる # 設定ファイルのデフォルトは /etc/amazonrc か ~/.amazonrc ENV['AMAZONRCDIR'] = '.' # 設定ファイルの位置を変えるときはこれ begin il = Amazon::AWS::ItemLookup.new('ISBN',{'ItemId' => isbn,'SearchIndex' => 'Books'}) rg = Amazon::AWS::ResponseGroup.new( 'Medium' ) req = Amazon::AWS::Search::Request.new() page = req.search(il, rg) print "ASIN = ", page.item_lookup_response.items.item.asin ,"\n" print "title = ", page.item_lookup_response.items.item.item_attributes.title,"\n" print "publisher = ", page.item_lookup_response.items.item.item_attributes.publisher,"\n" print "author = ", page.item_lookup_response.items.item.item_attributes.author,"\n" rescue SocketError => exp # ソケットエラーが出た場合は10秒待ってから、beginより再実行 print exp.backtrace ,"\n [", exp.message , "]\n" sleep 10 retry rescue => exp print exp.backtrace ,"\n class=", exp.class , "\n [", exp.message , "]\n" end
これで、例えばISBNコードが"4766924584"の書名、出版社、著者を引きたい時は、
$ ruby amazon_isbn.rb 4766924584 => ASIN = 4766924584 title = やっぱり北海道だべさ!!—内地の人にはわかんないっしょ publisher = 勁文社 author = 千石 涼太郎
と、結果が帰ってくる。
あとは、ISBNのリストを連続して、読み込み、テキストにはき出すところを書けば完成か。
次の二つのブログを参考にさせていただきました。ありがとうございます。
- rubyでamazonからISBNを検索
http://snjx.org/diary/snjx/034 - RailsでAmazonの商品を, 署名認証に対応した上で扱う
http://d.hatena.ne.jp/takkkun/20090617/1245232547
0 件のコメント:
コメントを投稿