これから時々GASについて投稿していこうと思います。GASの読み方ですが私は「ギャス」と呼ぶようにしています(「ガス」よりも格好いい響きではないかと)。
さて、郵便局のサイトのなかにある、郵便番号データのダウンロードページです。
http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html
通常はここからファイルをドライブにダウンロードして開いてという流れになろうかと思いますが直接ここからスプレッドシートに引っ張ってこれないものかと思い、やってみました。
全国一括は12万件超あり、さすがにGASでは読取りに5分くらいかかってしまいましたが、個々の都道府県ならわりとスムーズにできました。
東京都を例にやってみました。
コード.gs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
function getPostData() {
// zipファイル取得
var url = "http://www.post.japanpost.jp/zipcode/dl/kogaki/zip/13tokyo.zip";
var zipblob = UrlFetchApp.fetch(url).getBlob();
// 解凍
var unzipblob = Utilities.unzip(zipblob);
// データ取得
var data = unzipblob[0].getDataAsString("Shift_JIS");
// 行ごとに配列に格納
var ary = data.split("\n");
// 最後の空配列除去
ary.pop();
// 2次元配列に組み直し
var ary2 = [];
var ary3 = [];
for (var i in ary) {
ary2 = ary[i].split(",");
ary3.push(ary2);
ary2 = [];
}
// シートに反映
sh.getRange(1,1,ary.length,15).setValues(ary3);
}
実はUtilities.parseCsv()を使えばもっとシンプルにできます。
コード.gs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
function getPostData() {
// zipフィアル取得
var url = "http://www.post.japanpost.jp/zipcode/dl/kogaki/zip/13tokyo.zip";
var zipblob = UrlFetchApp.fetch(url).getBlob();
// 解凍
var unzipblob = Utilities.unzip(zipblob);
// データ取得
var data = unzipblob[0].getDataAsString("Shift_JIS");
// 2次元配列に転換
var ary = Utilities.parseCsv(data);
// シートに反映
sh.getRange(1,1,ary.length,15).setValues(ary);
}
取り込んだ結果です。3810行でした。