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

时间:2016-11-21 14:37:22

标签: ruby-on-rails ruby google-calendar-api google-api-client google-api-ruby-client

我花了一些时间在几个地方阅读,以及查看Stack Overflow以了解如何在服务器到服务器应用程序中使用Google API Ruby客户端和Google日历,而无需让服务器客户端完全访问所有服务器用户。我只是希望它能够获取/创建/更新/删除单个日历的事件。可能还有其他方法可以做到这一点,但我会在下面记录我是如何做到这一点的,因为它可能会帮助其他人。

1 个答案:

答案 0 :(得分:1)

GOOGLE CALENDAR的授权设置

一些有用的链接:https://developers.google.com/api-client-library/ruby/

  1. 转到:https://console.developers.google.com/iam-admin/projects
  2. 点击" +创建项目"
  3. 输入"项目名称"和"项目ID"然后单击"创建"
  4. "图书馆"选择" Calendar API"
  5. 点击">启用"
  6. 返回:https://console.developers.google.com/iam-admin/projects
  7. 点击"服务帐户"
  8. 点击"选择一个项目"
  9. 选择您的项目,然后点击"打开"
  10. 点击" +创建服务帐户"
  11. 输入"服务帐户名称"并选择一个"角色" (我选择"编辑")
  12. 检查"提供一个新私钥"
  13. 点击"创建"
  14. JSON文件将下载到您的计算机。 将此文件移至应用程序可访问的某个位置,并将其重命名为" google_api.json" (或任何你想要的东西,只要它匹配下面的正确路径)。确保只有应用程序可以访问此文件(它包含私钥)。

    1. 复制" client_email"从JSON文件中转到设置 您希望此应用访问的Google日历。
    2. 点击" Calendars"
    3. 选择正确的日历
    4. 点击"更改共享设置"在"日历地址下找到:"
    5. 添加您复制的电子邮件并选择适当的权限
    6. 点击"保存"
    7. 复制"日历ID"在"日历地址右边:"
    8. 您可以对下面的日历ID进行硬编码,也可以将其放在YAML文件中或作为环境变量。
    9. 以下是授权和访问Googe Calendar 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)拨打电话,而不是在此文件中创建方法。