我使用此处描述的方法(https://shkspr.mobi/blog/2015/09/get-your-google-location-history-the-hard-way-again/)来检索Google位置记录。此github项目(https://github.com/alexattia/Maps-Location-History)使用此方法将Google位置历史记录检索到KML文件中。
按照此处描述和概述的步骤:
* Visit any Google Maps Timeline URL, e.g., http://www.google.com/maps/timeline?authuser=0&pb=!1m8!1m3!1i2018!2i0!3i1!2m3!1i2018!2i0!3i1
* Open the Developer's Console (Chrome: Shift-Ctrl-J, Opera: Shift-Ctrl-I)
* Refresh (F5)
* On the 'Network' tab, find the entry with 'authuser' (use the Filter)
* Right-click on the entry. Copy as cURL (bash or cmd, doesn't matter)
* The cookie is in one of the header (-H) option qualifiers with the 'cookie:' label
* The cookie_content is everything between the quotes including the "cookie:" text
我检索了所需的cookie,并使github代码正常运行(创建文件并解析数据)。问题是,我必须在Jupyter笔记本中以交互方式运行代码,并且该笔记本位于登录到我的Google帐户的浏览器中。
我需要做的是从后台运行Python脚本的远程设备(我的Raspberry Pi)运行它(即不在交互式会话或终端中)。换句话说,我需要作为脚本的一部分登录Google帐户,然后保留该会话登录并调用Google地图时间轴网址以检索位置历史记录数据。
以下是我用来尝试的代码。为简单起见,我已将其简化为基本调用。它不起作用(否则我不会发布这个)。登录成功但Timeline请求返回400 - 错误请求。但是,交互式调用的相同时间轴URL代码工作正常(因为登录已经处于活动状态,或者cookie是该登录的正确cookie)。
import requests
def account_login(session, cookie_content):
username = 'GOOGLE_ID'
password = 'PASSWORD'
s.auth = ('%s@gmail.com' % username, password)
cookies = dict(cookie=cookie_content)
#return session.get('https://accounts.google.com/ServiceLogin')
return session.get('https://accounts.google.com/ServiceLogin', cookies=cookies)
cookie_content = 'cookie: cookie'
with requests.Session() as s
r = account_login(s, cookie_content)
if r.status_code == 200:
cookies = dict(cookie=cookie_content)
folder = '/home/pi/Documents/GoogleMaps/LocationHistory/LocationHistoryData/'
url = 'https://www.google.com/maps/timeline/kml?authuser=0&pb=!1m8!1m3!1i2018!2i2!3i31!2m3!1i2018!2i2!3i31'
r = s.get(url, cookies=cookies)
if r.status_code == 200:
with open(folder + 'history-2018-03-31.kml', 'w') as f:
f.write(r.text)
else:
print(r.status_code)
else:
print(r.status_code)
正如我上面提到的,在我基于此的在线示例中,cookie是预先提取的"手动然后该字符串是硬编码的并在代码中使用。是否有可能以编程方式获取cookie然后使用该cookie字符串?事实上,这是更可取的,因为我担心的是手动获取的cookie可能会在某些时候变得陈旧,然后我又会回到400,因为糟糕的(旧的)cookie不会与Google帐户登录对于时间轴请求。
非常感谢任何关于如何实现这一目标的指导!
问候!
麦克