LoginSignup
4
2

More than 3 years have passed since last update.

楽天市場系APIからPythonでCSVデータを取得

Last updated at Posted at 2019-07-28

概要

楽天市場系API(https://webservice.rakuten.co.jp/api/ichibaitemsearch/)からPython3を活用して、商品検索結果をCSVファイルで保存するためのコードです。

30件☓100ページ分取得ができるので、最大3000件のデータが取得可能です。

開発環境

  • Mac OS Mojave 10.14.4
  • Python 3.7.3
  • requests 2.21.0

事前準備

事前に楽天APIキーを取得しておく必要があります。

参考サイト

PythonでのAPI使用方法を参考にさせてもらったサイトがあるのですけど、見失ってしまいました…ゴメンナサイ。見つけ次第掲載します。

コード

ファイル名:rakuten_api.py

import requests
import time

class rakuten_api:

    # -- コンストラクタ --
    def __init__(self, url):
        self.url = url

    # -- データ取得 --
    # serarch_criteriaは、検索用のパラメータを指定
    # output_parameterは、出力する項目のパラメータを指定
    # 返り値はリスト型
    def dataInport(self, serarch_criteria, output_parameter):

        # ページ番号の取得
        r = requests.get(self.url, params=serarch_criteria)
        response = r.json()
        pages = response['pageCount']

        # 取得データを蓄積するリスト
        pageList = []
        pageListAll = []

        # ページ番号1〜最終ページまでループ
        for p in range(1, pages + 1):

            # パロメータ[page]を上書きする
            parameter = {
                'page': p,
            }
            serarch_criteria.update(parameter)

            # 楽天APIへパラメータ送信
            r = requests.get(self.url, params=serarch_criteria)
            # 取得したJOINデータをリストとして配列に挿入
            response = r.json()

            # 連続に実行するとエラーが出るので1秒停止
            time.sleep(1)

            # リストの[Items]→[Item]の中から、
            # output_parameterで指定した項目を配列に挿入する。
            for r in response['Items']:
                item = r['Item']
                for o in output_parameter:
                    pageList.append(item[o])

                pageListAll.append(pageList)
                pageList = []

        return pageListAll

ファイル名:任意

import rakuten_api
import pandas as pd

# 入力パラメーター(公式ホームページを参照)
serarch_criteria = {
        'applicationId': ['APIキー'],
        'keyword': '検索キーワードを自由に',
        'hits': 30,
        'sort': '+itemPrice',
    }

# 出力パラメーター(公式ホームページを参照)
output_parameter = ['itemName', 'itemPrice', 'postageFlag']

#上記記載のクラスを読み出す
rakutenApi = rakuten_api.rakuten_api('https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706')
result = rakutenApi.dataInport(serarch_criteria, output_parameter)

#pandasでCSV出力
df = pd.DataFrame(result, columns=output_parameter)
df.to_csv('result.csv', index=False)

補足

無駄にクラスで書いてます。検索結果件数を表示するためのメソッドを拡張しようかなと考えています。

入力パラメータと出力パラメータは公式HPにしたがって設定すればうまくいきます。

4
2
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
4
2