class AmazonPaApi::Operation
This is the parent class of every PA api Operations performed.¶ ↑
Constants
- API_VERSION
- END_POINTS
PA api end points.
PA api calls can be sent to any of 6 regions.
Attributes
body[R]
You can get PA api response via these.
header[R]
You can get PA api response via these.
operation[RW]
Subclass set this variables at initialize. String
- The name of operation you want to perform.
region[RW]
Subclass set this variables at initialize. String
- It will be use this to pick the right associates key up.
default is jp.
Public Class Methods
new()
click to toggle source
# File lib/amazon_pa_api/operations/operation.rb, line 38 def initialize self.class.const_get("REQUEST_PARAMETERS").each do |param| self.class.send(:attr_accessor, param) end end
Public Instance Methods
credentials=(access_key_id: '', secret_access_key: '', associate_tag:'' )
click to toggle source
You can set PA api credentials via this.
# File lib/amazon_pa_api/operations/operation.rb, line 50 def credentials=(access_key_id: '', secret_access_key: '', associate_tag:'' ) self.class.access_key_id = access_key_id self.class.secret_access_key = secret_access_key self.class.associate_tag = associate_tag end
get()
click to toggle source
Execute the request to Amazon.
# File lib/amazon_pa_api/operations/operation.rb, line 45 def get request end
Protected Instance Methods
params()
click to toggle source
It set instance variable from defined request parameters in subclass.
# File lib/amazon_pa_api/operations/operation.rb, line 62 def params self.class.const_get("REQUEST_PARAMETERS").inject({}) do |parameters, param| value = instance_variable_get("@#{param}") parameters[param.to_s.camel_case] = value unless value.nil? parameters end end
request_params()
click to toggle source
It set common query parameters as hash.
# File lib/amazon_pa_api/operations/operation.rb, line 71 def request_params parameters ={ "Service" => "AWSECommerceService", "Timestamp" => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"), "AWSAccessKeyId" => Operation.access_key_id.to_s, "AssociateTag" => Operation.associate_tag.to_s, "Operation" => self.operation, "Version" => API_VERSION, }.merge!(params) end
request_params_string()
click to toggle source
It sort and set all query parameters as string.
# File lib/amazon_pa_api/operations/operation.rb, line 83 def request_params_string request_params.sort.inject('') do |params_string, (k,v)| params_string += '&' unless params_string.size == 0 params_string += "#{k.to_s}=#{CGI.escape(v.to_s).gsub('+', '%20')}" params_string end end
Private Instance Methods
add_signature(unsigned_uri)
click to toggle source
it add signature parameter from uri
URI - To Amazon AWS ECommerce Service.
# File lib/amazon_pa_api/operations/operation.rb, line 95 def add_signature(unsigned_uri) signature = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new("sha256"), Operation.secret_access_key.to_s, "GET\n#{unsigned_uri.host}\n#{unsigned_uri.path}\n#{unsigned_uri.query}" ) signature = [signature].pack("m").chomp signature = URI.escape(signature, Regexp.new("[+=]")) URI.parse "#{unsigned_uri}&Signature=#{signature}" end
request()
click to toggle source
it add signature and requests Amazon via http.
# File lib/amazon_pa_api/operations/operation.rb, line 107 def request if self.class.access_key_id.nil? || self.class.secret_access_key.nil? || self.class.associate_tag.nil? raise "PA api requires AWS credentials. Please set access_key_id, secret_access_key and associate_tag, try again." end raise "Invalid region. region: #{self.region}" unless END_POINTS.include?(self.region) unsigned_uri = URI.parse("#{END_POINTS[self.region]}?#{request_params_string}") uri = add_signature(unsigned_uri) response = get_response uri @header = response.header @body = response.body response end