Мне потребовалось некоторое чтение в нескольких местах, а также поиск в Stack Overflow, чтобы выяснить, как использовать клиент Google API Ruby с Календарем Google в приложении сервер-сервер, не предоставляя серверному клиенту полный доступ для всех пользователей. Я просто хотел, чтобы у него была возможность получать/создавать/обновлять/удалять события для одного календаря. Могут быть и другие способы сделать это, но ниже я описываю, как я это сделал, так как это может помочь кому-то другому.
Как настроить API Календаря Google с помощью клиента Ruby для межсерверных приложений
Ответы (1)
НАСТРОЙКА АВТОРИЗАЦИИ ДЛЯ КАЛЕНДАРЯ GOOGLE
Несколько полезная ссылка: https://developers.google.com/api-client-library/ruby/
- Перейдите по адресу: https://console.developers.google.com/iam-admin/projects
- Нажмите +Создать проект
- Введите имя проекта и идентификатор проекта и нажмите «Создать».
- В разделе «Библиотека» выберите API календаря.
- Нажмите ›Включить
- Вернуться к: https://console.developers.google.com/iam-admin/projects
- Щелкните Сервисные учетные записи.
- Нажмите Выбрать проект
- Выберите свой проект и нажмите Открыть
- Нажмите +Создать сервисный аккаунт
- Введите имя учетной записи службы и выберите роль (я выбрал редактор)
- Установите флажок Предоставить новый закрытый ключ
- Нажмите Создать
Файл JSON будет загружен на ваш компьютер. Переместите этот файл в какое-нибудь место, доступное вашему приложению, и переименуйте его в google_api.json (или как хотите, если он соответствует указанному ниже правильному пути). Убедитесь, что только приложение может получить доступ к этому файлу (он содержит закрытый ключ).
- Скопируйте client_email из файла JSON и перейдите к настройкам Календаря Google, к которому вы хотите, чтобы это приложение имело доступ.
- Нажмите Календари
- Выберите правильный календарь
- Нажмите «Изменить настройки общего доступа» в разделе «Адрес календаря»:
- Добавьте скопированный адрес электронной почты и выберите соответствующее разрешение.
- Нажмите Сохранить
- Скопируйте идентификатор календаря справа от адреса календаря:
- Вы можете жестко закодировать идентификатор календаря ниже или поместить его в файл YAML или в качестве переменной среды.
Вот пример файла для авторизации и доступа к API Календаря Google:
# http://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/CalendarV3
require 'googleauth'
require 'google/apis/calendar_v3'
class MyApp::GoogleCalendar
def initialize
authorize
end
def service
@service
end
def events(reload=false)
# NOTE: This is just for demonstration purposes and not complete.
# If you have more than 2500 results, you'll need to get more than
# one set of results.
@events = nil if reload
@events ||= service.list_events(calendar_id, max_results: 2500).items
end
private
def calendar_id
@calendar_id ||= # The calendar ID you copied in step 20 above (or some reference to it).
end
def authorize
calendar = Google::Apis::CalendarV3::CalendarService.new
calendar.client_options.application_name = 'App Name' # This is optional
calendar.client_options.application_version = 'App Version' # This is optional
# An alternative to the following line is to set the ENV variable directly
# in the environment or use a gem that turns a YAML file into ENV variables
ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "/path/to/your/google_api.json"
scopes = [Google::Apis::CalendarV3::AUTH_CALENDAR]
calendar.authorization = Google::Auth.get_application_default(scopes)
@service = calendar
end
end
Итак, теперь вы можете вызывать cal = MyApp::GoogleCalendar.new
и получать события с помощью cal.events
. Или вы можете делать вызовы напрямую с помощью cal.service.some_method(some_args)
, а не создавать методы в этом файле.
person
Lee
schedule
21.11.2016