AmazonのSP-APIで在庫を更新する方法は複数ある。まずFBA在庫を更新したいのか、それとも販売商品の在庫を更新したいのかを明確にしないといけない。
今回は販売商品の在庫をPythonで更新する方法を紹介する。使用するAPIはListings Items APIだ。
公式ドキュメント
以下のコードではSKUを指定して1商品ずつ更新する方法である。リクエストはpatchである点に注意。product_typeは必須だが、該当商品のproduct typeが不明な時は「PRODUCT」と指定する。
在庫更新というと一括で実行することが多いが、一つの商品だけを更新したい場合もある。一つの商品の更新をするためだけに全体の更新処理を使うと在庫管理のトラブルの原因になり得るので、APIに単品更新用のエンドポイントがある場合は、それを使うほうが賢明だ。
def put_item_stock(inventory_data): """ inventory_data : {"sku": "gld6403go68d", "quantity": 23} """ method = 'PATCH' canonical_uri = '/listings/2021-08-01/items/' + self.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