はじめに
商品の裏についているバーコードが有りますが、このバーコードはバーコードリーダーで読み取れたとして、それを使って商品名を検索できる方法はないかと考えてみました。インターネットを調べてみると手軽に使えるYahoo!ショッピング商品検索(v3)というものがあるらしいので試しに使ってみました。
REST API
使い方はとっても簡単です。GETリクエストにリクエストパラメータをつけてアクセスするとjsonが返ってきます。
URL
https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch
パラメータ
指定できるパラメータはここにのってます。
今回つかうのはappid
、jan_code
、results
のみです。つまり、下記のようなGETリクエストを行います。
例
https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?appid=<app_idを入れる>&jan_code=<jan_code>&results=1
コード
GETリクエスト
import json
from urllib.request import urlopen
from urllib.error import URLError
url = f"https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?appid={APPID}&jan_code={code}&results=1"
try:
with urlopen(url) as resp:
res = json.load(resp)
except URLError as err:
print(err.reason, file=sys.stderr)
リクエストは上のようなコードで行います。urllib.request
のurlopen()
を使用しています。ドキュメントのサンプルコードを見たらwithで上のような感じで使っていましたので、それを真似てみてます。urlエラーになることは想定してないので、使うことはないかも知れないですが一応try
とexcept
で例外処理も記述しています。
これだけでAPIから取得したjsonを変数に格納できます。
あとはこれを関数で記述してすこしだけ、使いやすくすればテストプログラムの完成です。というわけで出来たのがこちら
サンプルプログラム
import sys
import json
from urllib.request import urlopen
from urllib.error import URLError
APPID = "<APPID>"
def jancode_to_name(code):
product_name = None
url = f"https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?appid={APPID}&jan_code={code}&results=1"
try:
with urlopen(url) as resp:
res = json.load(resp)
except URLError as err:
print(err.reason, file=sys.stderr)
return None
if "hits" in res and res['hits']:
product_name = res["hits"][0]["name"]
return product_name
if len(sys.argv) != 2:
sys.exit("example: search.py <jan_code>")
name = jancode_to_name(sys.argv[1])
if name is None:
sys.exit("Not found")
print(name)
こんな感じのソースコードになりました。エラーになったり存在しなかったらjancode_to_name()
はNoneを返してきます。
使い方
$ python search.py 4901777273696
炭酸飲料 ペプシ リフレッシュショット サントリー 200ml 30本 1ケース のし・ギフト・サンプル各種対応不可
上のようにjan_codeを後ろにつけて実行すると商品名が表示されます。
見つからなかった時とURLErrorになったら、エラー出力にNotFoundを表示してステータスコード1で終了します。つまり取得できたときだけ0(成功)で終了すると思います(たぶん)。これはbash等で使うことを想定しています。
おわりに
リクエストパラメータは他にもいろいろ使えるみたいですし、もともと検索APIですから商品の写真とかもこのやり方でとってこれるみたいです。とても便利ですね。ちなみにこのAPIを利用するにはここからデベローパー登録が必要ですが、個人用というチェックもあるので、趣味でも作業効率化でもいろいろ使ってみては面白いのではないでしょうか。M5StackやRaspberryPiでいろいろ面白いことができそうです。
この記事が誰かの参考になれば幸いです。