>アプリ内のデータかバックアップしたのを自分でダウンロードしてテキスト化する方法ないかなあ/できたわ。設定→位置→タイムライン→タイムラインのエクスポートでjson化可能。あとは誰かが処理系を作るだけだ!
https://b.hatena.ne.jp/entry/4766225990155446401/comment/punychan
これを使えばXXXX-XX-XX.kml形式で日付別のタイムラインデータを出力できる(ChatGPT製)。
KMLファイルはGoogle Earth Proなどで開くことが可能で、ビジュアルとして行動履歴を見ることができる。
ただ、以前GoogleMapsタイムラインが吐いていたKMLではPlacemarkという項目に直接建物名などが書かれていたが、現在出力されているjsonではplaceIdというものに変更されていて具体的な名前がわからない。
placeIdを実際の建物名などに変換するにはGoogle Maps API の Place DetailsAPIを使うしかないようだが、膨大なリクエスト(有料)をしなければならず非現実的。
もともと欧州のプライバシー関係の規制のせいでGoogleのサーバ上でのタイムライン履歴が行われなくなったのが今回の問題の起点。
ユーザーの自由を尊重するなら、個人が行動履歴を自己管理する自由ももっと尊重してもらいたいものだな、と思った。
importjson
importos
fromxml.etree.ElementTree import Element, SubElement, tostring
fromxml.dom.minidom import parseString
withopen("タイムライン.json", "r", encoding="utf-8")as f:
data =json.load(f)
output_folder = "kml_output"
os.makedirs(output_folder, exist_ok=True)
# `semanticSegments` に移動データが含まれている
if "semanticSegments" in data:
date_segments = {} # 日付ごとにデータをまとめる辞書
for segment in data["semanticSegments"]:
# `startTime`から日付部分(YYYY-MM-DD)を抽出
if "startTime" in segment:
date = segment["startTime"].split("T")[0]
date_segments[date].append(segment)
fordate, segments indate_segments.items():
kml = Element("kml",xmlns="http://www.opengis.net/kml/2.2")
document = SubElement(kml, "Document")
for segment in segments:
forpoint in segment["timelinePath"]:
coords =point["point"].replace("°", "") # 度記号を削除
time =point.get("time", "UnknownTime")
# Placemarkを作成
placemark = SubElement(document, "Placemark")
timestamp = SubElement(placemark, "TimeStamp")
when = SubElement(timestamp, "when")
# 座標
point_element = SubElement(placemark, "Point")
coordinates = SubElement(point_element, "coordinates")
lat, lon = coords.split(", ")
coordinates.text = f"{lon},{lat},0" #KML形式: lon,lat,alt
kml_str = tostring(kml, encoding="utf-8")
formatted_kml = parseString(kml_str).toprettyxml(indent=" ")
kml_filename =os.path.join(output_folder, f"{date}.kml")
withopen(kml_filename, "w", encoding="utf-8")as f:
Place Details APIは無料やで。 これを使うんや つhttps://github.com/leiqunni/GoogleMapsTimelineActivityViewer