如何使用 Ruby 客户端为服务器到服务器应用程序设置 Google 日历 API

How to set up Google Calendar API using Ruby client for server to server applications

我花了一些时间阅读了几个地方,并查看了 Stack Overflow 以弄清楚如何使用 Google API Ruby 客户端和 Google 服务器到服务器应用程序中的日历,无需为所有用户提供服务器客户端的完全访问权限。我只是希望它能够为单个日历 get/create/update/delete 事件。可能还有其他方法可以做到这一点,但我在下面记录了我是如何做到的,因为它可能会帮助其他人。

GOOGLE 日历的授权设置

有点帮助link:https://developers.google.com/api-client-library/ruby/

  1. 转到:https://console.developers.google.com/iam-admin/projects
  2. 点击“+创建项目”
  3. 输入“项目名称”和“项目 ID”,然后单击“创建”
  4. 在“图书馆”下select“日历API”
  5. 点击“>启用”
  6. Return 至:https://console.developers.google.com/iam-admin/projects
  7. 单击“服务帐户”
  8. 点击“Select一个项目”
  9. 选择您的项目并点击“打开”
  10. 点击“+创建服务账户”
  11. 输入“服务帐户名称”并选择“角色”(我选择“编辑”)
  12. 选中“提供新私钥”
  13. 点击“创建”

JSON 文件将下载到您的计算机。 将此文件移动到您的应用程序可以访问的某个位置,并将其重命名为“google_api.json”(或者您想要的任何名称,只要它与下面的正确路径匹配即可)。确保只有应用程序可以访问此文件(它包含私钥)。

  1. 从 JSON 文件中复制“client_email”,然后转到 Google 您希望此应用程序访问的日历。
  2. 点击“日历”
  3. 选择正确的日历
  4. 点击“日历地址:”下的“更改共享设置”:
  5. 添加您复制的电子邮件和select适当的权限
  6. 点击“保存”
  7. 将“日历 ID”复制到“日历地址:”右侧:
  8. 您可以在下方硬编码日历 ID,或将其放入 YAML 文件或作为环境变量。

这是一个示例文件,用于授权和访问 Googe 日历 API:

# 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) 进行调用,而不是在此文件中创建方法。