今回は、PythonのrequestsライブラリでJSONデータを送受信する方法をご紹介します。
requestsライブラリとJSONデータの概要
Pythonのrequestsライブラリは、HTTPリクエストを簡単に扱える便利なツールです。
特にJSON形式のデータを送受信する場合、Pythonの辞書型との自動変換がスムーズに行えるため、さまざまなAPIとの連携に活用できます。
このライブラリでは、JSON形式のデータを扱う際に以下のようなポイントがあります。
- 送信時:
json
引数にPythonの辞書を渡すだけで自動的にJSON変換される - 受信時: レスポンスオブジェクトの
.json()
メソッドでJSON文字列をPythonの辞書型に変換できる
JSONデータを送信する方法
まずは、POSTリクエストでJSONデータを送信する方法です。
以下の例では、ユーザー名とパスワードを送信するイメージを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import requests url = 'https://example.com/api/login' payload = { 'username': 'example_user', # ユーザー名 'password': 'secure_password' # パスワード } # json引数を使うと、自動的にJSON形式に変換される response = requests.post(url, json=payload) if response.ok: print('送信成功:', response.status_code) else: print('送信エラー:', response.status_code) |
上記のようにrequests.post()
でjson=
引数を指定すると、内部でContent-Type: application/jsonが自動的に設定されます。
そのため、ヘッダーを明示的に追加しなくてもJSON形式で送信できます。
PUTリクエストで更新処理を行う場合
更新処理でデータを送信する場合も、POSTと同様の手順でjson
引数を利用できます。
1 2 3 4 5 6 7 8 9 |
import requests url = 'https://example.com/api/update/123' payload = { 'status': 'completed' # 更新したいステータス } response = requests.put(url, json=payload) print('更新結果:', response.status_code) |
PUTリクエストはリソースの更新、DELETEリクエストはリソースの削除に利用されます。
DELETE時にサーバーから指示がある場合は、同様にjson=
引数でデータを渡します。
JSONデータを受信する方法
次に、GETリクエストでJSONデータを取得する例を示します。
受信したレスポンスからJSONを取り出すには、response.json()
メソッドを利用します。
1 2 3 4 5 6 7 8 9 10 11 |
import requests url = 'https://example.com/api/data' response = requests.get(url) try: # レスポンスのJSONデータをPythonの辞書型に変換 data = response.json() print('受信データ:', data) except ValueError: print('JSONのパースに失敗しました') |
サーバーが返すデータが必ずしもJSON形式とは限らない場合もあるため、ValueError
などをハンドリングできるようにしておくと安心です。
カスタムヘッダーやタイムアウトの指定
APIトークンなどの認証が必要な場合、ヘッダーに情報を付与する必要があります。
また、タイムアウトを設定しておくと、サーバーからの応答が遅い場合でもプログラムが長時間停止することを防げます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import requests url = 'https://example.com/api' headers = { 'Authorization': 'Bearer your_token', # トークン認証 'Accept': 'application/json' # 受け取りたいデータ形式 } payload = { 'key': 'value' } # タイムアウトを5秒に設定 response = requests.post(url, json=payload, headers=headers, timeout=5) if response.ok: print('結果:', response.status_code) else: print('エラー:', response.status_code) |
よくあるエラーや注意点
PythonのrequestsライブラリとJSONを扱う際によく発生するエラーや注意点をまとめます。
- JSONDecodeErrorや
ValueError
:サーバーから受信したデータがJSON形式でない場合、
response.json()
呼び出しでエラーが発生します。 - HTTPエラー:
raise_for_status()
を利用すると、ステータスコードが200番台以外の場合に例外を発生させることが可能です。 - タイムアウト:
通信が長引く場合は
timeout
パラメータを設定し、プログラムの停止を防ぎます。 - SSL証明書の検証:
HTTPS接続で証明書の検証が必要な場合は、
verify
パラメータを利用してください。 - APIの仕様遵守:
使用するAPIのドキュメントをよく読み、正しいエンドポイントとHTTPメソッドを設定しましょう。
また、実際に使用する際は、できるだけエラー処理を細かく行い、レスポンスを常にチェックしておくことをおすすめします。
まとめ
Pythonのrequestsライブラリは、JSONデータの送受信をシンプルに実現できます。
送信時はjson
引数、受信時はresponse.json()
メソッドを使うのがポイントです。
エラー処理やタイムアウトなど、細かい点に気を配れば、より堅牢な実装が可能になります。