Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@Amtkxa

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What are the problem?