如何使用 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/
- 转到:https://console.developers.google.com/iam-admin/projects
- 点击“+创建项目”
- 输入“项目名称”和“项目 ID”,然后单击“创建”
- 在“图书馆”下select“日历API”
- 点击“>启用”
- Return 至:https://console.developers.google.com/iam-admin/projects
- 单击“服务帐户”
- 点击“Select一个项目”
- 选择您的项目并点击“打开”
- 点击“+创建服务账户”
- 输入“服务帐户名称”并选择“角色”(我选择“编辑”)
- 选中“提供新私钥”
- 点击“创建”
JSON 文件将下载到您的计算机。
将此文件移动到您的应用程序可以访问的某个位置,并将其重命名为“google_api.json”(或者您想要的任何名称,只要它与下面的正确路径匹配即可)。确保只有应用程序可以访问此文件(它包含私钥)。
- 从 JSON 文件中复制“client_email”,然后转到
Google 您希望此应用程序访问的日历。
- 点击“日历”
- 选择正确的日历
- 点击“日历地址:”下的“更改共享设置”:
- 添加您复制的电子邮件和select适当的权限
- 点击“保存”
- 将“日历 ID”复制到“日历地址:”右侧:
- 您可以在下方硬编码日历 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)
进行调用,而不是在此文件中创建方法。
我花了一些时间阅读了几个地方,并查看了 Stack Overflow 以弄清楚如何使用 Google API Ruby 客户端和 Google 服务器到服务器应用程序中的日历,无需为所有用户提供服务器客户端的完全访问权限。我只是希望它能够为单个日历 get/create/update/delete 事件。可能还有其他方法可以做到这一点,但我在下面记录了我是如何做到的,因为它可能会帮助其他人。
GOOGLE 日历的授权设置
有点帮助link:https://developers.google.com/api-client-library/ruby/
- 转到:https://console.developers.google.com/iam-admin/projects
- 点击“+创建项目”
- 输入“项目名称”和“项目 ID”,然后单击“创建”
- 在“图书馆”下select“日历API”
- 点击“>启用”
- Return 至:https://console.developers.google.com/iam-admin/projects
- 单击“服务帐户”
- 点击“Select一个项目”
- 选择您的项目并点击“打开”
- 点击“+创建服务账户”
- 输入“服务帐户名称”并选择“角色”(我选择“编辑”)
- 选中“提供新私钥”
- 点击“创建”
JSON 文件将下载到您的计算机。 将此文件移动到您的应用程序可以访问的某个位置,并将其重命名为“google_api.json”(或者您想要的任何名称,只要它与下面的正确路径匹配即可)。确保只有应用程序可以访问此文件(它包含私钥)。
- 从 JSON 文件中复制“client_email”,然后转到 Google 您希望此应用程序访问的日历。
- 点击“日历”
- 选择正确的日历
- 点击“日历地址:”下的“更改共享设置”:
- 添加您复制的电子邮件和select适当的权限
- 点击“保存”
- 将“日历 ID”复制到“日历地址:”右侧:
- 您可以在下方硬编码日历 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)
进行调用,而不是在此文件中创建方法。