Python
WebAPI
python3

PythonによるWebAPIからのデータ取得

前置き

O'Reilly Japan の「PythonとJavaScriptではじめるデータビジュアライゼーション」を参考に、勉強をしています。

今回は、OECD(経済能力開発機構)の提供するデータセットを、OECDのWebAPIにより取得します。

OECD APIについて

OECD API は、HTTPメソッドGETにより取得操作を指定する RESTful APIだそうです。

URLの例

http://stats.oecd.org/sdmx-json/data/QNA    # ONA(Quarterly National Accounts : 四半期国民経済計算)データセット
    /USA+JPN.GDP+B1_GE.CUR+VOBARSA.Q        # 位置、主題、スケール、頻度の4つの特製
    /all?startTime=2016-Q1&endTime=2017-Q1  # 期間

データセット名とドット区切りの特性でクエリを構築しています。
それぞれの特性は、+で区切って複数の値を指定することができます。
URLは標準的なHTTPパラメータの指定(?で始まり&で区切る)も可能です。

requests で RESTful APIを使用した実装例

OECD(経済協力開発機構)の提供するデータセットを取得する関数

oecd_api.py
import requests

OECD_ROOT_URL = 'http://stats.oecd.org/sdmx-json/data'

#OECD API用のURLを作成してレスポンスを返す
def make_OECD_request(dsname, dimensions, params=None, root_dir=OECD_ROOT_URL):
    if params is None:
        params = {}

    dim_args = ['+'.join(d) for d in dimensions]
    dim_str = '.'.join(dim_args)

    url = root_dir + '/' + dsname + '/' + dim_str + '/all'
    print('Requesting URL: ' + url)
    return requests.get(url, params=params)

2016Q1 から 2017Q1 までの米国と日本の経済データを取得

>>> import oecd_api
>>>
>>> # データ取得
>>> response = oecd_api.make_OECD_request('QNA',(('USA', 'JPN'),('GDP', 'B1_GE'),('CUR', 'VOBARSA'), ('Q')),{'startTime':'2016-Q1', 'endTime':'2017-Q1'})
Requesting URL: http://stats.oecd.org/sdmx-json/data/QNA/USA+JPN.GDP+B1_GE.CUR+VOBARSA.Q/all

>>> # レスポンスのステータスコード
>>> response.status_code
200

>>> # エンコードされたURL
>>> response.url
'http://stats.oecd.org/sdmx-json/data/QNA/USA+JPN.GDP+B1_GE.CUR+VOBARSA.Q/all?startTime=2016-Q1&endTime=2017-Q1'

>>> # JSON形式で取得
>>> json_data = response.json()

参考

OECDのWebAPIのドキュメントページ(API documentation (SDMX-JSON))
https://data.oecd.org/api/sdmx-json-documentation/

Requests クイックスタート
http://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/#url