Google API 批处理请求为通过 Python 客户端的每次调用返回 HttpError 404



我有一个基于 google-api-python-client 的小应用程序,但批处理请求已经几天没有工作了(错误 404(。

例如,直到几天前,以下代码才能正常工作。

from apiclient.http import BatchHttpRequest
from apiclient.discovery import build
import json
DEVELOPER_KEY = "foobar"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
channelIds = ['UC2C_jShtL725hvbm1arSV9w','UC2C_jShtL725hvbm1arSV9w']
parts_list = [
"id",
"brandingSettings",
]
fields_list = [
"items/id",
"items/brandingSettings/channel",    
]
parts = ",".join(parts_list)
fields = ",".join(fields_list)
request_map = {}
def this_is_the_callback_function(request_id, response, exception):
if exception is not None:
# Do something with the exception
print exception
pass
else:
print request_id
print request_map[int(request_id)]
print json.dumps(response,sort_keys=True, indent=4)
service = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)
batch = service.new_batch_http_request(callback=this_is_the_callback_function)
channels = service.channels()
i = 0
for c in channelIds:
i += 1
request_map[i] = c
request = channels.list(id=c,part=parts, fields=fields)
batch.add(request)
print request_map
batch.execute()

现在,如果我运行它,我会得到:

{1: 'UC2C_jShtL725hvbm1arSV9w', 2: 'UC2C_jShtL725hvbm1arSV9w'}
<HttpError 404 when requesting https://www.googleapis.com/youtube/v3/channels?fields=items%2Fid%2Citems%2FbrandingSettings%2Fchannel&alt=json&part=id%2CbrandingSettings&id=UC2C_jShtL725hvbm1arSV9w&key=foobar returned "Not Found">
<HttpError 404 when requesting https://www.googleapis.com/youtube/v3/channels?fields=items%2Fid%2Citems%2FbrandingSettings%2Fchannel&alt=json&part=id%2CbrandingSettings&id=UC2C_jShtL725hvbm1arSV9w&key=foobar returned "Not Found">

奇怪。对我来说似乎很奇怪的是,如果我尝试对这些链接发出简单的请求(只需在浏览器中剪切并粘贴 URL(,服务器就会像往常一样返回数据。

似乎这个问题已通过最新版本的 python 库修复。

但是,如果有人仍然需要解决它,或者正在使用不同的环境(如iOS或Android(,那就是解决方案。

谷歌似乎在单个批处理URL之前使用过,即:

https://www.googleapis.com/batch

这在我的应用程序中运行良好,直到它突然停止。 似乎解决方案是将批量调用的 URL 更改为:

https://www.googleapis.com/batch/youtube/v3 (适用于优酷 API(

通常,Google API 对象会公开一个允许更改此值的属性,但如果没有,则可以在源代码中更改它。

最新更新