amazon-mws 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/.gitignore +1 -0
  2. data/README.markdown +31 -0
  3. data/Rakefile +14 -0
  4. data/VERSION +1 -0
  5. data/amazon-mws.gemspec +164 -0
  6. data/examples/xml/cancel_feed_submissions.xml +16 -0
  7. data/examples/xml/cancel_report_requests.xml +18 -0
  8. data/examples/xml/error.xml +10 -0
  9. data/examples/xml/get_feed_submission_count.xml +10 -0
  10. data/examples/xml/get_feed_submission_list.xml +16 -0
  11. data/examples/xml/get_feed_submission_list_by_next_token.xml +16 -0
  12. data/examples/xml/get_feed_submission_result.xml +30 -0
  13. data/examples/xml/get_report_count.xml +9 -0
  14. data/examples/xml/get_report_list.xml +17 -0
  15. data/examples/xml/get_report_request_count.xml +8 -0
  16. data/examples/xml/get_report_request_list.xml +120 -0
  17. data/examples/xml/get_report_request_list_by_next_token.xml +20 -0
  18. data/examples/xml/get_report_schedule_count.xml +10 -0
  19. data/examples/xml/get_report_schedule_list.xml +15 -0
  20. data/examples/xml/get_report_schedule_list_by_next_token.xml +15 -0
  21. data/examples/xml/manage_report_schedule.xml +14 -0
  22. data/examples/xml/request_report.xml +17 -0
  23. data/examples/xml/submit_feed.xml +14 -0
  24. data/examples/xml/update_report_acknowledgements.xml +18 -0
  25. data/examples/xsd/Inventory.xsd +49 -0
  26. data/examples/xsd/Item.xsd +285 -0
  27. data/examples/xsd/Listings.xsd +32 -0
  28. data/examples/xsd/OrderAcknowledgement.xsd +55 -0
  29. data/examples/xsd/OrderAdjustment.xsd +94 -0
  30. data/examples/xsd/OrderFulfillment.xsd +57 -0
  31. data/examples/xsd/Override.xsd +48 -0
  32. data/examples/xsd/Price.xsd +59 -0
  33. data/examples/xsd/ProcessingReport.xsd +87 -0
  34. data/examples/xsd/Product.xsd +220 -0
  35. data/examples/xsd/Product/AutoAccessory.xsd +807 -0
  36. data/examples/xsd/Product/Beauty.xsd +114 -0
  37. data/examples/xsd/Product/CE.xsd +544 -0
  38. data/examples/xsd/Product/CameraPhoto.xsd +2410 -0
  39. data/examples/xsd/Product/FoodAndBeverages.xsd +270 -0
  40. data/examples/xsd/Product/Gourmet.xsd +85 -0
  41. data/examples/xsd/Product/Health.xsd +189 -0
  42. data/examples/xsd/Product/Home.xsd +654 -0
  43. data/examples/xsd/Product/Jewelry.xsd +603 -0
  44. data/examples/xsd/Product/Miscellaneous.xsd +157 -0
  45. data/examples/xsd/Product/MusicalInstruments.xsd +853 -0
  46. data/examples/xsd/Product/Office.xsd +550 -0
  47. data/examples/xsd/Product/PetSupplies.xsd +40 -0
  48. data/examples/xsd/Product/ProductClothing.xsd +197 -0
  49. data/examples/xsd/Product/SWVG.xsd +238 -0
  50. data/examples/xsd/Product/Sports.xsd +308 -0
  51. data/examples/xsd/Product/TiresAndWheels.xsd +159 -0
  52. data/examples/xsd/Product/Tools.xsd +66 -0
  53. data/examples/xsd/Product/ToysBaby.xsd +241 -0
  54. data/examples/xsd/Product/Wireless.xsd +77 -0
  55. data/examples/xsd/ProductImage.xsd +39 -0
  56. data/examples/xsd/Relationship.xsd +47 -0
  57. data/examples/xsd/SettlementReport.xsd +158 -0
  58. data/examples/xsd/amzn-base.xsd +1601 -0
  59. data/examples/xsd/amzn-envelope.xsd +98 -0
  60. data/examples/xsd/amzn-header.xsd +45 -0
  61. data/lib/amazon/mws.rb +86 -0
  62. data/lib/amazon/mws/authentication.rb +9 -0
  63. data/lib/amazon/mws/authentication/query_string.rb +28 -0
  64. data/lib/amazon/mws/authentication/signature.rb +43 -0
  65. data/lib/amazon/mws/base.rb +61 -0
  66. data/lib/amazon/mws/connection.rb +99 -0
  67. data/lib/amazon/mws/connection/management.rb +94 -0
  68. data/lib/amazon/mws/connection/request_builder.rb +67 -0
  69. data/lib/amazon/mws/exceptions.rb +80 -0
  70. data/lib/amazon/mws/feed.rb +223 -0
  71. data/lib/amazon/mws/feed_builder.rb +67 -0
  72. data/lib/amazon/mws/feed_enumerations.rb +46 -0
  73. data/lib/amazon/mws/feed_submission.rb +14 -0
  74. data/lib/amazon/mws/lib/extensions.rb +162 -0
  75. data/lib/amazon/mws/lib/memoizable.rb +10 -0
  76. data/lib/amazon/mws/orders.rb +9 -0
  77. data/lib/amazon/mws/report.rb +310 -0
  78. data/lib/amazon/mws/report_enumerations.rb +44 -0
  79. data/lib/amazon/mws/report_info.rb +16 -0
  80. data/lib/amazon/mws/report_request.rb +19 -0
  81. data/lib/amazon/mws/report_schedule.rb +13 -0
  82. data/lib/amazon/mws/response.rb +32 -0
  83. data/lib/amazon/mws/response/cancel_feed_submissions_response.rb +14 -0
  84. data/lib/amazon/mws/response/cancel_report_requests_response.rb +14 -0
  85. data/lib/amazon/mws/response/get_feed_submission_count_response.rb +13 -0
  86. data/lib/amazon/mws/response/get_feed_submission_list_by_next_token_response.rb +15 -0
  87. data/lib/amazon/mws/response/get_feed_submission_list_response.rb +15 -0
  88. data/lib/amazon/mws/response/get_feed_submission_result_response.rb +54 -0
  89. data/lib/amazon/mws/response/get_report_count_response.rb +13 -0
  90. data/lib/amazon/mws/response/get_report_list_response.rb +15 -0
  91. data/lib/amazon/mws/response/get_report_request_count_response.rb +13 -0
  92. data/lib/amazon/mws/response/get_report_request_list_by_next_token_response.rb +15 -0
  93. data/lib/amazon/mws/response/get_report_request_list_response.rb +15 -0
  94. data/lib/amazon/mws/response/get_report_schedule_count_response.rb +13 -0
  95. data/lib/amazon/mws/response/get_report_schedule_list_by_next_token_response.rb +15 -0
  96. data/lib/amazon/mws/response/get_report_schedule_list_response.rb +15 -0
  97. data/lib/amazon/mws/response/manage_report_schedule_response.rb +14 -0
  98. data/lib/amazon/mws/response/request_report_response.rb +14 -0
  99. data/lib/amazon/mws/response/response_error.rb +15 -0
  100. data/lib/amazon/mws/response/submit_feed_response.rb +13 -0
  101. data/lib/amazon/mws/response/update_reports_acknowledgements_response.rb +14 -0
  102. data/lib/amazon/mws/version.rb +12 -0
  103. data/pkg/amazon-mws-0.1.0.gem +0 -0
  104. data/test/authentication_test.rb +15 -0
  105. data/test/connection_test.rb +5 -0
  106. data/test/feed_builder_test.rb +15 -0
  107. data/test/feed_submission_test.rb +32 -0
  108. data/test/feed_test.rb +64 -0
  109. data/test/query_string_test.rb +21 -0
  110. data/test/report_test.rb +29 -0
  111. data/test/request_test.rb +18 -0
  112. data/test/response_test.rb +197 -0
  113. data/test/signature_test.rb +30 -0
  114. data/test/test_config.yml +5 -0
  115. data/test/test_helper.rb +22 -0
  116. metadata +179 -0
