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

楽天のCategoryAPIで店舗カテゴリ一覧の取得と在庫反映をPythonで実行する方法

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

商品カテゴリはネットショップを長く運営しているとどんどん増えてくる。その管理をするのはコストがかかるし、複数モールを運営しているとさらにコストがかかる。

複数モールでECを運営している場合、カテゴリの管理はマスターでして、各モールにはそのマスターを自動反映するのが楽でいいだろう。

今回は楽天のカテゴリ一覧の取得と、カテゴリ追加をPythonで実行する方法を紹介する。

カテゴリ一覧の取得

楽天のCategoryAPIの認証形式はsoapでないのでカテゴリ一覧は簡単に取得できる。ちなみに下記のソースは解説のために便宜上APIキーをソースにベタ書きしていることになるが、実際は環境変数またはDBで暗号化して扱うべきである。

import urllib.request
import sys, codecs
import requests
import base64
import json
import datetime
import time
from pytz import timezone

#楽天api 
serviceSecret = 'hogehoge'
licenskey = 'hogehoge'

b64 = serviceSecret + ':' + licenskey
b64_en = base64.b64encode(b64.encode())


def get_rakuten_category():
    """ 
    APIで楽天カテゴリ一覧を取得
    """ 

    headers = { 
     'Authorization': b'ESA ' + b64_en,
     'Content-Type': 'text/xml; charset=utf-8',
    }   

    #まずはある日の注文番号の一覧を取得
    url_search_order = 'https://api.rms.rakuten.co.jp/es/1.0/categoryapi/shop/categories/get'
    r_post = requests.get(url_search_order, headers=headers)
    return r_post

これだけで運営している店舗のカテゴリ一覧の取得ができる。

カテゴリの追加

次にカテゴリの追加をしよう。認証方法は上記と同じ。カテゴリの追加はXML形式で行う。categoryIdは親カテゴリの追加を指定する。0ならトップディレクトリとなる。nameがカテゴリ名だ。カテゴリ名が全角の場合は、postする際に.encode(“utf-8”)を指定しないとエラーとなるので注意。

以下の関数を実行するだけでカテゴリが楽天に反映される。数百のカテゴリを手作業で追加するなんて不毛なことをやる必要はない。ネットショップ店長はもちろん店舗運営者は、つまらない作業はどんどんプログラムにやらせて、もっと大事なことに時間を使おう。

def put_rakuten_category():
    """ 
    APIで楽天カテゴリに登録
    """ 

    headers = { 
     'Authorization': b'ESA ' + b64_en,
     'Content-Type': 'text/xml; charset=utf-8',
    }   

    url_search_order = 'https://api.rms.rakuten.co.jp/es/1.0/categoryapi/shop/category/insert'
    bytesXMLPostBody = ('''
    <?xml version="1.0" encoding="UTF-8"?>
     <request>
        <categoryInsertRequest>
                <categoryId>0000000003</categoryId>
                <category>
                        <name>テスト</name>
                </category>
        </categoryInsertRequest>
      </request>
    ''')

    r_post = requests.post(url_search_order, headers=headers, data=bytesXMLPostBody.encode("utf-8"))
    return r_post
×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP