RequestsはPythonでHTTPリクエストを送信するためのライブラリです。HTTP通信を簡単に行うことができ、API通信やWebスクレイピングなどに利用されます。
JSONとは
JSONはJavaScript Object Notationの略で、軽量なデータ交換フォーマットの一つです。データの表現がシンプルで、多くのプログラミング言語で利用されています。Requestsを使ってAPI通信を行う場合には、JSONを利用することが多いです。
RequestsでのHeaderの設定方法
HTTPリクエストにはHeaderと呼ばれる情報が含まれています。Headerには、ユーザーエージェントやAccept-Languageなどの情報を記述します。Requestsを利用する場合には、Headerを指定することができます。
import requests url = "https://example.com/api/v1/users" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", "Accept-Language": "ja-JP" } response = requests.get(url, headers=headers) print(response.status_code) print(response.json())
上記の例では、User-AgentとAccept-LanguageをHeaderに指定しています。
RequestsでのJSON Dataの扱い方
API通信を行う場合には、JSON形式でデータを送信することが多いです。Requestsを利用してJSONデータを送信する場合には、jsonパラメータを指定します。
import requests url = "https://example.com/api/v1/users" data = { "name": "John Smith", "age": 30, "email": "john.smith@example.com" } response = requests.post(url, json=data) print(response.status_code) print(response.json())
上記の例では、JSON形式で”name”、”age”、”email”の情報を送信しています。
RequestsにおけるJSONの文字化け対策
Requestsを利用してJSONを取得する場合に、文字化けが発生することがあります。その場合には、Responseオブジェクトのencoding属性を指定することで、文字化けを防止することができます。
import requests url = "https://example.com/api/v1/users" headers = {"Accept-Encoding": "gzip, deflate"} response = requests.get(url, headers=headers) response.encoding = response.apparent_encoding print(response.json())
上記の例では、Responseオブジェクトのencoding属性にapparent_encodingを指定しています。
実践例:RequestsとJSONを利用したAPI通信
実際にRequestsとJSONを利用してAPI通信を行う例を示します。ここでは、東京の天気情報を取得します。URLはダミーになります。
import requests url = "https://example.com/data/2.5/weather" params = { "q": "Tokyo,jp", "appid": "YOUR_API_KEY", "lang": "ja", "units": "metric" } response = requests.get(url, params=params) print(response.status_code) print(response.json())
上記の例では、”q”パラメータに”Tokyo,jp”を指定しています。また、”appid”パラメータには、自分のAPIキーを指定する必要があります。
まとめ
Requestsを利用することで、Pythonで簡単にHTTP通信を行うことができます。JSONを利用することで、API通信を行う場合にデータのやりとりが簡単になります。また、文字化けが発生する場合には、Responseオブジェクトのencoding属性を指定することで解決することができます。