目次
MWSとは?
https://developer.amazonservices.jp/
AmazonマーケットプレイスWebサービス(MWS)は、統合WebサービスAPIであり、Amazonの出品者がプログラムを使用して、出品、注文、支払い、レポート、その他についてデータを交換できるよう支援するものです。
簡単に言うとAmazonの商品データや注文データを自作のツールで取扱いしやすい形で提供してくれるAPIです。
AmazonのAPIは二種類存在しており、MWSはその中でも出品者向けのAPIになります。対になるもう一つのAPIはProduct Advertising API(PA-API)と言い、アフィリエイター向けのAPIです。
Pythonのrequestsを使ったMWSサンプルコード
import base64
import datetime
import hashlib
import hmac
import urllib.parse
import requests
import six
AMAZON_CREDENTIAL = {
'SELLER_ID': '★',
'ACCESS_KEY_ID': '★',
'ACCESS_SECRET': '★',
}
DOMAIN = 'mws.amazonservices.jp'
ENDPOINT = '/Products/2011-10-01'
#Idlistは最大5 回復レートは5商品/秒 最大20リクエスト 1時間あたり18000
def GetMatchingProductForId(IdList):
q= {
'Action': 'GetMatchingProductForId',
'MarketplaceId': 'A1VC38T7YXB528',
'Version': '2011-10-01',
'IdType': 'ASIN',
}
[q.update({'IdList.Id.' + str(i + 1):Id}) for i,Id in enumerate(IdList)]
return q
#Idlistは最大20 回復レートは10商品/秒 最大20リクエスト 時間最大36000リクエスト
#新品のカートボックス価格と中古のカートボックス価格を返す
def GetCompetitivePricingForASIN(IdList):
q= {
'Action': 'GetCompetitivePricingForASIN',
'MarketplaceId': 'A1VC38T7YXB528',
'Version': '2011-10-01',
}
[q.update({'ASINList.ASIN.' + str(i + 1):Id}) for i,Id in enumerate(IdList)]
return q
#Idlistは最大20 回復レートは10商品/秒 最大20リクエスト 時間最大36000リクエスト
#最低価格
#ItemCondition値:#New #Used #Collectible #Refurbished #Club #デフォルト:All
def GetLowestOfferListingsForASIN(IdList,ItemCondition='New',ExcludeMe=True):
q= {
'Action': 'GetLowestOfferListingsForASIN',
'MarketplaceId': 'A1VC38T7YXB528',
'Version': '2011-10-01',
'ItemCondition': ItemCondition,
'ExcludeMe': ExcludeMe
}
[q.update({'ASINList.ASIN.' + str(i + 1):Id}) for i,Id in enumerate(IdList)]
return q
#Idlistは最大20 回復レートは1リクエスト/5秒 最大20リクエスト 時間最大720リクエスト
def ListMatchingProducts(Query,QueryContextId='All'):
q= {
'Action': 'ListMatchingProducts',
'MarketplaceId': 'A1VC38T7YXB528',
'Version': '2011-10-01',
'Query': Query,
'QueryContextId': QueryContextId
}
return q
#最大20 回復レートは1リクエスト/5秒 最大20リクエスト 時間最大720リクエスト
def GetProductCategoriesForASIN(ASIN):
q= {
'Action': 'GetProductCategoriesForASIN',
'MarketplaceId': 'A1VC38T7YXB528',
'Version': '2011-10-01',
'ASIN': ASIN
}
return q
def PostMWS(q):
timestamp = datetime_encode(datetime.datetime.utcnow())
last_update_after = datetime_encode(
datetime.datetime.utcnow() - datetime.timedelta(days=1)
)
data = {
'AWSAccessKeyId': AMAZON_CREDENTIAL['ACCESS_KEY_ID'],
'MarketplaceId': 'A1VC38T7YXB528',
'SellerId': AMAZON_CREDENTIAL['SELLER_ID'],
'SignatureMethod': 'HmacSHA256',
'SignatureVersion': '2',
'Timestamp': timestamp,
}
data.update(q)
query_string = urllib.parse.urlencode(sorted(data.items()))
canonical = "{}n{}n{}n{}".format(
'POST', DOMAIN, ENDPOINT, query_string
)
h = hmac.new(
six.b(AMAZON_CREDENTIAL['ACCESS_SECRET']),
six.b(canonical), hashlib.sha256
)
signature = urllib.parse.quote(base64.b64encode(h.digest()), safe='')
url = 'https://{}{}?{}&Signature={}'.format(
DOMAIN, ENDPOINT, query_string, signature)
res = requests.post(url)
return res
if __name__ == '__main__':
asin = ['B07G2DLKYL','B0784GLG4V']
q = GetLowestOfferListingsForASIN(asin)
res = PostMWS(q)
print(res)
MWSサンプルコード解説
いくつかのエンドポイントに対してアクセスしやすいように、各エンドポイントへの振り分けを関数化しています。
メインルーチンでは例としてGetLowestOfferListingsForASINへのアクセスをしています。
各エンドポイント名の関数でアクセス用の構造化データを作り、辞書型として返しています。
受け取った辞書データをPostMWS関数に渡すとそのデータを使ってエンドポイントにアクセスします。
コメント