移動履歴を蓄積してみる(その3)
※2020/09追記
この企画、最終的に「逆ジオコーディング」のために利用していたサイトが無くなったようなので、現在はこの方法は利用できません。
一応記録としては残しておきます。
前回でとりあえず位置情報の蓄積に関して最低限の体裁が整いました。
今回は取得した位置情報(緯度/経度)を地名に変換してみたいと思います。
初めて知りましたが「逆ジオコーディング」って言うらしいですね。
色々調べたら、ここのサイトを利用するのが良さそうです。
「Googleスプレッドシート」上のデータの操作と言うことで、今回は「Google Apps Script」を使ってみたいと思います。
とは言ってもあまり難しいことはしたくないので、「先人の知恵」を拝借します。
参考にしたのはここ。
どうやら「UrlFetchApp.fetch()」と「getContentText()」を使うと指定したURLのページのHTMLを取得することができるようです。
それらを「スプレッドシート上のデータ入出力」的なスクリプトに組み込んでやれば良さそうです。
この辺を参考に見様見真似でやってみました。
やってることは
・シート上の緯度/経度を取得
・取得した緯度/経度を含む検索URLを生成
・生成したURLを実行して結果データを取得
・取得した結果データをシートに記載
という感じですね。
作ったスクリプトは載せません。
あまりにも下手くそなので。
ここまでは割と簡単にできました。
ただし、「結果データ」がなんかずらずらとタグが並んでいてその中に必要な地名データが含まれているというものになるので、「結果データの中から必要な情報を抽出する」という処理が必要になります。
「先人の知恵」によれば「正規表現」とかそういうので問題なく解決できるいうことのようですが、私はその辺ちゃんと理解していないので、別の方法で解決することにします。
自分の勉強不足を「回りくどい方法」で解決するというのは得意分野なので、「正規表現を勉強しよう」とはならないのが私の悪いところ(でも嫌いじゃ無い)ですね。
「決まった形の中から必要な情報を抽出」ということであれば、「Zapier」が非常に優秀というのは前回得た知見です。
ならば、この「結果データ」も「Zapier」に解析・抽出してもらえばいいのでは無いかというのが私のたどり着いた結論でした。
具体的には先ほどのスクリプトに、「結果データを『Zapier』に送信する」という処理を付け加えます。
「先人の知恵」としてこちらのスクリプトを参考に(部分的に拝借)させていただきました。
「Zapier」側で新たに作成した別のメールボックスに前回同様「結果データ」を含むメールを送信し、情報を抽出できるようテンプレート化します。
地名データは「都道府県」「市区」「町」的に3つに分割されているので、それぞれを取得できるようにします。
決まった形でタグに挟まれているのでわかりやすいです。
あとは抽出したデータを改めて「Googleスプレッドシート」なり「Googleカレンダー」なり「Twitter」なりに登録すれば「移動に関するライフログ」のできあがりです。
この方法の注意点は、位置情報の処理一回につき「Zapier」での処理が2回必要になるので、無料プランの場合月間の回数上限に達しないように配慮が必要です。
私はそれぞれ別アカウントで(自粛)。
不要な時は「MacroDroid」側でオフにして…とかだと結局「オン/オフ」の操作が必要になるので、トリガーとか条件の制御をもう少し考えた方が良いかもしれません。
とりあえずの対策として、ツイート間隔を長めにするのと、「MacroDriod」側で変数を用意してメール送信した時の位置情報を保持しておいて、次の時に保持した位置情報から変化が無ければメール送信しないようにマクロを修正してみました。
見ていると結構「取得されたスマホの位置情報が更新されていなくて前回と全く同じ」と言うことがちょいちょいあったので。
ちょっとこれで様子を見てみたいと思います。
まあ例によってざっくりな紹介で実際はもう少し色々細かい処置を施している部分もあるのですが、プログラミングの難しい部分はかなりすっ飛ばしても「こういうこと」ができるというのは非常に大きいですね。
「Zapier」も「Google Apps Script」も突き詰めればこんなまわりくどいことをしなくても単体で解決できそうな気がしますが、「突き詰めない」というのが私のスタンダード。
日々調整しながら完成度をちょっとずつでも上げられればとは思います。
とりあえず一旦おわり。