PythonでAPI操作をマスター!requestsライブラリの使い方(GET・POST・認証)
Pythonのrequestsライブラリを使ったAPI操作を解説。GET、POST、JSONデータの送受信、認証(Basic認証・APIキー)の実装方法をサンプルコード付きで紹介。
はじめに
PythonでAPIを操作する際に最もよく使われるライブラリが requests です。この記事では、requests を使った基本的なGETリクエスト、POSTリクエスト、JSONデータの扱い方、そして認証(Basic認証やAPIキー)の実装方法を、実際のコード例とともに解説します。
requestsライブラリのインストール
requests は標準ライブラリではないため、事前にインストールが必要です。
pip install requests
インストール後は、スクリプト内で import requests として利用します。
基本的なGETリクエスト
最もシンプルなGETリクエストの例です。公開API(例:JSONPlaceholder)に対してリクエストを送信します。
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code) # 200
print(response.json()) # JSONデータをPythonの辞書として取得
response.status_code でHTTPステータスコードを確認できます。response.json() はレスポンスボディをJSONとしてパースし、Pythonの辞書(またはリスト)を返します。
クエリパラメータの付与
APIにクエリパラメータを渡すには、params 引数に辞書を指定します。
params = {'userId': 1, 'id': 1}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
print(response.url) # 実際のURL: https://jsonplaceholder.typicode.com/posts?userId=1&id=1
print(response.json())
POSTリクエストでデータを送信
POSTリクエストでは、data または json 引数を使ってデータを送信します。
フォームデータとして送信
data = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', data=data)
print(response.status_code) # 201
print(response.json())
JSONとして送信
json 引数を使うと、自動的にJSON形式に変換され、Content-Typeヘッダーが application/json に設定されます。
import json
data = {'title': 'foo', 'body': 'bar', 'userId': 1}
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
print(response.status_code) # 201
print(response.json())
レスポンスの処理
ステータスコードの確認
if response.status_code == 200:
print('成功')
elif response.status_code == 404:
print('リソースが見つかりません')
エラーハンドリング
raise_for_status() を使うと、ステータスコードがエラー系(400以上)の場合に例外を送出します。
try:
response = requests.get('https://jsonplaceholder.typicode.com/invalid')
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(f'HTTPエラー: {err}')
認証の実装
Basic認証
auth パラメータにユーザー名とパスワードのタプルを渡します。
from requests.auth import HTTPBasicAuth
response = requests.get('https://api.example.com/data', auth=HTTPBasicAuth('user', 'pass'))
<h1>簡略記法: auth=('user', 'pass')でも可</h1>
APIキー認証
APIキーをヘッダーに含める一般的な方法です。
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
response = requests.get('https://api.example.com/data', headers=headers)
またはクエリパラメータとして渡す場合もあります。
params = {'api_key': 'YOUR_API_KEY'}
response = requests.get('https://api.example.com/data', params=params)
タイムアウトの設定
タイムアウトを設定しないと、応答がない場合にプログラムが停止する可能性があります。timeout パラメータで秒数を指定します。
response = requests.get('https://api.example.com/data', timeout=5)
セッションの利用
複数のリクエストで接続を再利用したり、共通のヘッダーを設定するには Session オブジェクトを使います。
with requests.Session() as session:
session.headers.update({'Authorization': 'Bearer YOUR_API_KEY'})
response1 = session.get('https://api.example.com/endpoint1')
response2 = session.get('https://api.example.com/endpoint2')
まとめ
この記事では、Pythonの requests ライブラリを使ったAPI操作の基本を解説しました。
requests はシンプルで直感的なAPIを提供しており、多くのAPIクライアントとして利用されています。ぜひ実際のプロジェクトで活用してみてください。