GoogleカレンダーのデータをAPI経由で取得する-Ruby-

   

rubyにてgoogleカレンダーの情報を取得する

基本的にはここに書いてある事と同じようなコードでやりますが幾つかハマりポイントがあるのでその辺を書いてみます。

やりたいこと

リバネスではGoogleAppsを使っており、Googleカレンダーで全員のスケジュール管理が成されています。本当はSalesforceのスケジューラでできればこんな苦労をする必要はないのですが、使いにくすぎてこりゃ駄目だということで、Googleカレンダーを使い続けています。まあ便利ですよねやっぱり。

そのスケジュールをGoogle→Salesforceに同期させたいのですが、現在はZapierを使って同期しております。設定は簡単に出来るのですが、一つ欠点がありまして、ZapierだとGoogle→Salesforceの一方通行になってしまい、Googleカレンダーで情報が更新されたりすると、カレンダーのイベントIDをSalesforce側に持つことが出来ないために、Salesforce側の情報が更新出来ません。便利にはなったのだけれど片手落ちだなという感じで運用してきたのですが、スケジュールデータが経営上それなりにクリティカルなデータになるだろうということに気付いた為に、もう少しマシな方法を模索しましょうということになる訳です。

前置きが長くなりました。やりたいことは以下のとおり

  • 全社員のGoogleカレンダーのupdate情報を取得する事

これです。それを元に、コードを見て行きたいと思います。

データの取得間隔をどうするか

取得間隔は10分としましょう。今からさかのぼって10分以内に更新された情報を取得したい。そうすると、サンプルにあるコードだと足りません。どうするかというと…

userList = CSV.read("googleAppsUserList.csv")
t = Time.now - 50.minutes
t_max = Time.now + 3.month

for uid in userList do
  # Fetch the next 10 events for the user
  results = client.execute!(
    :api_method => calendar_api.events.list,
    :parameters => {
      :showDeleted => 'False',
      :calendarId => uid,
      :maxResults => 20,
      :singleEvents => true,
      :orderBy => 'startTime',
#      :orderBy => 'updated',
      :updatedMin => t.iso8601 ,
#      :timeMin => Time.now.iso8601,
      :timeMax => t_max.iso8601
      }
      )
ここにやりたい処理を書く
end

こんな感じです。userListでは、社員のメアドリストを開いてます。calendarIdはメールアドレスで良いみたいですよ。

時間の計算をするのでAcriveSupportを使います。

require 'active_support'

ハマリポイント1:時間計算はiso8601に変換する前に行う

変換前に計算しないとエラーでますね。ちょっとハマりました。

t = Time.now - 10.minutes
ここで10分前を取得しています。

 

ハマリポイント2:キャンセルしたデータは読み込まない

:showDeleted => 'False',

ここなんですけど。デリートフラグがFalseのデータだけ取得しましょう。これやらないとエラーになって止まります。

以上

こんな設定にしておくと、更新時間が10分前以降のデータで、削除フラグがたってないもので、且つ3ヶ月先までの期間のデータを最大20件取得してくれます。

オススメNginx本

nginx実践入門 (WEB+DB PRESS plus) 単行本(ソフトカバー) – 2016/1/16

nginxを現場で活用するための知識を、実践的なノウハウを交えて解説した書籍です。nginxのインストール方法や基本的な設定方法からはじめ、nginxを利用した「静的コンテンツ配信サーバ」「HTTPSサーバ」「Webアプリケーションサーバ」「大規模コンテンツ配信システム」の構築方法をそれぞれ詳しく紹介しています。後半ではnginxサーバのモニタリングやログの収集、そして軽量スクリプト言語Luaでnginxを拡張する方法について解説しているので、nginxをこれから使う方はもちろん、さらに活用したい方にもお勧めです。

 - Tips