【Python】Web APIサンプル

Python

処理概要

一般公開されているWeb APIを使ったサンプルコード。


ホットペッパーグルメサーチAPI

処理内容

ホットペッパーグルメサーチAPIでお店の検索とCSV出力をする

  • キーワード検索を実行する
  • 検索結果を整形する
  • 結果をCSVファイルに出力する

事前準備

APIリファレンス


コード

import requests
import pandas as pd

# ----------------------------------------
# 定数の設定
# ----------------------------------------
API_URL = 'http://webservice.recruit.co.jp/hotpepper/gourmet/v1/'
API_KEY = '取得したAPIキーを入力する'

# ----------------------------------------
# 検索クエリの設定
# ----------------------------------------
params = {
    'key': API_KEY,
    'keyword': '代々木上原',
    'count': 20,
    'format': 'json'
}

# ----------------------------------------
# リクエストの実行
# ----------------------------------------
try:
    res = requests.get(API_URL, params=params)

    if res.status_code == 200:
        result = res.json()

        # shopのリスト情報だけ格納し直す
        items = result['results']['shop']
        df = pd.DataFrame(items)

        # 必要なカラムのみ抽出する
        df = df[['name', 'address', 'non_smoking']]

        # ----------------------------------------
        # CSVに出力する
        # ----------------------------------------
        df.to_csv('hotpepper_shop_list.csv',index=False)

    else:
        print(f'リクエストが失敗しました: {res.status_code}')

except requests.exceptions.RequestException as e:
    print(f'リクエストエラーが発生しました: {e}')
except Exception as e:
    print(f'エラーが発生しました: {e}')

楽天ブックス総合検索API

処理内容

楽天ブックス総合検索APIでの商品検索と取得データの操作サンプル

  • キーワード検索を実行する
  • 検索結果を整形する
  • pandasを利用したデータの確認と操作を行う

事前準備

API詳細ページ


コード

import requests
import pandas as pd

# ----------------------------------------
# 定数の設定
# ----------------------------------------
API_URL = 'https://app.rakuten.co.jp/services/api/BooksTotal/Search/20170404'
APP_ID = '取得したアプリIDを入力する'

# ----------------------------------------
# 検索クエリの設定
# ----------------------------------------
params = {
    'applicationId': APP_ID,
    'format': 'json',
    'keyword': '荒木飛呂彦'
}

# ----------------------------------------
# リクエストの実行
# ----------------------------------------
try:
    res = requests.get(API_URL, params)

    if res.status_code == 200:
        result = res.json()

        # itemsのリスト情報だけ格納し直す
        items = result['Items']

        # そのままデータフレームに格納するとすべて1カラムに入ってしまうため編集する
        items = [item['Item'] for item in items]
        df = pd.DataFrame(items)

        # 必要なカラムのみ抽出する
        df = df[['title', 'itemCaption', 'itemPrice', 'availability']]

        # カラム名を変更する
        new_columns = ['商品', 'キャッチコピー', '価格', '販売可能']
        df.columns = new_columns

        # データを商品名で並び替える
        df.sort_values('商品', ascending=False)

        # 統計量を確認する
        df.describe()

        # データを抽出する
        df[df['価格'] > 2000]

    else:
        print(f'リクエストが失敗しました: {res.status_code}')

except requests.exceptions.RequestException as e:
    print(f'リクエストエラーが発生しました: {e}')
except Exception as e:
    print(f'エラーが発生しました: {e}')

Python

Posted by junichi