Как получить доступ к API клиента Google без Oauth (только ключ API)

Я пытаюсь получить доступ к клиенту API Google (Ruby) без Oauth. Я нашел эту информацию:

http://thecodeabode.blogspot.com.au/2012/07/google-api-ruby-client-authorizing-with.html

Но, к сожалению, если я буду следовать инструкциям (вот что я делаю):

 require 'google/api_client'
 client = Google::APIClient.new(:key => "MYKEY",:authorization => nil)    
 yt = client.discovered_api("youtube", "v3")
 result = client.execute(
   :api_method => yt.search.list,
   :parameters => {
     :key => "MYKEY",
     :q => "dogs",
     :part => "topicDetails"
   }
 )

я получил

«Дневной лимит для неавторизованного использования превышен. Для продолжения использования требуется регистрация»

Что не так?


person Stpn    schedule 15.12.2012    source источник


Ответы (2)


Короче говоря, все API-интерфейсы на основе обнаружения требуют идентификации ваших вызовов. Ошибка, которую вы получаете, — это то, что я обычно вижу, когда API Google не может идентифицировать ваше приложение. Обычно вы можете сделать несколько неопознанных звонков, но вы почти наверняка довольно быстро столкнетесь с гораздо более низкой квотой «неопознанных». Вы можете либо пройти аутентификацию с помощью OAuth (который идентифицирует ваше приложение), либо указать ключ API (который идентифицирует ваше приложение), либо вы можете сделать и то, и другое.

Это делается установкой client.key = "<your api key>" или передачей его в конструктор клиента (как вы сделали). Вероятно, вам также следует установить client.user_ip = request.remote_ip (или что-то еще, что получает IP-адрес клиента в выбранной вами среде), особенно если вы не выполняете аутентификацию с помощью OAuth.

Похоже, вы уже устанавливаете ключ API из своего примера, но, возможно, у вас есть опечатка или ключ из неправильного проекта API, или вы столкнулись с ограничениями для каждого пользователя, что разрешит установка user_ip. Еще одна вещь, которую важно понимать, это то, что квоты могут быть указаны в терминах запросов в день, но затем могут применяться поминутно, по часам или в течение какого-то другого периода времени. Таким образом, у вас может быть квота в 10 тыс. QPD, но это всего лишь 415 QPH или 7 QPM. Я не знаю, как соблюдаются квоты YouTube, но об этом нужно помнить.

Одна вещь, которую вам не нужно делать, это устанавливать :key в аргументе :parameters для вашего вызова API. Если вы хотите установить его для каждого запроса, просто передайте его напрямую как еще один необязательный параметр в execute. В вашем случае это должно обрабатываться клиентом автоматически. Вероятно, лучше всего удалить это из своего кода, поскольку вы уже установили его в конструкторе.

Окончательный результат должен быть:

require 'google/api_client'
client = Google::APIClient.new(:key => "MYKEY", :authorization => nil)    
yt = client.discovered_api("youtube", "v3")
result = client.execute(
  :api_method => yt.search.list,
  :authenticated => false,
  :user_ip => request.remote_ip,
  :parameters => {
    :q => "dogs",
    :part => "topicDetails"
  }
)
person Bob Aman    schedule 16.12.2012

В консоли API есть Панель квот, в которой указан ваш дневной лимит для этого конкретного ключа API. . Вы повторно используете чужой ключ? Лимит также может быть низким, если вы не предоставили платежную информацию (или это может быть ресурс, который работает только через oAuth).

person Jason Sperske    schedule 15.12.2012
comment
нет, это свежий API, квота хорошая. Он также говорит о неаутентифицированном использовании, что показывает, что вход на основе ключа не произошел. Но как войти без oauth› - person Stpn; 15.12.2012