Как настроить API Календаря Google с помощью клиента Ruby для межсерверных приложений

Мне потребовалось некоторое чтение в нескольких местах, а также поиск в Stack Overflow, чтобы выяснить, как использовать клиент Google API Ruby с Календарем Google в приложении сервер-сервер, не предоставляя серверному клиенту полный доступ для всех пользователей. Я просто хотел, чтобы у него была возможность получать/создавать/обновлять/удалять события для одного календаря. Могут быть и другие способы сделать это, но ниже я описываю, как я это сделал, так как это может помочь кому-то другому.




Ответы (1)


НАСТРОЙКА АВТОРИЗАЦИИ ДЛЯ КАЛЕНДАРЯ GOOGLE

Несколько полезная ссылка: https://developers.google.com/api-client-library/ruby/

  1. Перейдите по адресу: https://console.developers.google.com/iam-admin/projects
  2. Нажмите +Создать проект
  3. Введите имя проекта и идентификатор проекта и нажмите «Создать».
  4. В разделе «Библиотека» выберите API календаря.
  5. Нажмите ›Включить
  6. Вернуться к: https://console.developers.google.com/iam-admin/projects
  7. Щелкните Сервисные учетные записи.
  8. Нажмите Выбрать проект
  9. Выберите свой проект и нажмите Открыть
  10. Нажмите +Создать сервисный аккаунт
  11. Введите имя учетной записи службы и выберите роль (я выбрал редактор)
  12. Установите флажок Предоставить новый закрытый ключ
  13. Нажмите Создать

Файл JSON будет загружен на ваш компьютер. Переместите этот файл в какое-нибудь место, доступное вашему приложению, и переименуйте его в google_api.json (или как хотите, если он соответствует указанному ниже правильному пути). Убедитесь, что только приложение может получить доступ к этому файлу (он содержит закрытый ключ).

  1. Скопируйте client_email из файла JSON и перейдите к настройкам Календаря Google, к которому вы хотите, чтобы это приложение имело доступ.
  2. Нажмите Календари
  3. Выберите правильный календарь
  4. Нажмите «Изменить настройки общего доступа» в разделе «Адрес календаря»:
  5. Добавьте скопированный адрес электронной почты и выберите соответствующее разрешение.
  6. Нажмите Сохранить
  7. Скопируйте идентификатор календаря справа от адреса календаря:
  8. Вы можете жестко закодировать идентификатор календаря ниже или поместить его в файл 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