2013-10-10 2 views
0

Я пытаюсь позвонить по следующему URL, чтобы получить возвращаемый JSON с помощью Python:Вызов YouTube апи из GAE приложение возвращает 403

http://gdata.youtube.com/feeds/api/users/pbsnewshour/uploads?v=2&alt=jsonc&prettyprint=true 

Но все, что я получил это:

File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 531, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 403: Forbidden 

мне нужно чтобы добавить, что я включил API YouTube Analytics и API данных YouTube API v3 для приложения gae.

это код, я использую на стороне питона:

req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
response = urllib2.urlopen(req) 
dump = response.read() 
d = json.loads(dump) 

В местном все работает отлично.

Любая идея о том, как это решить?

ответ

0

Помимо кода 403, в чем содержится ваш запрос на http?

Я пробовал ваш URL-адрес API в своем браузере с прокси-сервером, размещенным на GAE, у меня тоже 403 со следующим XML-контентом.

<error> 
    <domain>yt:quota</domain> 
    <code>too_many_recent_calls</code> 
</error> 

Я полагаю, что служба urlfetch GAE размещена на некоторых отдельных серверах. Многие экземпляры приложений gae используют один и тот же сервер urlfetch с ip. Таким образом, приложение GAE очень легко достигает предела количества вызовов Youtube для каждого ip.

В этом сообщении SO есть некоторые обходные пути: yt:quota too many recent calls - Youtube API help. Но, похоже, они полностью не решили проблему.

0

Вы должны указать ключ разработчика в своих запросах, вы можете зарегистрироваться на один here.

0

Здесь есть несколько вопросов. Прежде всего, поскольку вы включили сервисы API данных YouTube Data 3, вы должны использовать v3 API; однако URL-адрес, который вы запрашиваете в вашем примере, для v2 API. Конечной вы хотите использовать для v3, которая соответствует этому здесь:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&playlistId=UU6ZFN9Tx6xh-skXCuRHCDpQ&key={YOUR_API_KEY} 

Во-вторых, как и еще один пост упоминается, вы хотите использовать ключ API с вашим запросом; для v3 API вы можете сделать это в Google API console (или их новом Cloud Console), где вы создадите то, что они называют «Браузерным ключом» для вашего приложения. Добавьте, что в соответствующем месте в конечной точке, и вы должны получить обратно интересующий вас JSON.

Наконец, вам может быть интересно узнать, откуда взялась длинная строка, используемая в качестве параметра для playlistId в URL-адресе запроса Я упомянул выше; в v3 от API, вы можете сделать запрос на конечную точку пользователя «каналы», как это:

https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails&forUsername=pbsnewshour&key={YOUR_API_KEY} 

И вы вернулись к вам различным каналам, относящимся к данному пользователю; строка, которую я извлек оттуда, загружает канал «uploads», поэтому он соответствует тому, что вы искали в своем исходном сообщении.

Смежные вопросы