rubyでamazonAPIの検索URL生成
require 'time' require 'openssl' require 'base64' require 'cgi' host = "ecs.amazonaws.jp" path = "/onca/xml" seckey = {シークレットキー} def build_params(params) res = "" params.keys.sort.each {|key| prefix = (res.length > 0 ? "&" : "") res += "#{prefix}#{key}=#{CGI.escape(params[key])}" } res end def create_timestamp Time.now.strftime("%Y-%m-%dT%H:%M:%SZ") end def create_signature(key, data) Base64.encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), key, data)).strip() end params = { :Service => "AWSECommerceService", :AWSAccessKeyId => {アクセスキーのID}, :AssociateTag => {なんたら-22みたいなやつ}, :Operation => "ItemSearch", :SearchIndex => "Books", :Title => "鳴子ハナハル", :Timestamp => create_timestamp(), :Version => "2010-09-01" } param_string = build_params(params) sign_string = "GET\n#{host}\n#{path}\n#{param_string}" signature = create_signature(seckey, sign_string) url = "http://#{host}#{path}?#{param_string}&Signature=#{CGI.escape(signature)}" p url
amazonのAPIアクセスするにはキー取得が必要だったりして色々めんどい。
シークレットキーとアクセスキーIDの取得方法は
http://www.ajaxtower.jp/ecs/
にかいてある
Signature作るときにキーの順序をバイトコード順にしないといけなかった