【Python】Web APIからデータを取得する(リクエスト送信とレスポンス解析)

時計 2021.09.20 / 時計

【Python】Web APIからデータを取得する(リクエスト送信とレスポンス解析)

Web APIを活用することで、様々な機能を自身のプログラムやWebサイトで簡単に利用できるようになります。

主にデータ収集(天気予報や株データ、レストラン情報など)に使われていることが多いです。

本記事では、PythonでWeb APIにリクエストを送信し、Web APIが返すレスポンスから情報を読み取る方法について解説していきます。

本記事を通して以下の知識を学べます。

学べる知識
  • Web APIについて
  • Web API利用時に使用するモジュール(request、json)
  • 郵便番号検索APIの利用方法

Web API

Web APIとは

API(Application Programming Interface)とは、
Webアプリケーションのソフトフェアを外部に提供(共有)する仕組みのことです。

公開されたサービスを利用することで、誰でもよりよいサービス(アプリケーション)を開発できるようになります。

Web APIのようなネットワーク上で提供されているサービスを自身のサービスに組み合わせることをマッシュアップと呼びます。

ネットワーク上で公開されているAPIを利用して、膨大なデータベースをあたかも自身のアプリケーションの一部のように使えます。

Web APIとはHTTP通信を経由してデータの受け渡しを行います。

HTTP通信を行う代表的なソフトとしてはWebブラウザです。WebブラウザはサーバーとHTTP通信を介して情報の受け渡しを行っています。

Pythonではブラウザを利用しなくてもHTTP通信をWeb APIに対して行うことができます。

またHTTP通信で取得したデータはほとんどの場合でJSON形式となっております。
JSONについて詳しく知りたい方は以下記事をご参照ください。

PythonのWebフレームワークであるDjangoにWeb APIの機能を追加したい方は以下記事をご参照ください。

Web APIを公開しているサービス

Web APIを公開しているサービスは様々あります。

その一部を以下に記します。

  • Twitter
  • Slack
  • ぐるなび
  • Google Search Console
  • LINE
  • 郵便番号検索

本記事では郵便番号検索を利用したAPIの利用方法を解説します。

Web APIの利用時に使用するモジュール

requestモジュール

HTTP(Hyper Text Transfer Protocol)通信経由でWeb APIにリクエストを送るには、requestsモジュールを利用します。

requestsモジュールはpipでインストールする必要があります。Anacondaでは初めから組み込まれているのでこれは必要ありません。

pip install requests

スクリプトでは先頭でrequestsモジュールをインポートしてください。

import requests

スクリプトからWeb APIにリクエストを送るためにはrequest関数を使用します。

構文

request(method, url, **kwargs)

Web APIとのHTTP通信には次の4つのHTTPメソッドを主に使用します。

メソッド 説明
GET リソースの取得(READ)
POST リソースの作成(CREATE)
PUT リソースの更新(UPDATE)
DELETE リソースの削除(DELETE)

引数kwargsには「オプション名:値」形式でオプションを指定します。

オプション 説明
params クエリ
data リクエスト本文
headers リクエストヘッダー
files ファイル
timeout タイムアウト時間

HTTP通信において、request関数ではなくrequests.getrequests.postといった関数を利用することもできます。

jsonモジュール

Web APIからレスポンスで返ってくるデータはJSON形式です。

JSON形式のデータをPythonで扱うためにはjsonモジュールを利用します。

PythonでJSONデータの操作方法(読み込み、書き込みなど)については以下記事をご参照ください。

Web APIを利用する前に確認すること

Web APIを使用する前に、必ずそのAPIサービスの仕様書を確認しましょう。
特に以下の項目はWeb APIと通信を行う際に必要になりますので、事前に確認しておきましょう。

  • リクエストするURL
  • リクエストするパラメーター
  • レスポンスで返ってくるフィールド

Web APIを利用するために、仕様書を理解して自身のサービスに実装するようにしましょう。

Web APIを実際に利用する

実際にPythonアプリケーションを通して、Web APIを利用してみましょう。

Web APIには郵便番号検索APIを使用します。

郵便番号検索API

郵便番号検索APIを利用することで、郵便番号から住所などの情報を取得することができます。

ここまで学んだrequestモジュールとjsonモジュールを利用した、次の流れでAPIからデータを取得するプログラムを作成します。

  1. 郵便番号検索APIに検索したい郵便番号を含んだリクエストを送る
  2. 返ってきたResponseオブジェクトをPythonの値に変換する
  3. pprintできれいに表示する

プログラムのソースコードを以下に記します。

import requests
import json
import pprint

url = 'https://zipcloud.ibsnet.co.jp/api/search'

params = {'zipcode':'2330008'}

res = requests.get(url, params=params)

data = json.loads(res.text)
pprint.pprint(data)
出力値

{
  'message': None,
  'results': [{'address1': '神奈川県',
    'address2': '横浜市港南区',
    'address3': '最戸',
    'kana1': 'カナガワケン',
    'kana2': 'ヨコハマシコウナンク',
    'kana3': 'サイド',
    'prefcode': '14',
    'zipcode': '2330008'}],
  'status': 200
}

Responseオブジェクトのres.textにはJSON形式の文字列が格納されています。
このデータをjson.loads()関数でPythonの値に変換しています。

変換したデータはpprint.pprint()で表示しています。

重要

pprint.pprint()はprint()に比べて、辞書の内容をより見やすく表示します

Python値に変換したjsonからresultsだけを取得するには次のように記述します。

pprint.pprint(data['results'][0])
出力値

{'address1': '神奈川県',
'address2': '横浜市港南区',
'address3': '最戸',
'kana1': 'カナガワケン',
'kana2': 'ヨコハマシコウナンク',
'kana3': 'サイド',
'prefcode': '14',
'zipcode': '2330008'}

上記の結果から、県だけを抜き出して取得したいときは次のように記述します。

pprint.pprint(data['results'][0]['address1'])
# '神奈川県'

このようにしてWeb APIから返ってきたレスポンスから、欲しいデータを取得していきます。

まとめ

本記事「【Python】Web APIからデータを取得する(リクエスト送信とレスポンス解析)」はいかがでしたか。

Web APIを利用することで難しい開発を1からすることなく、すぐに自身のサービスに組み込むことができます。

非常に便利な仕組みなので、ぜひ使いこなしてより良いサービスの開発に努めてください。