AmazonのSP-APIには二種類の在庫更新があります。FBA在庫を更新したいのか、それとも販売商品の在庫を更新したいのかを明確にしないといけません。
今回は販売商品の在庫をPythonで更新する方法を紹介します。使用するAPIはListings Items APIです。
公式ドキュメント
目次
- ソースコード紹介
- 活用方法
- 関連記事
以下のコードではSKUを指定して1商品ずつ更新する方法です。リクエストはpatchである点に注意してください。。product_typeは必須ですが、該当商品のproduct typeが不明な時は「PRODUCT」と指定します。
在庫更新というと一括で実行することが多いですが、一つの商品だけを更新したい場合もあるでしょう。一つの商品の更新をするためだけに全体の更新処理を使うと在庫管理のトラブルの原因になり得るので、APIに単品更新用のエンドポイントがある場合は、それを使うほうが賢明です。
ソースコード紹介
では以下にPythonでAmazonの販売在庫を更新するソースコードの例を示します。
def put_item_stock(inventory_data):
"""
inventory_data : {"sku": "hogehoge", "quantity": 23}
"""
method = 'PATCH'
canonical_uri = '/listings/2021-08-01/items/' + seller_id + '/' + inventory_data['sku']
headers = {'x-amz-access-token': token,
'user-agent': user_agent,
'Content-Type': content_type,
'X-Amz-Date': amz_date,
'Authorization': authorization_header
}
patches = []
patch_operation = {}
patch_operation['op'] = 'replace' #'replace' or 'delete' or 'add' etc
patch_operation['path'] = '/attributes/fulfillment_availability'
patch_operation['value'] = [
{ 'fulfillment_channel_code': 'DEFAULT',
'quantity': inventory_data['quantity'],
}
]
patches.append(patch_operation)
#指定がない場合はPRODUCTをいれる
try:
product_type = inventory_data['product_type']
except KeyError:
product_type = 'PRODUCT'
#patch用のデータを生成
patch_data = {
'productType': product_type,
'patches': patches,
}
body_data = json.dumps(patch_data)
request_parameters_unencode = {
'marketplaceIds': 'hogehoge',
}
request_parameters = urllib.parse.urlencode(sorted(request_parameters_unencode.items()))
request_parameters = json.dumps(request_parameters)
#リクエスト先エンドポイント
endpoint = 'https://sellingpartnerapi-fe.amazon.com' + canonical_uri
request_url = endpoint + '?' + request_parameters
response = requests.patch(request_url, data=request_parameters, headers=headers)
return response
活用方法
在庫更新のAPIは、例えばFBAの在庫を取得して、その在庫を販売用在庫として更新するのような場合が考えられます。FBAの在庫はもちろん引き当て済みと区別して取得できるので、販売可能な在庫より多い在庫を載せてしまう心配はありません。Amazonで販売する際は、Prime表示やカート取得ができても、在庫切れを起こすとそういった優遇が消えてしまう可能性があります。そのため在庫の少ない商品に関しては、実際より少ない在庫数を載せる運用もあります。





