pythonのrequestsを使ってAPI通信の基礎構文・サンプルコードを解説していきたいと思います。
ふとAPIをたたきたい時に、忘れてしまっており都度調べて実装するのが面倒だったので、すぐにコピペできるようにパターンごとに作成しました。
requestsとは
requestsはPythonでHTTPリクエストを簡単に扱うためのライブラリで、APIにアクセスしたり、データを送受信したりする際に非常に便利です。具体的には、RESTful APIを利用する際のクライアントとして使います。
記述もかなりシンプルで、個人的にはJavascriptのfetchやCurlコマンドより分かりやすいので、使いやすいと思っています。
事前準備
まず、requestsをインストールする必要があります。通常、以下のコマンドでインストールできます
pip install requests
requestsのインポートをします。
import requests
記述パターン(コピペ用)
1. GETリクエスト
シンプルにGETリクエストを実行します。
status_codeを使えば、OK(200)、NG(4XX、5XX)の情報で処理を分岐させることもできます。
response = requests.get('https://www.example.com')
print(response.status_code) #ステータスコード
print(response.text) #レスポンス本文
print(response.json()) #JSONから辞書へ変換
2. GETリクエスト(クエリパラメータ)
GETリクエストでパラメタを指定する場合は、引数にparamsを使用します。
params = {'param1': 'python', 'param2': 'requests'}
response = requests.get('https://www.example.com', params=params)
3. GETリクエスト(カスタムヘッダー)
カスタムヘッダーを使用する場合は、headersを引数に設定します。API認証などヘッダー情報が必要な場合に定義します。
headers = {'User-Agent': 'MyApp', 'Authorization': 'Bear Token'}
response = requests.get('https://www.example.com', headers=headers)
4. POSTリクエスト(フォームデータ)
フォームデータは、Contet-Typeヘッダーがapplication/x-www-form-urlencodedの場合に設定されます。dataは辞書型でURLエンコードされて送信されます。
key1=value1&key2=value2
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com', data=data)
5. POSTリクエスト(JSONデータ)
JSONデータはContent-Typeがapplication/jsonに設定されます。データは辞書からJSONに変換されて送信されます。
{“key1”: “value1”, “key2”: “value2”}
json_data = {'name': 'John', 'age': 30}
response = requests.post('https://www.example.com', json=json_data)
6. エラー処理
API通信はクライアントもしくはサーバー側などで通信エラーが発生する可能性があるので、エラー処理を実装しておきます。raise_for_status()はステータスコード200以外の場合にエラーを起票します。
try~except文で、エラーハンドリングを行います。
try:
response = requests.get('https://api.github.com/nonexistent')
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(f"エラー内容: {err}")