LoginSignup
9
7

More than 3 years have passed since last update.

Yahoo!ショッピング商品検索(v3)を使ってJANコードから商品名を検索する

Last updated at Posted at 2021-04-27

はじめに

商品の裏についているバーコードが有りますが、このバーコードはバーコードリーダーで読み取れたとして、それを使って商品名を検索できる方法はないかと考えてみました。インターネットを調べてみると手軽に使えるYahoo!ショッピング商品検索(v3)というものがあるらしいので試しに使ってみました。

REST API

使い方はとっても簡単です。GETリクエストにリクエストパラメータをつけてアクセスするとjsonが返ってきます。

URL


https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch

パラメータ

指定できるパラメータはここにのってます。
今回つかうのはappidjan_coderesultsのみです。つまり、下記のようなGETリクエストを行います。

GETリクエスト
https://shopping.yahooapis.jp/ShoppingWebService/V3/itemSearch?appid=<app_idを入れる>&jan_code=<jan_code>&results=1

コード

GETリクエスト

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.requesturlopen()を使用しています。ドキュメントのサンプルコードを見たらwithで上のような感じで使っていましたので、それを真似てみてます。urlエラーになることは想定してないので、使うことはないかも知れないですが一応tryexceptで例外処理も記述しています。

これだけでAPIから取得したjsonを変数に格納できます。

あとはこれを関数で記述してすこしだけ、使いやすくすればテストプログラムの完成です。というわけで出来たのがこちら

サンプルプログラム

search.py
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でいろいろ面白いことができそうです。

この記事が誰かの参考になれば幸いです。

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7