如何用Python调用Google Places API新版Text Search(仅获place_id)及计费疑问
问题解答
核心结论
仅请求place_id的Find Place API调用确实免费,但你当前用错了API接口——你的代码调用的是Text Search API,该接口本身属于收费范畴,且不支持fieldMask参数,这就是你要么调用失败、要么返回多余信息的根本原因。
问题分析
- 接口参数不匹配:你代码里的
textsearch是Text Search API的端点,这个接口没有fieldMask参数,所以你设置的该参数完全无效,接口会默认返回包含地址、位置、评分等的完整结果,这类调用会产生费用。 - 免费规则的适用范围:谷歌文档中提到的免费调用,特指Find Place API在仅指定
fieldMask=place_id时的场景,其他Places API接口(包括Text Search、Nearby Search等)无论返回什么字段,都会按对应计费规则收费。
代码修改方案
将接口替换为Find Place API的端点,同时调整参数(Find Place用input而非query参数):
import requests def find_place(query, api_key): base_url = "https://maps.googleapis.com/maps/api/place/findplacefromtext/json" params = { "input": query, "inputtype": "textquery", "fieldMask": "place_id", "key": api_key } response = requests.get(base_url, params=params) return response.json()
修改后调用该接口,只会返回place_id,且这类调用属于免费额度内的请求,不会产生扣费。
额外说明
- 如果你误通过Text Search API获取到了地址、位置等基础信息,这类调用仍然会按Text Search的规则收费,不会因为你没主动请求这些信息就免费。
- 若想确认扣费情况,可在谷歌云控制台的账单详情中查看各类API的调用量及费用明细,也可以设置预算提醒避免意外扣费。
内容的提问来源于stack exchange,提问作者Emil Haas
相关产品推荐
相关产品推荐

