PythonでHTTPリクエストしてJSONで受け取る方法

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 のほうが感覚的に使いやすいのでおすすめです!