@@ -0,0 +1,94 @@
1
+ class Amazon::MWS::Connection
2
+
3
+ module Management #:nodoc:
4
+ def self.included(base)
5
+ base.cattr_accessor :connections
6
+ base.connections = {}
7
+ base.extend ClassMethods
8
+ end
9
+
10
+ # Manage the creation and destruction of connections for Amazon::MWS::Base and its subclasses. Connections are
11
+ # created with establish_connection!.
12
+ module ClassMethods
13
+ # Creates a new connection with which to make requests to the S3 servers for the calling class.
14
+ #
15
+ # Amazon::MWS::Base.establish_connection!(
16
+ # :access_key_id => '...',
17
+ # :secret_access_key => '...',
18
+ # :merchant_id => '...',
19
+ # :marketplace_id => '...'
20
+ # )
21
+ #
22
+ # == Required arguments
23
+ #
24
+ # * <tt>:access_key_id</tt> - The access key id for your S3 account. Provided by Amazon.
25
+ # * <tt>:secret_access_key</tt> - The secret access key for your S3 account. Provided by Amazon.
26
+ # * <tt>:merchant_id</tt>
27
+ # * <tt>:marketplace_id</tt>
28
+ #
29
+ # If any of these required arguments is missing, a MissingAccessKey exception will be raised.
30
+ #
31
+ # == Optional arguments
32
+ #
33
+ # * <tt>:server</tt> - The server to make requests to. You can use this to specify your bucket in the subdomain,
34
+ # or your own domain's cname if you are using virtual hosted buckets. Defaults to <tt>mws.amazonaws.com</tt>.
35
+ # will be implicitly set to 443, unless specified otherwise. Defaults to false.
36
+ # * <tt>:persistent</tt> - Whether to use a persistent connection to the server. Having this on provides around a two fold
37
+ # performance increase but for long running processes some firewalls may find the long lived connection suspicious and close the connection.
38
+ # If you run into connection errors, try setting <tt>:persistent</tt> to false. Defaults to false.
39
+ #
40
+ def establish_connection!(options = {})
41
+ # After you've already established the default connection, just specify
42
+ # the difference for subsequent connections
43
+ #options = default_connection.options.merge(options) if connected?
44
+ connections[connection_name] = Amazon::MWS::Connection.connect(options)
45
+ end
46
+
47
+ # Returns the connection for the current class, or Base's default connection if the current class does not
48
+ # have its own connection.
49
+ #
50
+ # If not connection has been established yet, NoConnectionEstablished will be raised.
51
+ def connection
52
+ if connected?
53
+ connections[connection_name] || default_connection
54
+ else
55
+ raise Amazon::MWS::NoConnectionEstablished.new
56
+ end
57
+ end
58
+
59
+ # Returns true if a connection has been made yet.
60
+ def connected?
61
+ !connections.empty?
62
+ end
63
+
64
+ # Removes the connection for the current class. If there is no connection for the current class, the default
65
+ # connection will be removed.
66
+ def disconnect(name = connection_name)
67
+ name = default_connection unless connections.has_key?(name)
68
+ connection = connections[name]
69
+ connection.http.finish if connection.persistent?
70
+ connections.delete(name)
71
+ end
72
+
73
+ # Clears *all* connections, from all classes, with prejudice.
74
+ def disconnect!
75
+ connections.each_key {|connection| disconnect(connection)}
76
+ end
77
+
78
+ private
79
+ def connection_name
80
+ name
81
+ end
82
+
83
+ def default_connection_name
84
+ 'Amazon::MWS::Base'
85
+ end
86
+
87
+ def default_connection
88
+ connections[default_connection_name]
89
+ end
90
+ end
91
+ end
92
+
93
+ end
94
+
@@ -0,0 +1,67 @@
1
+ class Amazon::MWS::Connection
2
+ class RequestBuilder
3
+ attr_accessor :request
4
+
5
+ def initialize(verb, path, body = nil)
6
+ # Create the request object
7
+ @request = request_method(verb).new(path)
8
+ process_body(body)
9
+ end
10
+
11
+ def request_method(verb)
12
+ Net::HTTP.const_get(verb.to_s.capitalize)
13
+ end
14
+
15
+ def process_body(body)
16
+ @request.content_length = 0 and return self if body.nil?
17
+
18
+ if body.respond_to?(:read)
19
+ @request.body_stream = body
20
+ else
21
+ @request.body = body
22
+ end
23
+
24
+ @request.content_length = body.respond_to?(:lstat) ? body.stat.size : body.size
25
+ return self
26
+ end
27
+
28
+ # For the SubmitFeed (p. 41) function, we require that you pass the Content-MD5 HTTP header,
29
+ # which contains the MD5 hash of the HTTP entity body (see Section 14.15 of RFC 2616, the HTTP/1.1
30
+ # specification), so we can check if the feed we stored for processing is bit for bit identical with what you
31
+ # sent, protecting you from corrupted descriptive or pricing product data appearing on Amazon.com.
32
+ #
33
+ def add_host
34
+ @request['Host'] = Amazon::MWS::DEFAULT_HOST
35
+ return self
36
+ end
37
+
38
+ def add_user_agent
39
+ @request['User-Agent'] = "Amazon::MWS/#{Amazon::MWS::Version} (Language=Ruby)"
40
+ return self
41
+ end
42
+
43
+ def add_content_type
44
+ # nothing happening yet
45
+ return self
46
+ end
47
+
48
+ def add_content_md5(body = "")
49
+ @request['Content-MD5'] = Base64.encode64(create_md5(body))
50
+ return self # chainable
51
+ end
52
+
53
+ # think about chaining this with process_body
54
+ def create_md5(body)
55
+ md5 = Digest::MD5.new
56
+
57
+ # stream from file or in memory?
58
+ if body.respond_to?(:read)
59
+ digest = body.each { |line| md5.update(line) }
60
+ else
61
+ digest = md5.update(body)
62
+ end
63
+
64
+ return digest.hexdigest
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,80 @@
1
+ module Amazon
2
+ module MWS
3
+
4
+ # Abstract super class of all Amazon::MWS exceptions
5
+ class MWSException < StandardError
6
+ end
7
+
8
+ # Abstract super class for all invalid options.
9
+ class InvalidOption < MWSException
10
+ end
11
+
12
+ class InvalidMessageType < MWSException
13
+ end
14
+
15
+ class InvalidReportType < MWSException
16
+ end
17
+
18
+ class InvalidSchedule < MWSException
19
+ end
20
+
21
+ class MissingConnectionOptions < MWSException
22
+ end
23
+
24
+ # All responses with a code between 300 and 599 that contain an <Error></Error> body are wrapped in an
25
+ # ErrorResponse which contains an Error object. This Error class generates a custom exception with the name
26
+ # of the xml Error and its message. All such runtime generated exception classes descend from ResponseError
27
+ # and contain the ErrorResponse object so that all code that makes a request can rescue ResponseError and get
28
+ # access to the ErrorResponse.
29
+ # class ResponseError < MWSException
30
+ # def initialize(formatted_response)
31
+ # instance_eval(<<-EVAL, __FILE__, __LINE__)
32
+ # def request_id
33
+ # '#{formatted_response["RequestID"]}'
34
+ # end
35
+ # EVAL
36
+ #
37
+ # formatted_response["Error"].each do |key, value|
38
+ # instance_eval(<<-EVAL, __FILE__, __LINE__)
39
+ # def #{key.underscore}
40
+ # '#{value}'
41
+ # end
42
+ # EVAL
43
+ # end
44
+ # end
45
+ # end
46
+
47
+ class RequestTimeout < ResponseError
48
+ end
49
+
50
+ # Most ResponseError's are created just time on a need to have basis, but we explicitly define the
51
+ # InternalError exception because we want to explicitly rescue InternalError in some cases.
52
+ class InternalError < ResponseError
53
+ end
54
+
55
+ # Raised if an unrecognized option is passed when establishing a connection.
56
+ class InvalidConnectionOption < InvalidOption
57
+ def initialize(invalid_options)
58
+ message = "The following connection options are invalid: #{invalid_options.join(', ')}. " +
59
+ "The valid connection options are: #{Connection::Options::VALID_OPTIONS.join(', ')}."
60
+ super(message)
61
+ end
62
+ end
63
+
64
+ # Raised if either the access key id or secret access key arguments are missing when establishing a connection.
65
+ class MissingAccessKey < InvalidOption
66
+ def initialize(missing_keys)
67
+ key_list = missing_keys.map {|key| key.to_s}.join(' and the ')
68
+ super("You did not provide both required access keys. Please provide the #{key_list}.")
69
+ end
70
+ end
71
+
72
+ # Raised if a request is attempted before any connections have been established.
73
+ class NoConnectionEstablished < MWSException
74
+ def initialize
75
+ super("\nPlease use Amazon::MWS::Base.establish_connection! before making API calls.")
76
+ end
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,223 @@
1
+ module Amazon
2
+ module MWS
3
+
4
+ module Feed
5
+ include Enumerations
6
+ # class << self
7
+ # The SubmitFeed operation uploads a file for processing together with
8
+ # the necessary metadata to process the file.
9
+
10
+ # Amazon MWS limits calls to 1,000 total calls per hour per seller
11
+ # account. For best performance, you should limit your calls to
12
+ # SubmitFeed to no more than three feeds per hour per seller account,
13
+ # although you can successfully call SubmitFeed up to 30 times per
14
+ # hour. Feed size is limited to 2,147,483,647 bytes (2^32 -1) per
15
+ # feed.
16
+
17
+ def submit_feed(feed_type, message_type, message = {})
18
+ message_type= message_type.to_s.camelize
19
+ raise InvalidMessageType if !MESSAGE_TYPES.include?(message_type)
20
+
21
+ body = Amazon::MWS::FeedBuilder.new(message_type, message)
22
+
23
+ response =
24
+ post("/", {
25
+ "Action" => "SubmitFeed",
26
+ "FeedType" => FEED_TYPES[feed_type]
27
+ }, body)
28
+
29
+ result = SubmitFeedResponse.format(response)
30
+ end
31
+
32
+ alias_method :submit, :submit_feed
33
+
34
+ # The GetFeedSubmissionList operation returns the total list of feed
35
+ # submissions within the previous 90 days that match the query
36
+ # parameters. Amazon MWS limits calls to 1,000 total calls per hour
37
+ # per seller account, including calls to GetFeedSubmissionList.
38
+ #
39
+ # The maximum number of results that will be returned in one call is
40
+ # one hundred. If there are additional results to return, HasNext will
41
+ # be returned in the response with a true value. To retrieve all the
42
+ # results, you can use the value of the NextToken parameter to call
43
+ # GetFeedSubmissionListByNextToken until HasNext is false.
44
+
45
+ # Optional Request Parameters
46
+ # ------------------
47
+ # FeedSubmissionIdList
48
+ # A structured list of feed submission IDs. If you pass in explicit
49
+ # IDs in this call, the other conditions, if specified, will be
50
+ # ignored.
51
+
52
+ # MaxCount
53
+ # Maximum number of feed submissions to return in the list. If you
54
+ # specify a number greater than 100, the call will be rejected.
55
+
56
+ # FeedTypeList
57
+ # A structured list of one or more FeedType constants by which to
58
+ # filter feed submissions.
59
+
60
+ # FeedProcessingStatusList
61
+ # A structured list of one or more feed processing statuses by which
62
+ # to filter feed submissions. Valid values are:
63
+ #
64
+ # _SUBMITTED_
65
+ # _IN_PROGRESS_
66
+ # _CANCELLED_
67
+ # _DONE_
68
+
69
+ # SubmittedFromDate
70
+ # The earliest submission date you are looking for, in ISO8601 date
71
+ # format (for example, "2008-07-03T18:12:22Z" or
72
+ # "2008-07-03T18:12:22.093-07:00").
73
+
74
+ # SubmittedToDate
75
+ # The latest submission date you are looking for, in ISO8601 date
76
+ # format (for example, "2008-07-03T18:12:22Z" or
77
+ # "2008-07-03T18:12:22.093-07:00").
78
+
79
+ def get_feed_submission_list(params = {})
80
+ response =
81
+ get("/", {"Action" => "GetFeedSubmissionList"}.merge(params))
82
+
83
+ result = GetFeedSubmissionListResponse.format(response)
84
+ end
85
+
86
+ alias_method :feed_submission_list, :get_feed_submission_list
87
+
88
+ # The GetFeedSubmissionListByNextToken operation returns a list of
89
+ # feed submissions that match the query parameters, using the
90
+ # NextToken, which was supplied by a previous call to either
91
+ # GetFeedSubmissionListByNextToken or a call to GetFeedSubmissionList,
92
+ # where the value of HasNext was true in that previous call.
93
+ #
94
+ # Request Parameters
95
+ # ------------------
96
+ # NextToken
97
+ # Token returned in a previous call to either GetFeedSubmissionList or
98
+ # GetFeedSubmissionListByNextToken when the value of HasNext was true.
99
+ def get_feed_submission_list_by_next_token(next_token)
100
+ response =
101
+ get("/", {
102
+ "Action" => "GetFeedSubmissionListByNextToken",
103
+ "NextToken" => next_token
104
+ })
105
+
106
+ GetFeedSubmissionListByNextTokenResponse.format(response)
107
+ end
108
+
109
+ alias_method :feed_submission_list_by_next_token, :get_feed_submission_list_by_next_token
110
+
111
+ # The GetFeedsubmissionCount operation returns a count of the total
112
+ # number of feed submissions within the previous 90 days.
113
+ #
114
+ # Optional Request Parameters
115
+ # ------------------
116
+ # FeedTypeList
117
+ # A structured list of one or more FeedType constants by which to
118
+ # filter feed submissions.
119
+
120
+ # FeedProcessingStatusList
121
+ # A structured list of one or more feed processing statuses by which
122
+ # to filter feed submissions. Valid values are:
123
+ #
124
+ # _SUBMITTED_
125
+ # _IN_PROGRESS_
126
+ # _CANCELLED_
127
+ # _DONE_
128
+
129
+ # SubmittedFromDate
130
+ # The earliest submission date you are looking for, in ISO8601 date
131
+ # format (for example, "2008-07-03T18:12:22Z" or
132
+ # "2008-07-03T18:12:22.093-07:00").
133
+
134
+ # SubmittedToDate
135
+ # The latest submission date you are looking for, in ISO8601 date
136
+ # format (for example, "2008-07-03T18:12:22Z" or
137
+ # "2008-07-03T18:12:22.093-07:00").
138
+
139
+ def get_feed_submission_count(params = {})
140
+ response =
141
+ get("/", {"Action" => "GetFeedSubmissionCount"}.merge(params))
142
+
143
+ GetFeedSubmissionCountResponse.format(response)
144
+ end
145
+
146
+ alias_method :feed_submission_count, :get_feed_submission_count
147
+
148
+
149
+ # The CancelFeedSubmissions operation cancels one or more feed
150
+ # submissions, returning the count of the canceled feed submissions
151
+ # and the feed submission information. You can specify a number to
152
+ # cancel of greater than one hundred, but information will only be
153
+ # returned about the first one hundred feed submissions in the list.
154
+ # To return metadata about a greater number of canceled feed
155
+ # submissions, you can call GetFeedSubmissionList. If feeds have
156
+ # already begun processing, they cannot be canceled.
157
+
158
+ # Amazon MWS limits calls to 1,000 total calls per hour per seller
159
+ # account, including calls to CancelFeedSubmissions.
160
+
161
+ # Optional Request Parameters
162
+ # ------------------
163
+ # FeedSubmissionIdList
164
+ # A structured list of feed submission IDs. If you pass in explicit
165
+ # IDs in this call, the other conditions, if specified, will be
166
+ # ignored.
167
+
168
+ # FeedTypeList
169
+ # A structured list of one or more FeedType constants by which to
170
+ # filter feed submissions.
171
+
172
+ # SubmittedFromDate
173
+ # The earliest submission date you are looking for, in ISO8601 date
174
+ # format (for example, "2008-07-03T18:12:22Z" or
175
+ # "2008-07-03T18:12:22.093-07:00").
176
+
177
+ # SubmittedToDate
178
+ # The latest submission date you are looking for, in ISO8601 date
179
+ # format (for example, "2008-07-03T18:12:22Z" or
180
+ # "2008-07-03T18:12:22.093-07:00").
181
+
182
+ def cancel_feed_submissions(params = {})
183
+ response =
184
+ get("/", {"Action" => "CancelFeedSubmissions"}.merge(params))
185
+
186
+ CancelFeedSubmissionsResponse.format(response)
187
+ end
188
+
189
+ # The GetFeedSubmissionResult operation returns the feed processing
190
+ # report and the Content-MD5 header for the returned body.
191
+
192
+ # You should compute the MD5 hash of the HTTP body that we returned to
193
+ # you, and compare that with the Content-MD5 header value that we
194
+ # returned. If they do not match, which means the body was corrupted
195
+ # during transmission, you should discard the result and automatically
196
+ # retry the call for up to three more times. Please notify us if you
197
+ # ever see such a corrupted body. You can contact us by using the
198
+ # contact form at http://mws.amazon.com (http://mws.amazon.com). For
199
+ # more information on computing the MD5, see Using the Content-MD5
200
+ # Header with SubmitFeed.
201
+
202
+ # FeedSubmissionId
203
+ # The identifier of the feed submission to get results for. Obtained
204
+ # by a call to GetFeedSubmissionList.
205
+
206
+ def get_feed_submission_result(feed_submission_id)
207
+ response =
208
+ get("/", {
209
+ "Action" => "GetFeedSubmissionResult",
210
+ "FeedSubmissionId" => feed_submission_id
211
+ }.merge(params))
212
+
213
+ GetFeedSubmissionResultResponse.format(response)
214
+ end
215
+
216
+ alias_method :feed_submission_result, :get_feed_submission_result
217
+ end
218
+
219
+ # end
220
+ # Feed
221
+
222
+ end
223
+ end