今回は、外部のウェブサイトでAPIとして公開されているJSON形式などのデータフィードを、Pythonで取得する方法を紹介しよう。

requestsパッケージをインポートする

PythonからAPIにアクセスするには多くの方法が挙げられるが、中でも手軽に使えるのが今回紹介するrequestsパッケージだ。

まずはライブラリをインポートする。

import requests

住所検索APIを使ってデータを取得する

今回は「郵便番号-住所検索API」を例として使用するので、変数urlにAPIのリクエストURLを設定する。

url = 'https://api.zipaddress.net/'

次にrequestsのgetメソッドを使ってAPIにアクセスする。
getメソッドは引数に指定したURLへリクエストを送り、戻り値としてレスポンスオブジェクトを返す。

res = requests.get(url)
# <Response [200]>

jsonメソッド

レスポンスオブジェクトのjsonメソッドを使うと、Pythonオブジェクトを含むディクショナリが戻される。

data = res.json()
# {'code': 400, 'message': 'zipcode parameter is not exists.'}

今回リクエストしたURLには特にパラメータを指定していなかったので、エラーコード400が返された。
messageを読むと、どうやらzipcodeのパラメータが必須のようだ。

変数urlを下記のとおり改変し、再度jsonメソッドを実行してみよう。

import requests

url = 'https://api.zipaddress.net/?zipcode=5770056'
res = requests.get(url)
data = res.json()
# {'code': 200,
#  'data': {'pref': '大阪府',
#   'address': '東大阪市長堂',
#   'city': '東大阪市',
#   'town': '長堂',
#   'fullAddress': '大阪府東大阪市長堂'}}

郵便番号は適当に実在する番号を指定してくれ。
ハイフンは有り無しどちらでも良いようだ。

変数dataを見ると、レスポンスコード200が返り、正しく住所検索がおこなわれていることが分かる。

取得したJSONをpandasデータフレームに変換する

pandasを使えば取得したJSONデータをデータフレームに変換し、高度な分析をおこなうこともできるだろう。

import requests
import pandas as pd

url = 'https://api.zipaddress.net/?zipcode=577-0056'
res = requests.get(url)
data = res.json()

df = pd.DataFrame(data, columns=['data'])
#                   data
# address         東大阪市長堂
# city              東大阪市
# fullAddress  大阪府東大阪市長堂
# pref               大阪府
# town                長堂