You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

google_places函数next_page_token循环调用失效问题排查

解决Google Places API循环分页时的INVALID_REQUEST问题

这种手动分步调用正常、一用循环批量获取就报错的情况真的太磨人了!我之前处理Google Places API分页的时候也踩过几乎一模一样的坑,大概率是下面这两个核心原因导致的:

1. Next Page Token的延迟生效机制

Google Places API返回的next_page_token并不是拿到就能立刻用的——API后台需要1-2秒的时间同步这个token的有效性。如果你的循环在刚拿到token就立刻发起下一次请求,就会触发INVALID_REQUEST错误。而手动调用时,你中间有自然的操作间隔,token早就同步完成了,所以能正常返回结果。

修复方案:在循环里添加一个短暂的延迟,给API一点时间同步token。比如用Sys.sleep(2)让程序暂停2秒再请求下一页,示例代码如下:

library(googleway)

# 配置基础参数
api_key <- "你的Google API密钥"
# 圣保罗的大致经纬度
sao_paulo_loc <- c(-23.5505, -46.6333)
search_radius <- 50000  # 可根据需求调整搜索范围

# 首次请求获取第一页结果
first_page <- google_places(key = api_key,
                            location = sao_paulo_loc,
                            radius = search_radius,
                            keyword = "Starbucks",
                            place_type = "cafe")

all_starbucks <- first_page$results

# 循环获取所有分页
while (!is.null(first_page$next_page_token)) {
  # 关键:添加延迟,等待token生效
  Sys.sleep(2)
  
  # 用最新的page token请求下一页
  next_page <- google_places(key = api_key,
                             page_token = first_page$next_page_token)
  
  # 把新结果合并进去
  if (!is.null(next_page$results)) {
    all_starbucks <- rbind(all_starbucks, next_page$results)
  }
  
  # 更新token,准备下一轮循环
  first_page <- next_page
}

2. 请求速率超过API限制

Google Places API对请求频率有严格限制(免费版通常是每秒最多1-2次请求)。如果你的循环没有做速率控制,短时间内连续发起请求,会被API判定为违规操作,返回INVALID_REQUEST。手动调用时因为间隔足够长,不会触发这个限制。

修复方案:除了上面的Sys.sleep(),你可以根据自己的API配额调整延迟时间,确保请求频率不超过限制。哪怕是付费版,也建议保留适当延迟,避免意外触发API的风控机制。

额外排查小技巧

  • 检查API配额:有时候配额用完也会返回类似错误,你可以去Google Cloud控制台确认一下自己的Places API配额剩余情况。
  • 确认token传递正确性:循环里要确保每次都用最新返回的next_page_token,别不小心复用了之前的旧token。

总体来说,最可能的原因就是token延迟生效的问题,加个2秒的延迟应该就能解决你的问题。你可以试试在循环里加上Sys.sleep(2)再跑一遍,应该就能正常获取所有分页结果了。

内容的提问来源于stack exchange,提问作者Felipe Alvarenga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:53:12