楽天市場・Yahooショッピング・Amazon、ShopifyなどのECモールやカートシステムの在庫連携を行う場合、一般的なEC向けのサービスを利用すると毎月数万円以上かかります。自社にIT人材がいればこれをコストダウンできます。Pythonでそれを実現する方法を紹介します。
楽天が「SKU移行」というプロジェクトを進めています。
今までは商品を商品管理番号や商品番号で管理していたのだが、それにくわえSKU管理番号という項目が追加される。これは楽天がAmazonのように同一商品のサイズ違いや色違いに対応するために進めているプロジェクトです。
これに伴い商品登録や在庫管理、APIなどに大きな仕様変更がはいる。ネットショップ運営をプログラムなどで自動化、効率化している店舗や会社にとっては場合によってはクリティカルな影響が発生するので、はやめに対応する必要があります。
今回は特にクリティカルな在庫周りのAPIを使って、在庫を更新するPythonのコードを紹介します。必要なのは商品管理番号とSKU管理番号です。
一度のリクエストで更新できる在庫は400商品まで(2023/4/19時点の仕様)なので、これを超える場合はリクエストを分割する必要があります。
def put_item_stock(manage_number, sku_number): serviceSecret = 'RMSより取得' licenskey = 'RMSより取得' b64 = serviceSecret + ':' + licenskey b64_en = base64.b64encode(b64.encode()) headers = { 'Authorization': b'ESA ' + b64_en, 'Content-Type': 'application/json; charset=utf-8', } #postするデータを格納する tmp_list = [] tmp_dict = {} tmp_dict['manageNumber'] = manage_number #商品管理番号 tmp_dict['variantId'] = sku_number #sku管理番号 tmp_dict['mode'] = 'ABSOLUTE' #在庫を絶対値で上書きする場合 tmp_dict['quantity'] = 15 #在庫を絶対値で指定する tmp_list.append(tmp_dict) #一度のリクエストで更新する商品情報をリストに加える json_data = {'inventories': tmp_list} #楽天の指定する書式に整える url = 'https://api.rms.rakuten.co.jp/es/2.0/inventories/bulk-upsert' response = requests.post(url, headers=headers, json=json_data) return response