# amazon_paapi.rb $Revision: 3 $

require 'uri'
require 'time'
require 'digest/sha2'

@amazon_subscription_id = '' # <= Your Access Key ID
@amazon_secret_key = '' # <= Your Secret Access Key

module HMAC
	IPAD = "\x36" * 64
	OPAD = "\x5c" * 64

	module_function

	def sha256( key, message )
		ikey = IPAD.dup
		okey = OPAD.dup
		key.size.times do |i|
			ikey[i] = key[i] ^ IPAD[i]
			okey[i] = key[i] ^ OPAD[i]
		end

		value = Digest::SHA256.digest( ikey + message )
		value = Digest::SHA256.digest( okey + value )
		[value].pack( "m" ).chomp
	end
end

def amazon_call_ecs( asin, id_type, country = nil )
	aid =  @conf['amazon.aid'] || ''
	aid = 'cshs-22' if aid.empty?

	uri = URI.parse( @amazon_ecs_url_hash ? @amazon_ecs_url_hash[country] : @amazon_ecs_url )
	qs = []
	qs << "Service=AWSECommerceService"
	qs << "AWSAccessKeyId=#{@amazon_subscription_id}"
	qs << "AssociateTag=#{aid}"
	qs << "Operation=ItemLookup"
	qs << "ItemId=#{asin}"
	qs << "IdType=#{id_type}"
	qs << "SearchIndex=Books" if id_type == 'ISBN'
	qs << "ResponseGroup=Medium"
	qs << "Version=#{@amazon_require_version}"
	qs << "Timestamp=#{u( Time.now.xmlschema )}"
	qs.sort!

	message = ['GET', uri.host, uri.path, qs*'&']*"\n"
	qs << "Signature=#{u( HMAC::sha256( @amazon_secret_key, message ) )}"
	
	url = uri.to_s + '?' + qs*'&'

	proxy = @conf['proxy']
	proxy = 'http://' + proxy if proxy
	timeout( 10 ) do
		open( url, :proxy => proxy ) {|f| f.read }
	end
end
