全国送料一律500円
各種支払
実店舗案内
 

ショップサーブ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コマンドが間違っているとエラーで出るため、
確認のために使用


コメント

[コメント記入欄はこちら]

コメントはまだありません。
名前:
URL:
コメント:
 

ページトップへ