rubyでamazonAPIの検索URL生成

amazon検索のAPIの検索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

amazonAPIアクセスするにはキー取得が必要だったりして色々めんどい。
シークレットキーとアクセスキーIDの取得方法は
http://www.ajaxtower.jp/ecs/
にかいてある
Signature作るときにキーの順序をバイトコード順にしないといけなかった