LoginSignup
8
14

More than 5 years have passed since last update.

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

Posted at

前置き

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

8
14
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
14