2010-01-09 3 views
4

Я использую youtube api для получения содержимого из учетной записи youtube (с только пользовательским фидом ... без аутентификации пользователя) на нашем веб-сайте. Со вчерашнего утра, мы продолжаем получать:yt: quota too many recent calls - Youtube API help

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

Это началось как случайного появления, но очень скоро, мы получаем эту ошибку 100% времени. Я попробовал следующее quota limits instructions, но я все еще получаю ошибку:

If you are receiving quota errors, there are a couple steps you can take:

  • Have your requests include your developer key and clientID. I do this
  • Make sure the actions your code is performing is user-initiated. I do this
  • Pass the user's IP address in the restriction query parameter. I am able to pass only the proxy/server IP address, not the exact client's because Google AppEngine does not support InetAddress.getLocalHost().getHostAddress())
  • If you are requesting authenticated feeds, login as the user rather than a site-wide account. I am not using authentication
+0

Update:. Пробовал это на местном и все прекрасно работает независимо от любого числа YouTube вызывает проблемы происходят. как только я загружу его в goggle app engine. – Satish

ответ

6

У меня была такая же проблема с Youtube API + App-Engine. Я передавал ключ разработчика как параметр запроса, а также другие предложенные параметры (user-ip, ключ разработчика в URL-адресе запроса) и все еще не работал с App Engine.

Ну, казалось, что ключ разработчика не прошел (хотя X-Gdata-key присутствовал в заголовках запроса POST). Я нашел это решение:

Каждый YouTubeService экземпляр имеет атрибуты Developer_Key и CLIENT_ID. Установка этого атрибуты при создании экземпляра службы (вместо установки «X-GData-Key» в заголовках или ключа атрибута экземпляра запроса) делает Developer_Key для приложения ID: client_id для отправки в каждом запросе, и успешно принят.

Вы можете установить эти значения в constructor of YouTubeService for the Java API.

Если вы используете API для Python, вы можете установить параметры непосредственно следующим образом:

client = gdata.youtube.service.YouTubeService() 
    client.client_id = <application_id> 
    client.developer_key = <developer_key> 

я заметил, что мой Developer_Key не получал через проверяя статистику по API панели управления YouTube.

+0

@Javiefdr: Просто говорю, что это сработало для меня * до сих пор *, я нахожусь в 115 тыс. записей, загруженных и все еще идущих. Раньше я ограничивался примерно 15 тыс. записей до того, 403 Запретный ответ. – casperOne

2

При перестройке колеса для youtube api с помощью python я обнаружил, что могло привести к неузнаваемости X-GData-Key. Это отвечает @Javierfdr.

Короткий ответ: urllib2 делает .capitalize() и .title() по всему и испортил заголовки.

В модуле urllib2 есть куча всех этих кодов. Некоторые в обработчиках, а некоторые - в Request. X-GData-Key превращается в X-Gdata-Key (под названием, обратите внимание на нижнюю д) или X-gdata-key (когда заглавной). Я должен был создать собственный HTTPSHandler и объект Request, чтобы просто прокомментировать строки.

Я не уверен, почему они это делают, но длинная строка рассказывает об этой проблеме в http://bugs.python.org/issue2275. Наверное, это не относится к python 2.7.

Я опробовал requests library, и это не испортило его заголовками. Hooray :)

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

- редактировать -

На самом деле, я узнал, что в RFC состояния имена полей заголовка не чувствительны к регистру, и я не мог найти никаких доказательств того, что Google не делает. Я был неправ ниже заявление, я до сих пор не получаю никакого статистик :(К сожалению, чтобы ввести в заблуждении

After changing all of them, I finally saw the stats in YouTube API dashboard - always wondered why there was no data until now.