ECサイトの運用は時間がかかる面倒な単純作業がいっぱいあり、自動化や効率化を進めないとあっという間にミス多発や人手不足となり、業務に押しつぶされてしまいます。幸いなことに楽天やamazon、Yahooなど大手ECモールは業務自動化を助けるAPIを提供してあり。今回は楽天の購入商品API(PurchaseItemAPI)を使ってどのようなRPA(EC業務の自動化)ができるのか、具体的な例を挙げて紹介します。
目次
- 楽天の購入商品API(PurchaseItemAPI)を使うメリット
- 楽天APIのエンドポイントににPythonでアクセスしてみる
- APIで取得したデータはAI活用を見据えてDBに保存するべし
楽天の購入商品API(PurchaseItemAPI)を使うメリット
楽天の購入商品API(PurchaseItemAPI)は、指定した条件に一致する注文で購入された商品情報の取得を行うAPIで、注文情報から個人情報が省略されています。例えば、注文データの分析などをするのに有用です。注文データをAIに渡して発注量を算出させたり、どんな販売施策をうつかの判断材料を提示させたりすることができます。
今どき個人情報には細心の注意で接する必要があることを考えると、個人情報に触れずにデータの分析ができるのは大きなメリットです。データ分析を外部に依頼したり、社内でより多くの従業員に任せたりと、幅広く活用できそうです。
商品のデータ分析はもちろん管理画面でもできますが、これが例えば楽天だけでなくAmazonも、YahooもShopifyもとなると、モールやカートごとに各管理画面にアクセスする必要がでてきます。さらにモールを横断して売れ筋の商品を人手をかけて集計するとなると、かなりの工数がかかるし間違いも起きます。これはとても面倒です。優先してRPAを進めるべきEC業務の一つです。
だからAPIを使うのです。APIならプログラムを介して必要な情報を自動で取得できて、定期的に処理をさせて自動で売れ筋商品のレポート作成なんてこともできます。きまった型がある業務はRPAの対象です。上述の通りAIに渡して分析させてもいいでしょう。
楽天APIのエンドポイントににPythonでアクセスしてみる

基本的な仕様はRMSから閲覧できる楽天APIサービスのページに記載してあるが(RMSのサイドメニューからアクセスできる)、ここではPythonを使って楽天の購入商品API(PurchaseItemAPI)にアクセスする方法を紹介します。
※シークレットキーやライセンスキーは取得している前提
なおエンドポイントにアクセスするプログラムは、ここではPythonを例に挙げますが、PHPでもRubyでもなんでもいいです。
serviceSecret = ***************
licenskey = ***************
b64 = serviceSecret + ':' + licenskey
b64_en = base64.b64encode(b64.encode())
yesterday = datetime.date.today() + datetime.timedelta(days=-1)
jst_st = str(yesterday)+"T00:00:00+0900"
jst_ed = str(yesterday)+"T23:59:59+0900"
headers = {
'Authorization': b'ESA ' + b64_en,
'Content-Type': 'application/json; charset=utf-8',
}
url_search_order = 'https://api.rms.rakuten.co.jp/es/2.0/purchaseItem/searchOrderItem/'
search_data = {
"orderProgressList": [100, 200, 300, 400, 500, 600, 700],
"dateType":1,
"startDatetime":jst_st,
"endDatetime":jst_ed,
"PaginationRequestModel": {"requestRecordsAmount":1000, "requestPage":1}
}
r_post = requests.post(url_search_order, headers=headers, json=search_data)
order_list = json.loads(r_post.text)
order_list = order_list['orderNumberList'] #これが指定日の注文番号一覧リスト
for id in order_list:
print(id)
このプログラムは前日の注文からキャンセルされた以外の注文情報の一覧を取得する処理を行っています。エンドポイントに条件を指定してアクセスすると、その結果が返ってきます。
指定日の注文番号一覧をリストにしたので、次に各注文番号から注文内容を取得する。どんな商品がいくつ売れ、いくらで購入されたかなどの情報が手に入ります。
注意点として、一度のリクエストで得られる情報は100件までなので、100件以上ある場合は初回リクエスト時に発行される次ページのtokenを指定して、再度リクエストする必要がある。これはamazonなどのAPIも同じ仕様です。
#一度のリクエストは100件まで 2022/10/13時点の楽天APIの仕様
rakuten_constant_number = 100
div_number = len(order_list) // rakuten_constant_number
master_data = {}
if div_number > 0: #1日の注文件数が100件以上の場合
#100でわった剰余を求めておく
mod_number = len(order_list) % rakuten_constant_number
count = div_number + 1
start_num = 0
end_num = rakuten_constant_number
#order_listを100件ずつのリストに分割する
for row in range(count):
if row == div_number:
end_num = (rakuten_constant_number * div_number) + mod_number
tmp = []
for rowj in range(start_num, end_num):
tmp.append(order_list[rowj])
master_data[row] = tmp
start_num += 100
end_num += 100
elif div_number == 0: #1日の注文件数が100件未満の場合
master_data[0] = order_list
#各注文番号の情報を取得
url_get_order = 'https://api.rms.rakuten.co.jp/es/2.0/purchaseItem/getOrderItem/'
for row in master_data:
order_data = {
'orderNumberList': master_data[row]
}
#注文番号一件ずつに対してエンドポイントにリクエストする
req = urllib.request.Request(url_get_order, json.dumps(order_data).encode(), headers)
#注文が0件の場合は400badとなる 例:2022/8/28
try:
with urllib.request.urlopen(req) as res:
body = res.read()
except urllib.error.HTTPError:
break
json_load = json.loads(body)
以上のPythonコードで指定した日の注文番号と、それに結びついた注文商品の情報がAPI経由で取得できました。あとはDBに保存するなり、自社システムと接続するなり、いかようにもRPAや分析に活用できます。
APIで取得したデータはAI活用を見据えてDBに保存するべし
注文情報のAPIリクエスト結果は、今後のAI時代を見据えると、DBに保存することを強くおすすめします。というのもAIは自社のデータをいかに集めて学習させるかによって、精度が変わってくるからです。もし今すぐ活用が思いつかなくても、とりあえずDBに保存しておきましょう。
一般にAPIで取得できるデータには期限があるので、一定の期間を過ぎると取得できなくなります。楽天の購入商品API(PurchaseItemAPI)に関してなら、「過去 730 日(2年)以内の注文を指定可能」と明記してあります。AI時代はのビジネス競争は、いかにして自社のデータを集めるかにかかっていると言っても過言ではありません。
MCPサーバー
MCPという仕組みを使えば、LLM(ChatGPTやGeminiのような生成AIの大規模言語モデル)に指示してAPI経由でデータを取得したり、DBにアクセスしてデータを取得できたりします。SQLを書く必要がないので、DBの知識がなくてもDBのデータを扱えるようになります。DBにデータを保存することは、本格的なAIエージェントの第一歩となります。RPAが古い概念となるのも目前です。




