※順次更新していきます。
#1 サービスアカウントの作成
Google developにアクセスして[APIとサービスの有効化]をクリック。
[Google Calendar API]を有効にします。
そのままホームページの指示にしたがって入力していきます。
そしたらjson形式のファイルがダウンロードされると思います。
#2 Googleカレンダーとサービスアカウントの連携
[APIとサービス⇨認証情報⇨サービスアカウントの管理]をクリック
以下のようなページ表が出てくることと思います。
メールの下に記入されているメールアドレスをコピーします。
次に、共有させたいGoogleCalendarを開き、[特定のユーザーとの共有]のところ(以下の画面)に先ほどコピーしたメールアドレスを貼り付けます。
#3 実装
app.rb
require 'bundler/setup'
Bundler.require
APPLICATION_NAME = '「2で出てきたサービスアカウント管理の中の名前」'
MY_CALENDAR_ID = '「連動させたカレンダーのID」'
CLIENT_SECRET_PATH = '「ダウンロードしたjsonのパス」'
class Calendar
def initialize
@service = Google::Apis::CalendarV3::CalendarService.new
@service.client_options.application_name = APPLICATION_NAME
@service.authorization = authorize
@calendar_id = MY_CALENDAR_ID
end
def authorize
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: File.open(CLIENT_SECRET_PATH),
scope: Google::Apis::CalendarV3::AUTH_CALENDAR)
authorizer.fetch_access_token!
authorizer
end
def test
events = @service.list_events(@calendar_id,
time_min: (Time.now - 365.days).iso8601,
time_max: (Time.now + 365.days).iso8601,
)
puts "Calendar name: #{events.summary}"
events.items.each do |event|
time = if event.start.date.present?
"#{event.start.date.to_s}〜#{event.end.date.to_s}"
else
"#{event.start.date_time.to_date} #{event.start.date_time.strftime('%-k:%M')}〜#{event.end.date_time.to_date} #{event.end.date_time.strftime('%-k:%M')}"
end
puts "#{time} :::: #{event.summary} at #{event.location}"
end
end
end
Calendar.new.test
#error
jsonがうまく引っかかっていないと以下のようなエラーが出た。
jsonのパスを確認しよう
`fetch_access_token': Authorization failed. Server message: (Signet::AuthorizationError)
{
"error": "invalid_grant",
"error_description": "Invalid JWT Signature."
}