[Python]RequestsとJSON(header、dataの設定、文字化け)

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