我有一堆
https://maps.google.com/?cid=<identifier>
形式的谷歌地图链接。
如何从该 CID 转换为可与 Google Places API 一起使用的地点 ID?是否有任何 API 端点可用于将这些 URL 转换到新位置?
很幸运,发现了一个未记录的 api。如果你有CID,你可以像
https://maps.googleapis.com/maps/api/place/details/json?cid=${CID}&key=YOUR_API_KEY
那样调用api。
我刚刚将
place_id=${the_end_val_i_needed}
更改为 cid=${CID}
,json 响应中是 place_id
。
您可以使用此API隐藏参数来获取地点ID。 用法:https://maps.googleapis.com/maps/api/place/details/json?cid=YOUR_CID&key=YOUR_KEY
它返回的结果包含格式化的地址、place_id、地址名称和 GPS 坐标。
请参阅我的博客以了解更多详细信息:https://leonbbs.blogspot.com/2018/03/google-map-cid-to-placeid-or-get.html
我知道的唯一方法是抓取常规 html 响应。当然,谷歌可以自行决定随时更改,我也对更好的解决方案感兴趣。
截至目前
http://maps.google.com/?cid=15792901685599310349
的源嵌入了 json 响应。以 cacheResponse([[[
开头,以 ]);
结束:
<!DOCTYPE html>
<html dir=ltr>
<head>
<script nonce="W6BFnVsL4HLAdFCwYXZY">
mapslite = {
START_PERF: (window.performance && window.performance.now) ?
window.performance.now() : +(new Date())
};
mapslite.getBasePageResponse = function(cacheResponse) {
delete mapslite.getBasePageResponse;
cacheResponse([[[2556.225486744883,-122.3492774,47.6205063], ... removed ... ]);
};
executeOgJs = function() {
在此 json 数组中,元素 8 包含一个子数组。元素 27 是
place_id
。
如果太空针塔带有 CID
15792901685599310349
,地点 ID 为 ChIJ-bfVTh8VkFQRDZLQnmioK9s
。
只有 Google 知道他们为什么不提供更好的方法。
请求提供的链接,解析响应正文的 HTML 页面,并提取包含地点名称的元数据,这些元数据可用于通过 Place API 查找地点。
例如我们有一个链接:
maps.google.com/?cid=13226830714359798441
然后请求页面包含元信息:
<meta content="Big Ben · London SW1A 0AA, United Kingdom"
itemprop="name">
<meta content="Big Ben · London SW1A 0AA, United Kingdom"
property="og:title">
<meta content="Big Ben · London SW1A 0AA, United Kingdom"
property="og:site_name">
发送者和元数据提取器的要点: https://gist.github.com/asilichenko/b0000eb1562c9e4e75b0d43d799260bc