LoginSignup
14
14

More than 5 years have passed since last update.

【GAS】郵便局のサイトから郵便番号データをそのままスプレッドシートに取り込む

Last updated at Posted at 2016-08-31

 これから時々GASについて投稿していこうと思います。GASの読み方ですが私は「ギャス」と呼ぶようにしています(「ガス」よりも格好いい響きではないかと)。

 さて、郵便局のサイトのなかにある、郵便番号データのダウンロードページです。
 http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html

スクリーンショット 2016-08-31 17.53.37.png

 通常はここからファイルをドライブにダウンロードして開いてという流れになろうかと思いますが直接ここからスプレッドシートに引っ張ってこれないものかと思い、やってみました。

 全国一括は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行でした。

スクリーンショット 2016-08-31 18.17.02.png

14
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14