LoginSignup
1
0

More than 1 year has passed since last update.

Ruby で Google Calendar 情報を読み出す

Last updated at Posted at 2021-06-19

TL; DR

  • Google Calendar のイベントを Ruby プログラムから読み出す方法を書きました。IoT ガジェットなどの自作に便利かと思います。
  • 公式 Quick Start は人間が介在する OAuth2 のやり方だけど、ようはこれの無人版です。あと、この公式ドキュメントは single_events パラメタを指定してないので動かない(バグ持ちの)はずです。
  • サービスアカウントというものを作って、それに必要な権限を与え、そのアカウントの秘密鍵を使ってアクセスします。

カレンダーの準備

既存のものもしくは新規作成した Google Calendar の ID をメモします。IDは設定 > マイカレンダーの設定 から確認できます。

プロジェクトとサービスアカウント

各種ドキュメントを操作するには当然権限が必要です。プログラムから操作する場合は、大雑把に言って2とおりの権限獲得の手法があります。

  • 一時的に人間の許可を得て、その人間のアカウントで操作
  • 権限を与えられた 機械ようのアカウント で操作

ざっくり言うと前者はインタラクティヴなソフトで使う方法で、後者は自動化システムで使う方法です。今回は後者の方法を使います。ここで「機械ようのアカウント」を サービスアカウントと言います。つまり、まずはサービスアカウントを作り、必要な権限を与える必要がります。だいたい以下の手順です。

  1. GCPのコンソール に行って、プロジェクトを作ります。
  2. GCPの左上のハンバーガーメニュー > IAMと管理 > サービスアカウント > サービスアカウントを作成
  3. 入力は必須項目だけで良いと思います。name@project.iam.gserviceaccount.com というアカウントができます。
  4. アカウントを作ると秘密鍵 (private key) をダウンロードできると思います。JSON形式でダウンロードしてください。
  5. このアカウントに対して、カレンダーの権限を与えてください(=共有してください)。与え方は通常の人間向けの権限操作といっしょです。
  6. ハンバーガーメニュー > APIとサービス > ライブラリ からカレンダーAPIを有効化してください。

パッケージのインストール

たぶんこれだけでいいはず。

$ gem install google-apis-calendar_v3

コード

直近の10個のイベントを取得して標準出力に開始時刻と概要を出力します。

# coding: utf-8
require 'google/apis/calendar_v3'

KEYFILE = "ダウンロードした鍵.json".freeze
CALENDAR_ID = "「マイカレンダーの設定」にあるID".freeze

service = Google::Apis::CalendarV3::CalendarService.new
service.authorization = Google::Auth::ServiceAccountCredentials.make_creds(
  json_key_io: File.open(KEYFILE),
  scope: Google::Apis::CalendarV3::AUTH_CALENDAR_READONLY,
)

resp = service.list_events(
  CALENDAR_ID,
  max_results: 10,
  order_by:    :startTime,
  time_min:    DateTime.now.rfc3339,
  single_events: true,  # これがないと order_by を "startTime" にできない
)

resp.items.each {|event|
  # 全日の予定は DateTime じゃなくて Date になる
  start = event.start.date_time || event.start.date
  puts "%s %s" % [start, event.summary]
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0