Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 529
floatingpurr Avatar asked Jul 04 '26 05:07

floatingpurr


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.

like image 84
shaish Avatar answered Jul 07 '26 09:07

shaish



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!