Google API batch request returns HttpError 404 for every call through Python client

Viewed 2053

I have a little application based on google-api-python-client, but the batch request has not been working anymore for a couple of days (error 404).

For example, the following code worked fine until a few days ago.

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()

Now, If i run it, I get:

{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">

Strange. What it seems odd to me is that If I try to make a simple request to those links (simply by cutting and pasting an URL in the browser), the server returns data as usual.

1 Answers

It seems this problem is fixed with the newest version of the python library.

However, if someone still has to solve it, or is using a different environment (like iOS or android), that's the solution.

it seems google have used before a single batch url, which was:

https://www.googleapis.com/batch

this worked well in my apps, until it suddenly stopped. it seems the solution is to change the url for the batch calls to :

https://www.googleapis.com/batch/youtube/v3 (for youtube apis)

usually the google api objects will expose a property allowing to change this value, but if not it can be changed in source.

Related