ショップサーブAPI(旧:Eストア)をCurlを使って在庫情報を取得する
ショップサーブAPIをCurlで各種在庫情報を取得する!
時短のために、ショップサーブAPIを叩いて楽したい!!!
こんにちは、薬師真珠のネット通販担当者です。
在庫管理のために、いちいちショップサーブの在庫を 管理ページを開いて確認するのがめんどくさくなったので、APIを叩く方法を模索したところ、 公式APIがありましたので、忘備録として少し残しておきます。 なお、今回はWindowsPowerShellだとCurlを使用した場合、 受け入れる位置指定パラメータが見つからないと怒られたので、 今回のコマンドはすべてUbuntu20.04上で実行したコマンドになります。 おそらく、Linux系列であれば今回のコマンドは実行できるものと思われます。 また、公式のAPIはPyrhonでHTTP Requestを行った場合、以下のようなエラーが現時点で発生します。 ※2024年4月24日にGoogle Colabで再現確認しています。
SSLError: HTTPSConnectionPool(host='management.api.shopserve.jp', port=443): Max retries exceeded with url: /v2/items/_search (Caused by SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:1007)')))
このエラーは2024年4月24日現在、CVE-2009-3555の対策のために、 Legacy Unsafe Renegotiationが無効になっていることに起因しています。 何とかしようと思えば、セキュリティを下げることによって可能ですが、 セキュリティリスクが増大するために、ショップサーブ側のサーバー対策待ちとなります。
CVE-2009-3555についてはこちら
本題のショップサーブAPIを使用した商品在庫情報の取得に関してですが、 ショップサーブのAPIキーを発行後、Ubuntu側で以下のようなコマンドを実行します。
ショップサーブAPIについてはこちら
ショップサーブ側のAPIリファレンスは初心者には少し読みずらいと思いますが、
読み解きながら説明していきます。
curl -X POST https://
ショップサーブのユーザー名:ショップサーブのAPIキー(マネジャー認証キー)@management.api.shopserve.jp/v2/items/_search -H "Content-Type: application/json" -d '{"from":0, "sort": {"type":"StockQuantity"},"filters":[{"item_code":"10","range_of_item_price":{"min":5000,"max":10000}}]}'
上記のコマンドをLinuxで実行すると、商品取得開始位置が0
在庫数順に並び変えを行う・商品番号に10を含む・金額が¥5,000円~10,000円
となる商品が抽出されます。
これは、"from":0 が商品取得開始位置が0
"sort": {"type":"StockQuantity"} が在庫数順に並び変えを行う
"filters": が商品のフィルタを行う
"item_code":"10" が商品番号に「10」を含む
"range_of_item_price":{"min":5000,"max":10000] が
商品の最低値段がが5,000以上かつ最高額が10,000まで
という条件検索となります。
上記の条件で検索すると件数が多くなり、塗りつぶしがめんどくさいため、
参考程度に高額商品を絞り込んだCurlコマンドの実行結果を載せておきます。
下記のコマンドは70,000以上10,000円以下の商品の有無と在庫数確認
※店舗情報があるため、一部塗りつぶしています。
上記の2連グラデーションネックレスはこちら
上記のように、コマンドを実行することで、
いちいち在庫管理ページを開かなくても、
商品絞り込みや在庫数の確認ができるようになりました!
なお、そこそこめんどくさくて躓いた(特に認証関連)ので
ほぼ自分用ですが残しておきます。
また、API仕様書を見るともう少し踏み込んだことも可能ですので、
頑張ってください。
今回参考にしたサイト ショップサーブAPI公式リファレンス(要ダウンロード) Deepl 翻訳 Google Colab Google 翻訳 Hatena Blog curlを使うときのデータの渡し方 @swfz Qitta curl コマンド 使い方メモ @yasuhiroki A10 Lab Inc. 知的好奇心 Pythonでcurlコマンドと同等の処理を実行する方法 JniimiLab エラーSSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED への対応 Stackoverflow SSL error unsafe legacy renegotiation disabled Convert curl commands to Python, JavaScript and more ※CurlコマンドPython形式などへ変換してくれるサイト 上記のサイトはCurlコマンドが間違っているとエラーで出るため、 確認のために使用