12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google マイマップのバックアップを Google Apps Script で定期的に取得する

Posted at

背景

友人達と Google マイマップ を共有し、身内用の ツーリングマップル のようなものを作成しています。
おかげさまで、かなりピンが増えて凄いことになってきました...

マイマップを使ってみて、以下のような欠点があることが分かりました。

  • 編集履歴が残らない。( => 誰が編集したかが分からない )
  • レイヤがワンアクションで簡単に削除できてしまう

友人のみで運用しているとはいえ、誤操作のロールバックができないのは非常にまずいと思い、
定期的に Google Drive にバックアップを取得する方法を考えました。

使用したツール

  • Google Apps Script (以下 GAS)
  • Google Drive

定期バックアップ実現までの手順

1. マイマップの KMZ 形式でのエクスポートリンクを取得

注意: 仕様が公開されているわけではないので、今後仕様変更の可能性も高いので注意してください。
(1) マイマップの編集画面から、 「KML / KMZ にエクスポート」 を選択します。
image.png

(2) 何にもチェックを入れないまま、ダウンロードします。 KMZ ファイルがダウンロードできます。
この画面も結構仕様が変わる様子なので、今後微妙に内容が変わるかもしれません。
image.png

(3) ダウンロードしたファイルの情報から、入手先 URL を取得します。
以下は Mac でファイルの 「情報を見る」 で確認したところです。
Windows でもファイルのプロパティを開くと詳細情報タブあたりにあったはずです。
image.png

(4) (3) の URL の &cid までの部分を抜き出します。
これが KMZ ファイルを直接ダウンロードできるリンクになります。
mid... map id ですかね
https://www.google.com/maps/d/u/1/kml?hl=ja&mid=[ユニークなIDっぽい文字列]

(5) マップの共有範囲を 「リンクを知っている全員」 に変更
忘れがちなので注意!
「共有」 → 「アクセスできるユーザー」 → 「変更」 で共有範囲の変更ができます。
image.png

2. バックアップスクリプト作成

(1) Google Drive にバックアップ用フォルダを作っておきます。
一番上の階層にフォルダを作りました。
image.png

(2) https://script.google.com/ から 「新規スクリプト」 を作成します。
image.png

(3) バックアップを実行するスクリプトを記述します。

コード.gs
function myFunction() {
  var dir = DriveApp.getFoldersByName("[Google Drive 保存先フォルダパス]").next();
  var url = "[1. (4) で得たダウンロードリンク]";
  var response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
  if (response.getResponseCode() == 200) {
    var formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy_MMdd_HHmm");
    var blob = response.getBlob().setName("mapbak_" + formattedDate + ".kmz");
    dir.createFile(blob);
  }
}

Google Drive 保存先フォルダパスは一番上の階層のフォルダなので "mapbaktest" だけで十分です。
setName のバックアップファイル名はお好みで調整してください。

(4) 実行してみます。
実行時プロジェクト名入力を求められたり、権限を要求されたりしますが、適当に入力や承認してください。
(もちろん権限承認は内容を精査してた上で行ってください)
実行時エラーが出なければ、 Drive の保存先フォルダを確認してみてください。
エラーが出た場合は、 Logger.log を駆使して response あたりを確認してみるといいでしょう(適当)
image.png
これで、 GAS を実行するだけで KMZ ファイルがバックアップできるようになりました。

スクリプトの定期実行設定

このままでは毎日手動で実行しにこないと駄目なので、自動的に実行するようにします。

矢印のマークから 「プロジェクトのトリガー」 を設定できます。
image.png

一例ですが、以下の設定で 「毎日」、 「AM 4~5 時の間」 に実行されるようになります。
image.png

毎日きっちりの時間に動作させることもできるのですが、ここでは説明しません。

以下、毎日動いてる様子
image.png

応用

取得した最新の KMZ から県ごとのピン数を集計し、人気の県ランキングを作るみたいなこともできます。
今後気力があったら書きます。
(.KMZ = .ZIP ファイルなので、 unzip などで解凍することで、ピンの情報が格納されている XML ファイルが得られます)

おわりに

  • GAS は超便利
  • 「GAS で操作しやすいから」 は Google のサービスを選択する十分な理由になりそう
  • マイマップも楽しいので是非使ってみて下さい
12
13
0

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
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?