その他
    ホーム技術発信DoRubyRubyでGoogleカレンダーを操作する

    RubyでGoogleカレンダーを操作する

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    TrinityTです。

    約半年ぶりの投稿になってしまいました・・・

    今回はRubyでGoogleカレンダーを操作する方法を説明します。

    ここではzorioさんが作成したRuby用のGoogleCalendarAPI操作ライブラリを使用しました。

    参考URL:http://gcalapi.rubyforge.org/

     インストール

    gemでインストール可能です。

    $ gem install gcalapi
    
     

     使用方法

    以下の3クラスを主として使用します。

    GoogleCalendar::Event : 予定

    GoogleCalendar::Calendar : ユーザのカレンダー

    GoogleCalendar::Service : カレンダーサービスへの認証や検索条件を対話的に行う

    検索

    通常の検索の場合は以下のようにします。

    # アカウントメールアドレス
    mail = "hoge@gmail.com"
    # パスワード
    pass = "huga"
    # Googleカレンダーの「カレンダー設定」画面から取得した非公開URL
    feed = "http://www.google.com/calendar/feeds/hoge%40gmail.com/private-xx.../basic"
    
    srv = GoogleCalendar::Service.new(mail, pass)
    cal = GoogleCalendar::Calendar::new(srv, feed)
    events = cal.events
    
    events.each do |event|
      p event.title
      p event.desc
    end
    
    # 実行結果 >
    "飲み会"
    "期間: 2008/08/13 19:00~23:00 \nJST........"
    "フットサル"
    "期間: 2008/08/09 09:30~11:30 \nJST........"
    ....
    
     

    また、Service.queryメソッドを使うことで取得条件を付加することが可能です。

    ...
    srv = GoogleCalendar::Service.new(mail, pass)
    srv.query(feed, :"max-results" => 5)
    ...
    
     

    主な条件

    :max-results : 最大取得数

    :orderby : 並び替え

    :updated-min : 更新日(最古)

    :updated-max : 更新日(最新)

    :published-min : 登録日(最古)

    :published-max : 登録日(最新)

    :author : 登録者

    新規作成

    次に予定の新規作成を行います。

    前項で使用した非公開URLは読み取り専用のため、更新可能なURLに置き換える必要があります。

    非公開URL(読み取り専用):
     http://www.google.com/calendar/feeds/hoge%40gmail.com/private-xx.../basic
    非公開URL(更新可能):
     http://www.google.com/calendar/feeds/hoge%40gmail.com/private/full
    
    mail = "hoge@gmail.com"
    pass = "huga"
    feed = "http://www.google.com/calendar/feeds/hoge%40gmail.com/private/full"
    srv = GoogleCalendar::Service.new(mail, pass)
    cal = GoogleCalendar::Calendar::new(srv, feed)
    event = cal.create_event
    event.title = "ゆっくり"
    event.desc = "ゆっくりしていってね!"
    event.where = "ゆっくりした結果がこれだよ!"
    event.st =  Time.mktime(2008, 12, 24, 0, 0, 0)
    event.en =  Time.mktime(2008, 12, 24, 12, 0, 0)
    event.save!
    

    実行結果

    更新&削除

    更新や削除は取得したEventインスタンスに対してupdate,delete(destroy)を実行することで可能です。

    # 更新
    events = cal.events
    evnet = events[0]
    event.title = "Update!"
    event.update
    
     
    # 削除
    events = cal.events
    evnet = events[0]
    event.delete
    
     

     まとめ

    本ライブラリを使用することで、他のカレンダーサービスやスケジューラとの連携などのマッシュアップが簡単に可能になると思います。

    是非使用してみてはいかがでしょうか!