存储带有地点详细信息返回的照片参考



我可以存储使用地点详细信息 API 返回的照片引用(最多返回 10 个(以便我以后可以直接使用它们通过地点照片 API 调用获取照片吗?ToS 声明我们无法存储任何内容。

就像你说的,ToS 声明如下:

3.2.4 对滥用服务的限制。

(a( 不得刮擦。客户不会提取、导出或以其他方式 抓取谷歌地图内容,以便在服务之外使用。例如 客户不会:(i( 预提取、索引、存储、重新共享或重新托管 谷歌地图 服务之外的内容;(ii( 批量下载谷歌 地图磁贴、街景图片、地理编码、路线、距离矩阵 结果、道路信息、地点信息、高程值和 时区详细信息;(iii( 复制并保存公司名称、地址,或 用户评论;或 (iv( 通过文字转语音使用谷歌地图内容 服务业。

(b( 无缓存。客户不会缓存谷歌地图内容,除非 地图服务特定条款明确允许。

具体服务条款对地点允许的缓存规定如下:

5.4 缓存。客户可以从地点 API 临时缓存纬度 (lat( 和经度 (lng( 值,最多连续 30 次 日历天数,之后客户必须删除缓存的纬度 和经度值。客户可以缓存地点 API 地点 ID (place_id( 值,符合地点 API 政策。

因此,您肯定不能存储照片参考。在任何情况下,您可能都想与法定代表人交谈。

希望这能回答你的问题。

要抓取Google Maps Place照片,您可以使用第三方API,例如SerpApi的Google Maps Photos API。这是一个付费 API,带有免费计划,可在其后端处理块并解析它们。

为此,我们首先需要找到我们提出请求的所有位置的"data_id":

local_data_results = [
(result['title'], result['data_id']) 
for result in results['local_results']
]

接下来,我们提出一个新请求,使用循环查找所有色素沉着的地方while照片:

while True:
new_page_results = search.get_dict()

if 'next' in new_page_results.get('serpapi_pagination', {}):
search.params_dict.update(dict(parse_qsl(urlsplit(new_page_results.get('serpapi_pagination', {}).get('next')).query)))
else:
break
photos.extend(new_page_results['photos'])

在联机 IDE 中使用分页检查完整代码。

from serpapi import GoogleSearch
from urllib.parse import urlsplit, parse_qsl
import os, json
# firslty extracting local results
params = {
# https://docs.python.org/3/library/os.html#os.getenv
'api_key': '...',                       # serpapi key, https://serpapi.com/manage-api-key
'engine': 'google_maps',                # SerpApi search engine 
'q': 'Starbucks',                       # query
'll': '@40.7455096,-74.0083012,15.1z',  # GPS coordinates
'type': 'search',                       # list of results for the query
'hl': 'en',                             # language
'start': 0,                             # pagination
}
search = GoogleSearch(params)               # where data extraction happens on the backend
results = search.get_dict()                 # JSON -> Python dict
local_data_results = [
(result['title'], result['data_id']) 
for result in results['local_results']
]
photo_results = []
# secondly, extracting photos from returned data by local results
for title, data_id in local_data_results:
params = {
# https://docs.python.org/3/library/os.html#os.getenv
'api_key': '...',                   # serpapi key, https://serpapi.com/manage-api-key
'engine': 'google_maps_photos',     # SerpApi search engine
'hl': 'en',                         # language
'data_id': data_id                  # place result
}
search = GoogleSearch(params)

photos = []
# pagination
while True:
new_page_results = search.get_dict()

if 'next' in new_page_results.get('serpapi_pagination', {}):
search.params_dict.update(dict(parse_qsl(urlsplit(new_page_results.get('serpapi_pagination', {}).get('next')).query)))
else:
break
photos.extend(new_page_results['photos'])

photo_results.append({
'title': title,
'photos': photos
})
print(json.dumps(photo_results, indent=2, ensure_ascii=False))

示例输出:

[
{
"thumbnail": "https://lh5.googleusercontent.com/p/AF1QipOupV3HYP7Edx1hfZ4wQDXwAseYldLrcpLOMfXb=w203-h270-k-no",
"image": "https://lh5.googleusercontent.com/p/AF1QipOupV3HYP7Edx1hfZ4wQDXwAseYldLrcpLOMfXb=w3024-h4032-k-no",
"photo_meta_serpapi_link": "https://serpapi.com/search.json?data_id=AF1QipOupV3HYP7Edx1hfZ4wQDXwAseYldLrcpLOMfXb&engine=google_maps_photo_meta"
},
{
"thumbnail": "https://lh5.googleusercontent.com/p/AF1QipMP6QTX3YtzENGSS-QnXIHK5A0vkBwHTN0J7ADX=w203-h360-k-no",
"image": "https://lh5.googleusercontent.com/p/AF1QipMP6QTX3YtzENGSS-QnXIHK5A0vkBwHTN0J7ADX=w2432-h4320-k-no",
"photo_meta_serpapi_link": "https://serpapi.com/search.json?data_id=AF1QipMP6QTX3YtzENGSS-QnXIHK5A0vkBwHTN0J7ADX&engine=google_maps_photo_meta"
},
other results ...
]

在此输出中,photo_meta_serpapi_link是指 SerpApi 检索的有关照片的其他信息,例如有关拍摄照片的用户的信息以及位置和日期。

你也可以阅读 如何刮谷歌地图放置照片 使用 SerpApi 博客文章 如果您需要更多代码解释。

免责声明,我为 SerpApi 工作。

最新更新