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属性を指定することで解決することができます。





