GoogleMapで自分の行った店をこまめに評価★つけたりレビュー投稿したりしてログを貯めてるんですが、例えば、恵比寿駅付近で自分が高評価つけた店だけ一覧で見たいなーって時にGoogleMap上でぱっと見つけられない不便さがある。
GoogleMapで地図上に表示できるのは、お気に入り、行ってみたい、スター付きの場所↓
これらの場所がこんな風に地図上に表示される。
なんだけど「自分が★4以上の評価をつけた店」とかをマップに表示させることができないし、投稿リストを絞り込むことすらできない・・・!
以前は「恵比寿で行ったことあるいいお店なかったかな〜」って振り返るときはRettyを使ってたんだけど、自分のログがすっかりGoogleMapになってしまったので、GoogleMapから探したいんだよな・・。
どうにかできないかなーと思ってnot エンジニアの私にもできる策を探し出したぞ!
GoogleMapの自分の投稿情報を出力(エクスポート)する
これできなかったら完全に詰みだったんだが、ありました。「Google Takeout」というものが!
Google Takeout
知らなかったんだけどGoogleMapの投稿以外にも、GooglePlayMusicの再生リストとかライブラリデータとか、CalendarとかMailとかKeepとか、Googleのあらゆるサービスに溜まったログを出力できる!完全にデータを人質に取られていると思ってたけど世界のGoogle様はそんなことしないんだな!!
ここで過去のGoogleMap口コミデータを出力します。
マップ(マイプレイス)ってやつです。
JsonデータをCSVデータに変換
GoogleTakeoutでエクスポートできるデータがJson形式なのでこれをCSVにしたい・・・(最終的にスプレッドシートもしくはエクセルにするため・・)。Json→CSVに変換できるWEBツールがあった。
このサイトを使って、JsonからCSVに変換してCSVをスプレッドシートに貼り付ける。
わーいできた!と思ったんだけど、データをよく見ると「地域」にあたるものがない。
Location/Addressの欄も規則性が整ってなくて扱いづらい感じ。これだと冒頭の「恵比寿駅付近で〜」みたいな用途で使いづらい・・・。
緯度経度情報から最寄り駅を取得
この出力されたデータで参照できるキーはgeometry。緯度と経度情報。なのでこの情報を元に最寄り駅を取得してみることにする。スプレッドシートの関数を駆使して・・・!
緯度経度を元にエリアを取得する方法
緯度経度を渡したら市町村とか取得できるAPIないかなーと調べて最初にたどりついたのがこれ。
アプリIDを取得して(これは一瞬でできた)このAPIに緯度と経度わたすとXMLで住所等が取得できる。
これをスプシのIMPORTXML関数で取得すればいけるじゃん〜!と思ったんだけど、このXMLでどうしてもXpathの指定がうまくいかず断念・・・。
次に見つけたAPIがこれ。
このAPIすごい優秀で、Yahooでは取得できなかった「最寄り駅/路線」が取得できる!都内だとリストに「最寄り駅/路線」がでるのはめちゃ便利だ!
このAPIを使って、まず緯度経度から郵便番号を取得→郵便番号から最寄り駅取得というかんじで↓U列V列にデータを取得してほら!
無事スプレッドシートに駅を入れることができた〜〜!!
※それぞれのスプシ関数はこちら
U2列
=IMPORTXML(“http://geoapi.heartrails.com/api/xml?method=searchByGeoLocation&y=”&B2&”&x=”&A2,”//location[1]/postal”)V2列
=IMPORTXML(“http://geoapi.heartrails.com/api/xml?method=getStations&postal=”&$U2,”//name”)
GoogleMapのスポット名が英語表記になっちゃう件
あと、よく見るとスポット名が日本語じゃなくて英語表記になっちゃうものが結構ある。例えば「叙々苑游玄亭 西麻布」はGoogle takeoutで取得できる店名が「Jojoen Yugentei Nishiazabu」。わからなくはないけど感覚的に分かりづらい。
スポットのURLが https://www.google.com/maps/place//data=!4m2!3m1!1s0x0:0x1bc1a149a7e7d35 としてリストにあるのでこのページのHTMLタイトル(もしくはXpathを指定してHTMLのスクレイピング・・・)で日本語の店名とってこれそうなんだけどうまくいかなくて断念・・・。
あーまたモテないことに時間を費やしてしまった。。