Google Apps ScriptでREST APIを使って郵便番号住所変換スプレッドシート関数を作る

★気に入ったらシェアをお願いします!


zip

photo credit: d_t_vos Week 40 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptを使ってスプレッドシートの色々な自作関数を作っています。

前回はこちらの記事。

Google Apps Scriptで西暦を和暦変換するスプレッドシート関数を作る
Google Apps Scriptを使ってスプレッドシートの自作関数を作る方法です。今回は西暦から和暦を求める関数の作成方法。if~else if文、比較演算子、数値と文字列の演算なども含めてお伝えします。

西暦から和暦を求めるスプレッドシート関数を作りました。

今回は、これまた便利なスプレッドシート関数だと思うのですが、Google Apps Scriptで郵便番号から住所を求めるスプレッドシート関数を作ります。

郵便番号APIを活用しますので、初めての方でもトライできるREST APIの使い方の勉強にもなると思います。

では、いってみましょう!

スポンサーリンク

郵便番号から住所を求めるスプレッドシート関数

早速ですが、郵便番号から住所を求めるスプレッドシート関数ZIP_ADDRESSのスクリプトはこちらです。

たったのこれだけです。

このスクリプトをスクリプトエディタに仕込んだ上で、スプレッドシートで使ってみましょう。

郵便番号から住所を求めるスプレッドシート関数

=ZIP_ADDRESS(郵便番号)

とすると、その住所が求められます。

便利でしょ?

では、このスクリプトを説明していきますね。

郵便番号APIの概要

今回は郵便番号APIというREST形式のWebAPIを使っています。

郵便番号APIは株式会社アイビスが運営する「zipcloud」という郵便番号データ配信サービスが提供するものです。

  • API
  • REST
  • json

など、知っておく必要があるものがいくつかありますので以下解説をしていきますね。

APIとは

APIとは「Application Programming Interface」の略で、

あるソフトウェアの機能やデータを、外部のプログラムから呼び出して利用するための手法

を言います。

今、APIエコノミーという言葉が流行ワードになっていますが、Googleの各種サービス、Facebook、Twitterなどの大手ITサービスをはじめ様々なサービスのAPIがどんどん公開されています。私たちは、それらのサービスのAPIの使い方さえ知っていれば、簡単にその一部機能やデータを活用することができるんですね。

郵便番号APIはWeb経由で使用するAPIですから、WebAPIの一つということになります。

そして、その動作としては郵便番号を渡してリクエストをすると、その住所などの情報がレスポンスとして返ってくる、というものになります。

RESTとは

WebAPIにはRESTとSOAPという二種類の形式が一般的です。

RESTは「REpresentational State Transfer」の略なのですが、簡単に言うと

定められたURLに対してリクエストを送信して、XMLやjson形式でレスポンスを受け取る形式

で、WebAPIの多くがREST形式で提供されています。

郵便番号APIもREST APIで提供されています。

郵便番号APIのリクエストURLは

http://zipcloud.ibsnet.co.jp/api/search?zipcode={zipcode}

というルールになっていまして、{zipcode}の箇所に7桁の郵便番号を入力するんです。

例えば、郵便番号に「7830060」を指定して

http://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060

とリクエストを送ると、その住所などの情報がレスポンスとして返ってくるというわけです。

面倒そうに見えますが、郵便番号以外はコピペでOK。覚える必要はないです。

jsonとは

REST形式のAPIで返ってくるレスポンスは主にjson形式、XML形式のものです。

json

JavaScriptでの扱いが簡単なプログラム間でのデータ交換フォーマット

です。郵便番号APIのレスポンスもjson形式です。

例えば、前述のURLにリクエストを送ると、以下のようなjsonデータをレスポンスとして受け取ります。

この中から、住所に関連するデータを取り出せればよいということになりますね。

郵便番号ZIPのサイトには、レスポンスフィールドが以下のように説明されていますので、合わせてご覧ください。

郵便番号APIのレスポンスフィールド

Google Apps ScriptでREST APIを利用する

ここまで解説してきました通り、REST APIを利用する場合は

  1. 指定のURLに対してリクエストを送りレスポンスを受け取る
  2. 受け取ったレスポンスから欲しい情報を取り出す

という手順になります。

では、今回の郵便番号APIの例で一つ一つ確認してみましょう。

UrlFetchApp.fetchメソッドでREST APIにリクエストを送る

まず、REST APIにリクエストを送る場合はUrlFetchApp.fetchメソッドを使います。

UrlFetchApp.fetch(URL)

URLは前述の郵便番号APIのリクエストURLですね。今回はスプレッドシート関数ですから、関数ZIP_ADDRESSの引数zipを{zipcode}に使用します。

UrlFetchApp.fetchメソッドでリクエストしますから、当然レスポンスも返って来ます。今回のスクリプトでは

として、変数responseにレスポンスを格納しています。

getContentTextメソッドでレスポンスからテキストデータを取り出す

次に、レスポンスから欲しい情報を取り出していきます。

まず、レスポンスがresponseという変数に入っているのですが、これはHTTPResponseというオブジェクトになります。この中から、純粋なjsonデータを取り出すために、getContentTextメソッドを使います。

レスポンス.getContentText()

JSON.parseメソッドでjsonデータを解析

次にJSON.parseメソッドを使い、jsonデータを解析してオブジェクトに格納します。これをすると、欲しいフィールドの値を取り出しやすくなるのです。

JSON.parse(レスポンス.getContentText())

getContentTextメソッドとJSON.parseメソッドはほぼセットで使うので、まとめて覚えておくと良いです。

jsonオブジェクトから値を取り出す

ここまで来ればあと少しです。

JSON.parseしたjsonオブジェクトは「.(ピリオド)」を使って辿れば欲しいデータを取り出すことができます。

例えば、郵便番号APIのレスポンスからstatusの値を取り出そうとしたら

とします。address1の値を取り出したいのなら

とします。resultsが配列になっていますね。郵便番号APIのレスポンスフィールドによると、resultsは配列になっていますので、最初の要素[0]を指定しています。

(ほとんどの場合、resultsの配列の要素数は1だと思うのですが、複数の場合ってどんなときですかね?)

フィールド名でいうと、address1,address2,address3を連結したものを、関数の返し値としてリターンをします。

まとめ

Google Apps Scriptで郵便番号APIを使って郵便番号から住所を求めるスプレッドシート関数を作りました。

郵便番号APIはREST APIの中でも比較的簡単ですから、REST APIを初めて触る方でも良い練習になると思います。使いどころも多そうですしね。

もうお気づきだと思いますが、REST APIなどの活用は完全クラウドのスプレッドシートならではですよね。ローカルで動作するエクセルなどではこうはいきません。

得意・不得意を見極めて、ケースバイケースで使い分けるのが良いですね。

さて、次回ですが、また便利で面白いスプレッドシート関数とその作り方を思いついたらお伝えしますね。

どうぞお楽しみに!

連載目次:Google Apps Scriptで自作スプレッドシート関数

本シリーズではGoogle Apps Script初心者向け、自作のスプレッドシート関数を作っていきます。一からとっても丁寧な解説を心がけておりますので、どうぞチャレンジしてみて下さい。
  1. 初心者でも簡単!Google Apps Scriptでスプレッドシートの自作関数を作る方法
  2. Google Apps Scriptで西暦を和暦変換するスプレッドシート関数を作る
  3. Google Apps ScriptでREST APIを使って郵便番号住所変換スプレッドシート関数を作る