【Python】楽天市場APIの使い方

【Python】楽天市場APIの使い方

実行するときはWindowsであればコマンドプロンプトで
cd でソースのあるフォルダに移動して、
python ○○.py(ソースを書いたファイル名)
で実行。
(すいません今度きれいに書き直します)

おことわり

わたしは現役エンジニアではあるのですが、ここしばらく仕事は上流工程なので、コードをバリバリ書いているわけではないのと、Python初心者なので、冗長なところがあるかもしれません。
ご利用は自己責任でお願いいたします。

Python×楽天市場APIでやること

今回の例では、価格を昇順でソートをかけた結果の1件を取得します。
つまり最安値のショップを探します。

なお、同じ価格の商品が複数あった場合、どれが返却されるかはわかりません。
商品の本体価格なので、税金と送料を入れた場合、最安値ではなくなる場合があります。

楽天市場APIを使用するためのアプリID

楽天APIを使用するには、アプリIDが必要です。
取得方法は公式サイトで見ればすぐわかるので割愛します。
参考 Rakuten DevelopersRakuten Developers

楽天商品検索APIの使い方(pythonコード)

21行目は自分のアプリIDに書き換えてください。

import requests

def kick_rakten_api():
    
    REQUEST_URL = "https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706"

    # パラメーター生成
    search_param = set_api_parameter()
    # Get
    response = requests.get(REQUEST_URL, search_param)
    # APIから返却された出力パラメーターを取得
    result = response.json()

    # 確認のために出力
    print(result)
    # 
    item = result["Items"][0]["Item"]
    print(item["itemPrice"])

def set_api_parameter():
    app_id = ★自分のアプリID★
    parameter = {
          "format"        : "json"
        , "keyword"       : "4562344360869"
        , "applicationId" : [app_id]
        , "availability"  : 1
        , "hits"          : 1
        , "sort"          : "+itemPrice"
        }
    return parameter

kick_rakten_api()

楽天商品検索APIのリクエストURL

リクエストURL
https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706

パラメータの生成

def set_api_parameter():
    app_id = ★自分のアプリID★
    parameter = {
          "format"        : "json"
        , "keyword"       : "4562344360869"
        , "applicationId" : [app_id]
        , "availability"  : 1
        , "hits"          : 1
        , "sort"          : "+itemPrice"
        }
    return parameter

パラメータ生成はメソッドに切り出しました。
呼び出し元をパッと見て流れがわかる作りにするのが好みです。
ソースを追うときに、目線が行ったり戻ったりするのが嫌だから細かく分けないのが良いと主張する人もいるから、その辺はお好みでどうぞ。

キーワードに指定したのはシャトルシェフという鍋のJANコードです。
商品名をキーワードにすると関係ないものもヒットしまくるので、JANコードにしています。
その代わり、商品情報にJANコードを入れていないショップはヒットしません。

他のパラメーターは公式サイトで確認してください。

参考 楽天商品検索API (version:2017-07-06)Rakuten Developers

取得したJSON

{
  "Items": [
    {
      "Item": {
        "mediumImageUrls": [
          {
            "imageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/d-shop1one/cabinet/05082014/imgrc0067972992.jpg?_ex=128x128"
          }
        ],
        "pointRate": 1,
        "shopOfTheYearFlag": 0,
        "affiliateRate": 3,
        "shipOverseasFlag": 0,
        "asurakuFlag": 1,
        "endTime": "",
        "taxFlag": 0,
        "startTime": "",
        "itemCaption": "サイズ(約):幅30×奥行24×高さ19cm、調理鍋最大内径/19.5cm 素材・材質:表面加工/ふっ素樹脂塗膜加工(内面)・焼付塗装(外面。底面を除く)、調理鍋本体/アルミニウム合金、はり底/ステンレス鋼(クローム18%。底の厚さ2.9mm。はり底含む)調理鍋フタ/強化ガラス(全面物理強化) 生産国:中国 調理鍋容量:2.8L (3~5人用) ごはん3カップ、3.3合まで 対応熱源:ガス火、電磁調理器 (IH 200V 対応)、電気プレート、ハロゲンヒーター、シーズヒーター、ラジエントヒーター 本体重量(約kg): 2.3",
        "catchcopy": "",
        "tagIds": [
          1000875,
          1004112,
          1004131,
          1008305
        ],
        "smallImageUrls": [
          {
            "imageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/d-shop1one/cabinet/05082014/imgrc0067972992.jpg?_ex=64x64"
          }
        ],
        "asurakuClosingTime": "14:00",
        "imageFlag": 1,
        "availability": 1,
        "shopAffiliateUrl": "",
        "itemCode": "d-shop1one:10216207",
        "postageFlag": 1,
        "itemName": "サーモス 真空保温調理器 シャトルシェフ (3-5人用) 2.8L オレンジ KBJ-3000 OR",
        "itemPrice": 7775,
        "pointRateEndTime": "",
        "shopCode": "d-shop1one",
        "affiliateUrl": "",
        "giftFlag": 0,
        "shopName": "ディーショップワン",
        "reviewCount": 5,
        "asurakuArea": "群馬県/埼玉県/千葉県/東京都/神奈川県/富山県/石川県/福井県/岐阜県/静岡県/愛知県/三重県/滋賀県/京都府/大阪府/兵庫県/奈良県/和歌山県/茨城県/栃木県",
        "shopUrl": "https://www.rakuten.co.jp/d-shop1one/",
        "creditCardFlag": 1,
        "reviewAverage": 4.4,
        "shipOverseasArea": "",
        "genreId": "101857",
        "pointRateStartTime": "",
        "itemUrl": "https://item.rakuten.co.jp/d-shop1one/10216207/"
      }
    }
  ],
  "pageCount": 100,
  "TagInformation": [],
  "hits": 1,
  "last": 1,
  "count": 118,
  "page": 1,
  "carrier": 0,
  "GenreInformation": [],
  "first": 1
}

JSONの中からさらに要素を抜く

APIから返却されたJSONは、

{"Items": 
    [{"Item": ・・・

なので、Itemsというキーの中が配列になっている構成です。
パラメータで1件取得と設定しているので、

item = result["Items"][0]["Item"]

Itemsの0要素目のItemでItemの値が取得できます。

item["itemPrice"]

さらにItemの中のitemPriceを取得すると、7775が取得できます。

頑張って説明した!

このブログはできるだけわかりやすく説明して、コードはコピペで使えることを目指しているので、不明瞭なところがあれば、ご指摘をいただければ幸いです。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA