【API活用】Pythonで外部APIを叩いてデータを取得・保存する実践ノウハウ(requests+json)

はじめに|APIを活用したデータ取得で業務効率アップ

外部APIを使ってデータを取得・活用することは、現代のプログラマーにとって欠かせないスキルのひとつです。例えば天気予報、為替情報、SNSデータなど、ほとんどのサービスがREST APIを通じて外部提供されています。

本記事では、中級者向けに「Python × requests × json」モジュールを使って、APIからデータを取得・加工・保存する一連の流れを実践形式で解説します。


使用ライブラリと事前準備

PythonにはAPI通信に便利な標準・外部ライブラリが豊富にあります。今回は以下の2つを使います。

必要ライブラリ

pip install requests
  • requests:HTTPリクエストを簡単に送信できるライブラリ
  • json:JSON形式のデータを扱う標準ライブラリ(インストール不要)

Step 1|APIの仕様を理解する

まずは、使用するAPIのエンドポイントやパラメータ、レスポンス形式を理解する必要があります。今回は例として「JSONPlaceholder」というサンプルAPIを使用します。

例:記事一覧を取得するAPI

GET https://jsonplaceholder.typicode.com/posts

このエンドポイントにアクセスすると、記事データ(ID, title, bodyなど)の一覧がJSON形式で取得できます。


Step 2|requestsでAPIにアクセスする

まずは基本のGETリクエストを送って、JSONデータを取得してみましょう。

import requests

url = "https://jsonplaceholder.typicode.com/posts"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print(f"{len(data)} 件のデータを取得しました。")
else:
    print(f"エラー:{response.status_code}")

Step 3|取得したJSONを整形・加工する

取得したJSONデータはPythonの辞書やリストとして扱えます。例えば、記事のタイトルだけを抜き出すには以下のようにします。

for post in data[:5]:  # 先頭5件だけ表示
    print(f"ID: {post['id']} | Title: {post['title']}")

Step 4|ローカルファイル(JSON or CSV)に保存する

JSONとして保存

import json

with open("posts.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

CSVとして保存(pandas使用)

import pandas as pd

df = pd.DataFrame(data)
df.to_csv("posts.csv", index=False, encoding="utf-8-sig")

Step 5|パラメータ付きAPIの呼び出し例

以下のように、特定の投稿(例:IDが1)のみ取得することも可能です。

params = {"id": 1}
response = requests.get(url, params=params)

if response.ok:
    print(response.json())

※実際の業務では、APIキーやトークンが必要なケースもあります。その場合はheadersを使って指定します。


よくあるエラーと対処法

エラー内容原因・対処法
status_code != 200APIのURLやパラメータミス。認証エラーなども疑う
json.decoder.JSONDecodeErrorレスポンスがJSON形式でない可能性あり。response.textで確認
ConnectionErrorネットワーク障害またはAPIサーバーがダウンしている

応用例|定期取得してデータベースに保存する(概要)

  • scheduleモジュールを使えば定時取得も可能
  • sqlite3でローカルDBに保存すれば分析も容易に
import schedule
import time

def fetch_and_save():
    # 上記処理を関数にまとめて定期実行
    pass

schedule.every().day.at("09:00").do(fetch_and_save)

while True:
    schedule.run_pending()
    time.sleep(60)

まとめ|API×Pythonで“データを使いこなす人”へ

APIとPythonの組み合わせは、業務効率化・データ分析・システム連携など、あらゆる分野で強力な武器になります。requestsjsonの基本をマスターすれば、あとはAPI仕様を読み解くだけ。ぜひ実案件でも応用してみてください!


関連記事(おすすめ)

タイトルとURLをコピーしました