【初心者でもわかる】楽天ブックスの商品検索APIを呼び出してCSVに出力する

こんにちは!今回は最もシンプルな形で「API呼び出し」を体験する方法を紹介します。今回は楽天商品検索APIを例に、たった数行のコードでインターネット上のデータにアクセスする方法を学びましょう。

APIとは何か?

API(Application Programming Interface)とは、簡単に言うと「プログラムがインターネット上のサービスと会話するための約束事」です。例えば、楽天ブックスの商品情報を取得したい場合、自分でウェブサイトをスクレイピングする代わりに、楽天が公式に用意したAPIを使うことで、簡単に商品情報を取得できます。

APIを使うメリットは?
    簡単にデータを取得できる
    公式に提供されているのでルール違反にならない
    構造化されたデータが手に入る

もっと詳しい解説が必要でしたら、以下の記事をご参照ください。

今回の目標

今回のシンプルなプログラムで目指すのは、楽天ブックスAPIを呼び出して商品情報をCSVに出力するだけの単純な機能です。データをモデルに保存したり、詳細な機能は後から学ぶとして、まずはAPI呼び出しの基本を体験しましょう。

準備するもの

  1. 楽天アプリID(アプリケーションID)

    • 楽天ウェブサービスで無料登録
    • 「アプリID発行」から取得できます
    • すでに楽天IDをお持ちの方は、ログインボタンを押下してアプリIDを発行してください。
  2. Pythonの実行環境

    • Python 3.12を推奨
    • requestsライブラリ(pip install requestsでインストール)
    • numpyライブラリ(pip install numpyでインストール)
    • pandasライブラリ(pip install pandasでインストール)

コードを見てみよう

以下のコードは、楽天商品検索APIの基本的な呼び出し方を示しています。

#!/usr/bin/env python
"""
超シンプル版:楽天商品検索API呼び出し入門
APIの基本的な呼び出し方を学ぶためのプログラム
"""
import requests
import numpy as np
import pandas as pd

Request_URL = 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404'
APP_ID = 'あなたのアプリID'

serch_keyword = 'Python'

serch_params = {
    "format" : "json",
    "title" : serch_keyword,
    "applicationId" : [APP_ID],
    "availability" : 0,
    "hits" : 30,
    "page" : 1,
    "sort" : "sales"
    }
response = requests.get(Request_URL, serch_params)
result = response.json()

item_key = ['title','author','itemPrice', 'largeImageUrl']
item_list = []
for i in range(0, len(result['Items'])):
    tmp_item = {}
    item = result['Items'][i]['Item']
    for key, value in item.items():
        if key in item_key:
            tmp_item[key] = value
    item_list.append(tmp_item.copy())

# データフレームを作成
items_df = pd.DataFrame(item_list)

# 列名と行番号を変更する:列名は日本語に、行番号は1からの連番にする
items_df.columns = [ '商品名', '著者', '商品価格', '商品URL']
items_df.index = np.arange(1, 31)

items_df.to_csv('./data.csv')

インポートしたモジュール類の解説

まず、プログラムの最初に書かれている「import」という部分から説明します。これは、他の人が作った便利な道具箱(モジュール)を持ってくる命令です。

import requests
import numpy as np
import pandas as pd

requestsモジュール

  • 何ができるの?: インターネット上のデータを取得するための道具箱
  • 今回の使い方: 楽天のサーバーにデータ取得のお願い(リクエスト)を送る

numpyモジュール(np)

  • 何ができるの?: 数値計算を効率的に行うための道具箱
  • 今回の使い方: データの番号(インデックス)を1から30まで作成する

pandasモジュール(pd)

  • 何ができるの?: データを表(表計算ソフトのような形)で扱うための道具箱
  • 今回の使い方: 取得した本の情報を表形式にまとめてCSVに変換する

serch_paramsの仕様解説

Request_URL = 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404'
APP_ID = 'あなたのアプリID'
serch_keyword = 'Python'
serch_params = {
"format" : "json",
"title" : serch_keyword,
"applicationId" : [APP_ID],
"availability" : 0,
"hits" : 30,
"page" : 1,
"sort" : "sales"
 }

