Короче говоря, все 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