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

在Python中调用Google PageSpeed API:批量请求返回None

解决Google PageSpeed API批量请求返回None的问题

我之前也碰到过类似的批量请求踩坑情况,咱们一步步来排查解决——既然单独请求能成功,说明你的API密钥、服务构建逻辑都是没问题的,问题大概率出在批量请求的细节处理上。

常见问题点&修复方案

  • 回调函数未正确捕获结果:BatchHttpRequest必须通过回调函数接收每个请求的响应,要是没设置回调或者回调里没存结果,自然拿不到数据。
  • 未确保批量请求执行完成:Jupyter Notebook的异步环境有时候会导致批量请求还没跑完就继续往下执行,结果还没生成就被读取了。

下面是修正后的完整代码示例,你可以直接替换测试:

!pip install -U google-api-python-client
from apiclient.http import BatchHttpRequest
from apiclient.discovery import build

# 初始化API服务
google_api_key = "mykey"
ps_service = build('pagespeedonline', 'v4', developerKey=google_api_key)

# 用来存储批量请求结果的列表
batch_results = []

# 定义回调函数:处理每个请求的响应或异常
def handle_response(request_id, response, exception):
    if exception:
        # 捕获请求失败的异常,方便排查
        batch_results.append({"request_id": request_id, "error": str(exception)})
    else:
        # 存储成功的响应数据
        batch_results.append({"request_id": request_id, "data": response})

# 初始化批量请求对象,绑定回调函数
batch = BatchHttpRequest(callback=handle_response)

# 替换成你的实际URL列表
list_of_urls = [
    "https://example.com",
    "https://google.com",
    "https://github.com"
]

# 把每个URL的PageSpeed请求添加到批量对象中
for idx, url in enumerate(list_of_urls):
    request = ps_service.pagespeedapi().runpagespeed(url=url, strategy="desktop")
    batch.add(request, request_id=str(idx))  # 给每个请求加唯一ID,方便对应原始URL

# 执行批量请求——这一步绝对不能漏!
batch.execute()

# 查看最终结果
print("批量请求结果:")
for result in batch_results:
    print(result)

关键细节说明

  1. 回调函数handle_response:这是批量请求获取结果的核心,必须定义它来接收每个请求的响应或异常,否则结果根本没地方存储。
  2. 批量请求执行:一定要调用batch.execute(),而且要确保这行代码执行完成后再去读取batch_results——在Jupyter里尽量把所有步骤放在同一个单元格里执行,避免异步干扰。
  3. 请求ID设置:给每个请求加唯一的request_id,方便你把结果和原始URL对应起来,排查问题更高效。

如果还是出现异常,你可以检查下:

  • 所有URL是否是可公开访问的HTTP/HTTPS地址
  • API密钥的配额是否足够(批量请求会消耗配额,超出配额会返回错误)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:38:21