ここでは、楽天APIに「どんな情報が欲しいか」を伝えるパラメータを設定しています。

  • format: データ形式をJSON(後ほど説明)で受け取る
  • title: 検索したい本のキーワード(今回は「Python」)
  • applicationId: あなたの楽天APIのID
  • availability: 在庫状況(0=制限なし)
  • hits: 一度に取得する件数(30件)
  • page: 何ページ目の情報を取得するか(1ページ目)
  • sort: 並び順(売上順)

JSONの見方と初歩的な解説

JSONとは「JavaScript Object Notation」の略で、データを整理して表現する方法の一つです。

以下のような特徴があります:

  • 人間にも読みやすい形式
  • {}(波括弧)でデータのまとまりを表す
  • "キー": 値の形でデータを持つ
  • 値には文字列、数値、配列、他のJSONオブジェクトなどが入る

例えば、本の情報のJSONは以下のようなイメージです。

{
  "title": "Python入門",
  "author": "山田太郎",
  "itemPrice": 2500,
  "largeImageUrl": "https://..."
}

JSONの取得と構造化分析手法

response = requests.get(Request_URL, serch_params)
result = response.json()
  1. requests.get()で楽天サーバーにリクエストを送信
  2. response.json()でJSONデータを取得してPythonで扱える形式に変換
item_key = ['title','author','itemPrice', 'largeImageUrl']
item_list = []
for i in range(0, len(result['Items'])):
    tmp_item = {}
    item = result['Items'][i]['Item']
    for key, value in item.items():
        if key in item_key:
            tmp_item[key] = value
    item_list.append(tmp_item.copy())

ここのコードの流れを解説すると、以下の通りになります。

  1. 取得したい情報のキーをitem_keyに定義
  2. 空のリストitem_listを用意
  3. 取得した全ての商品(Items)について繰り返し処理:
    • 一時保存用の辞書tmp_itemを作成
    • 商品の全ての情報から必要なもの(title, author, itemPrice, largeImageUrl)だけを取り出す
    • 取り出した情報をitem_listに追加

楽天APIのデータ構造サンプル

楽天のAPIは各種ありますが、どういった構造になっているかはサンプルデータを取得することができます。

以下のテストフォームから、お試しでデータ取得することができますのでアプリ作成の参考にしましょう。

データフレームの作成方法

# データフレームを作成
items_df = pd.DataFrame(item_list)

pd.DataFrame()は、Pandasの関数でデータフレーム(表形式のデータ)を作成します。

データフレームとは?

  • 表計算ソフトのようなデータ構造
  • 行と列で情報を整理できる
  • さまざまなデータ処理が簡単にできる

今回は、先ほど作成したitem_list(本の情報が入ったリスト)をデータフレームに変換しています。

CSVへの変換方法

# 列名と行番号を変更する:列名は日本語に、行番号は1からの連番にする
items_df.columns = [ '商品名', '著者', '商品価格', '商品URL']
items_df.index = np.arange(1, 31)
items_df.to_csv('./data.csv')

最後に、データフレームをCSVファイルに変換します:

  1. items_df.columnsで列名を日本語に変更(見やすくするため)
  2. items_df.indexで行番号を1から始まる番号に変更
  3. items_df.to_csv()でCSVファイルとして保存

EOF

このプログラムでは以下のことを行いました。

  1. 必要なモジュール(道具箱)をインポート
  2. 楽天APIにリクエストを送るための設定
  3. APIからJSONデータを取得
  4. JSONデータから必要な情報を取り出す
  5. 取り出した情報をデータフレーム(表形式)に変換
  6. データフレームをCSVファイルに保存

APIを使うことで、大量のデータを簡単に取得できるようになり、さらに拡張性も向上します。 addition.pyファイルと合わせて理解することができれば、検索キーワードを変えたり、取得する情報の種類を増やしたりすることができますので是非過去の記事もご参照ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA