予定表をチャント管理しようと思ったけど出来ない
面倒だもの。。でもチャント予定表を作らないと何が何だかわからなくなってツライ。
予定表を作るのもちょっと気合が必要だし、作った予定表を自由に扱えないと不安。
チャント習慣を身につけないとあとで困るのはわたしだわ。
カレンダーの自動管理する方法
いろいろな方法があって迷う迷う
iCloud のカレンダーは・・OSX と iOSだけ
プログラムからOAuthして予定表を管理しようと思ったけど、iCloudは出来ない。これはMacMini買ってOSX Serverを使えという神のお告げだと思ったけども、いますぐにそこまでしてると手順が増えて面倒だ
iCal を設置する方法は悪くない
データの一括削除とか一括更新するときに、既存の予定を1つずつちまちま削除して追加してをしなくていい。データ作ってガッツリ置くだけ。でもパーミッションとか。。。考えるのが面倒だ。
google Calendar APIを使う
Google のAPIはいろいろ膨大に増えていて、統一的に扱うには専用のライブラリを使うのが手早くなっているので、コレを使うことにする。
手順は次の通り
今回は、サービス・アカウントを作成してカレンダーをメンテナンス。
サービスアカウントは、プログラムから自動実行に便利。メンテナンス専用アカウントが作られる。作られたアカウントを通してデータを操作する。
サービスアカウントでデータ操作までの手順
ほとんどがWEBからポチポチして、証明書とったりパーミッションを設定する作業。GoogleのGUIは頻繁に変わわるだろうから、流れを覚えておくといいかもしれない。
- Google Developer Console にアクセスして 「プロジェクトを新規作成」
- 新規追加したプロジェクトでCalendarAPIをONにする
- プロジェクトのAUTH設定からcredential をOAuthで作成
- サービスアカウントを作成
- 作成するとPassPhraseが表示されるのでメモ(一回だけ表示される、メモを忘れたら削除して作りなおす)
- 同時にクライアント証明書がダウンロードされる。任意の場所に保存しPATHをメモ
- サービス・アカウントのメールアドレスをメモ
- GoogleCalendarを開く
- 管理したいカレンダーの設定を開く
- 先ほど作成されたサービスアカウントのメアドをパーミッションに追加して「保存」(必ず保存押してしてね)
- プログラムを作る
プログラムは ruby でやってみた
ruby のAPIアクセス専用プログラムが提供されているので、それを使う
gem install google-api-client -v 0.6.4
Google APIはコロコロ変わるし、Rubyもバージョン・アップが頻繁なので、数ヶ月後でも動作するようにバージョンを固定しておく。
プログラムを作成する
#!/usr/bin/env ruby
# coding: utf-8
require 'google/api_client'
require 'pp'
client = Google::APIClient.new(:application_name => 'my_ruby_test')
key = Google::APIClient::KeyUtils.load_from_pkcs12('/PATH/TO/証明書/Desktop/XXXXXXXXXX.p12', '**********')
client.authorization = Signet::OAuth2::Client.new(
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
:audience => 'https://accounts.google.com/o/oauth2/token',
:scope => 'https://www.googleapis.com/auth/calendar',# ここはreadonlyや全権など該当にするものに
:issuer => 'サービスアカウント@Google Console',
:signing_key => key)
client.authorization.fetch_access_token!
cal = client.discovered_api('calendar', 'v3')
time_min = Time.utc(2012, 10, 1, 0).iso8601
time_max = Time.utc(2014, 11, 31, 0).iso8601
params = {'calendarId' => 'GoogleカレンダでCalendarIDを確認',
# 'orderBy' => 'startTime',
# 'timeMax' => time_max,
# 'timeMin' => time_min,
# 'singleEvents' => 'True'
}
result = client.execute(:api_method => cal.events.list,
:parameters => params)
puts result.response.body
# イベント格納
events = []
result.data.items.each do |item|
events << item
end
# 出力
events.each do |event|
printf("%s,%s\n",event.start.date,event.summary)
end
これでREADが動く。一覧できたらOK
検索・追加・削除・更新・詳細
- 追加するときは Event.quickAdd が便利 insert面倒
- 検索するときは Event.list
- 削除するときは Event.delete
- 詳細取るときは Event.get
- 更新するときは Event.update
ruby のコード
最初に覚えるのはdiscover
client 作成するまでは、Google APIは全部共通.
cal = client.discovered_api('calendar', 'v3')
もちろんAPIをDiscoverしても、Console側でON、OAuthで許可してないと使えないけれども。
イメージとして、Thrift 。Thrift のセットを呼び出す感じがdiscover。XML_RPC以前の SOAPや thriftっぽいね
大事なのは execute と method
result = client.execute(:api_method => cal.events.list,
:parameters => params)
ここで、api のmethodを指定する。 :api_method => cal.events.list だとか、:api_method => cal.events.quickAddとか指定する。
引数として与えるParamsはAPIドキュメント参照
参考資料
http://qiita.com/mechamogera/items/bf2ed20e332dc31d2352
http://qiita.com/iron-breaker/items/2440c4ab41a482b1b096
https://developers.google.com/google-apps/calendar/v3/reference/events/list