Webは用いる人のリテラシーで決まる ウェブ運用と開発現場を経験したエンジニアのTIPS
TOP > BLOG > IT記事

楽天のSKU移行に対応した在庫API 2.0(InventoryAPI 2.0)にPythonでアクセスする

早川朋孝 早川朋孝
EC専門のSE

楽天市場・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
×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP