#背景
スクレイピングで取得したとある複数の企業情報において、住所はあるが、郵便番号がないパターンがあった。元々、スプレッドシートに情報をまとめていたので、GASを使って住所から郵便番号を取得してみた。
#そもそもGASって
初めて使うので、ちょっと説明。
Google Apps Script(略称GAS/ガス)とは、Googleによって開発されたスクリプトプラットフォームである軽量のアプリケーション開発のためのGoogleのワークスペースプラットフォーム。 主にGoogleのサービスを自動化するスクリプト言語である。JavaScriptがもとになっているため汎用性が高く、開発環境はGoogle Chromeだけでいいのでプログラミング初心者が始めやすい言語の1つである。
GASの開発方式には2種類あるため、作りたいプログラムによって使い分ける必要がある。
- スタンドアロン型(ドキュメントやスプレッドシートなどと連携を行わなくてもよい場合)
- コンテナバインド型(ドキュメントやスプレッドシートなどと連携を行う場合)
今回はコンテナバインド型で実施。
#使い方
- Googleスプレッドシートを新規作成
- ツールタブから「スクリプトエディタ」を開く
- コード書く
#スプレッドシートの中身
情報取得日 | 会社名 | 住所 | 郵便番号 |
---|---|---|---|
2021/11/1 | A 株式会社 | 東京都新宿区ほげほげ | |
2021/11/2 | B 株式会社 | 東京都港区ほげほげ | |
2021/11/3 | C 株式会社 | 東京都千代田ほげほげ |
#コード
function searchZip() {
var response;
var zip;
var mDiff;
var mStart = new Date();
var url = 'https://google.co.jp/maps/search/';
// シート名を記入
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('住所から郵便番号');
// 必要なデータ(住所と郵便番号の2列)を配列に
var lastRow = sheet.getLastRow();
var values = sheet.getRange(2,3,lastRow-1,2).getValues();
try {
values.forEach(function(value) {
// value[0]:住所
// value[1]:郵便番号
// 既に入力済みは無視
if (value[1].length > 0) {
return;
}
// 6分の制限時間を超えないよう5分くらいでやめる
mDiff = new Date() - mStart;
if (mDiff > 300000) {
return;
}
// グーグルマップで検索
response = UrlFetchApp.fetch(url + value[0]).getContentText();
// 検索結果に郵便番号があるかチェック
zip = response.search('〒');
if (zip >= 0) {
// 郵便番号を取得
value[1] = response.substr(zip + 1, 8);
} else {
// 取得できなかった住所はログに
Logger.log(value[0]);
}
// 1秒間隔でAPIアクセス
Utilities.sleep(1000);
});
} catch(e) {
// 何かエラーがあれば出力
Logger.log(e);
}
// データを戻す
sheet.getRange(2,5,lastRow-1,2).setValues(values);
}
GAS上でコードを書いて保存して実行する。
すると、スプレッドシート内の郵便番号が追記されていく。
便利。自動化万歳。