PythonでHTTPリクエストしてJSONで受け取る方法
2017-11-28
Python で HTTP リクエストする方法はいくつか考えられますが,結論から言うと Requests が使いやすいと思います.
標準ライブラリ
Python3 の標準ライブラリの中に urllib があり,これを使えば HTTP リクエストを送信することができます.
GET メソッド
import urllib
url = 'https://api.example.com/get?id=123'
response = urllib.request.openurl(url)
ここで得られた response を JSON 形式で取得するときには,同じく標準ライブラリである json が使えます.
import json
json_data = json.loads(response.read())
Python2 で同じことがしたい場合は,urllib.request ではなく urllib2 を利用することになります.
Requests
Python の urllib.request のドキュメントを見ると,より高水準のライブラリとして Requests の利用が推奨されています.
GET メソッド
import requests
params = {'id' : '123'}
url = 'https://api.example.com/get'
response = requests.get(url, params=params)
params でクエリを指定すると自動でエンコードして URL を生成します.
また,この結果を JSON 形式で取得するときに他のライブラリを使う必要がなく,とても簡潔に書くことができます.
json_data = response.json()
POST メソッド
import requests
payload = {'code' : 'a5g4a654'}
url = 'https://api.example.com/post'
response = requests.post(url, data=payload)
GET のときと同じような形で POST もできます.
もし,urllib で POST しようと思ったら次のような書き方になります.(たぶん)
import urllib
url = 'https://api.example.com/get?id=123'
response = urllib.request.Request(url, method='POST')
urllib ではメソッドを指定しなければ GET メソッドでの送信になります.
最後に
urllib に比べると Requests のほうが感覚的に使いやすいのでおすすめです!