こんにちは、『INCREMENT P Inside.』の中の人です。
今回は、住所クレンジングAPIをExcelで使う方法の紹介です。
なんだかんだで、データの取りまとめはExcelが現役なところも多く、
仕事をしていると・・・
「大大大好きなExcelで全部処理したい!」
「パパッとRestAPIを叩いて!」
「返ってきたJSONをポンッとパースして!」
「それっぽい表をサクサクッと作ってくれ!」
みたいな声がどこかから聞こえて来ることがあります。(テレワーク中)
読者の皆さんも心当たりあるのではないでしょうか? ありますよね。
ということで、PRも兼ねて、弊社で提供している住所クレンジングAPIを題材に、この声に答えられるかやってみたいと思います。
Excelでパパッと処理するならば、RestAPIをそのまま叩ける関数がほしいですが、ちょうどいいものはぱっと見つかりませんでした。WEBSERVICE関数という惜しいものもありましたが、ヘッダ指定の方法がわかりませんでした。(住所クレンジングAPIは、APIキーをヘッダで指定している)
また、Excelであれば、PowerQueryでデータ読み込みにRestAPIを叩くことができるのですが、関数ライクな使い方はできないので、これも要件にあわず。
諦めてRestAPIのURLとAPIキーを入れると、レスポンスを取得してきてくれるユーザ定義関数をVBAで書いてみます。
Excelを立ち上げて、開発タブ→VisualBasicをクリック、Microsoft VisualBasic for Applicationのウィンドウを立ち上げます。
編集モジュールを追加して、関数のコードを書いていきます。
今回はMicrosoftが提供してくれているXMLHTTPを使いました。
Excelのセルで実際に試してみます。
住所クレンジングサービスのAPI仕様を確認しながら、以下のようにセルにURLを入れています。URLに入れる住所文字列はENCODEURL関数でURLエンコーディングしておきましょう。でないと文字化けします。
=ANORMAPI("https://api-anorm.mapfan.com/v1/"&ENCODEURL("岩手県盛岡市盛岡駅西通2丁目9-1")&".json","API-KEY-VALUE")
結果、無事以下のようなレスポンスとして、取得できました。
バッチリですね。
{
"type": "FeatureCollection",
"query": [
"岩手県盛岡市盛岡駅西通2丁目9-1"
],
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
141.133660,
39.701281
]
},
"properties": {
"query": "岩手県盛岡市盛岡駅西通2丁目9-1",
"place_name": "岩手県盛岡市盛岡駅西通2丁目 9-1",
"pref": "岩手県",
"pref_kana": "イワテケン",
"city": "盛岡市",
"city_kana": "モリオカシ",
"area": "盛岡駅西通",
"area_kana": "モリオカエキニシドオリ",
"koaza_chome": "2丁目",
"koaza_chome_kana": "2チョウメ",
"banchi_go": "9-1",
"building": "",
"building_number": "",
"zipcode": "0200045",
"geocoding_level": 8,
"geocoding_level_desc": "号レベルでマッチしました(8)",
"log": ""
}
}
],
"attribution": "(c) INCREMENT P CORPORATION"
}
当然、JSONテキストのままではExcelで扱いづらいため、パースして表に展開したいです。今回も諦めてVBAで・・とはせず、PowerQueryを活用してみたいと思います。
Excelのセル範囲をテーブルとしてPowerQueryに読むこむにはリボンのデータタブ→「テーブルまたは範囲から」をクリックして、選択範囲を取り込みます。
PowerQueryエディターウィンドウが立ち上がったら、JSONテキストの入った列をJSON解析します。
これでパース完了です。
JSONがパースできたら、住所正規化結果をExcel表形式になるようにクエリしましょう。変換タブの「構造化列」→「展開」を行います。propartiesが入っているfeaturesの要素のみを選択して、展開します。
featuresの中身も入れ子になっているので、更にpropertiesを展開します。
全部展開するとproperties内の要素が横に並んだテーブルになります。ほしかったやつです。ということで、PowerQueryを閉じて読み込みます。
取り込んだ結果は、PowerQueryのクエリ結果として、Excelに表に出てきます。目的達成です!やったね!
宣伝です!
今回のネタで使った住所クレンジングサービスは、住所文字列データを正規化&構造化したり、ジオコーディングして、地図に重ねて分析に利用したりするのに便利なサービスです!
WebAPIサービスなので開発知識がないと使えないのでは?と思われるかもしれませんが、ここで書いたようなExcelや各種OSSツールを用いての導入方法もご提案可能です!
ご興味あればお気軽にご相談ください。
<問い合わせ、無料トライアルのお申込み> https://anorm.mapfan.com/contact/