Google Calendar API (6/6)
作成:2010-04-27 15:31
更新:2011-05-01 11:10
更新:2011-05-01 11:10
■スクリプトを解説する
では、スクリプトをチェックしていきましょう。まずは、ログイン処理に関する部分からです。
1.ログインの処理
ログイン処理は、「google.accounts.user.login( アクセス先 )」という形で呼び出すだけです。非常に単純ですね。これで、ログインしていなければ、アクセス許可のためのページにジャンプし、そこで許可するかどうかを確認するようになっています。
2.ログインチェック
イベント登録を行うdoActionでは、ログインしているかどうかをチェックしています。これは、「google.accounts.user.checkLogin( アクセス先 )」という形で呼び出します。この結果が空のテキストであれば、ログインしていないことになります。
――続いて、イベント登録の処理について整理していきましょう。
3.CalendarEventEntryの作成
これは、ただ単にnewでCalendarEventEntryオブジェクトを作成するだけです。単純ですね。
4.タイトルの設定
タイトルの設定は、CalendarEventEntryの「setTitle」で行います。これ自身は簡単なのですが、引数には通常のテキストではなく、google.gdata.atom.Textというオブジェクトを用意する必要があります。これは、Textの「create」というメソッドを使って作成します。こうして作成したTextオブジェクトを引数にしてsetTitleすることで、タイトルのテキストが設定されます。
5.日時情報の設定
日時の情報は、ちょっと面倒です。これは、google.gdata.Whenというオブジェクトとして用意し、CalendarEventEntryに「addTime」メソッドで組み込んでやります。このWhenオブジェクトは、newで作成後、「setStartTime」「setEndTime」といったメソッドを呼び出して、開始日時、終了日時を設定しておく必要があります。
で、これらに設定する日時の値は、google.gdata.DateTimeオブジェクトとして用意しておくことになっています。これは、DateTimeの「fromIso8601」というメソッドで、日時のテキストから作成することができました。というわけで、
・日時のテキストを用意する。
・fromIso8601メソッドで、DateTimeオブジェクトを作成する。
・Whenオブジェクトを作成する。
・setStartTime/setEndTimeでDateTimeをWhenに組み込む。
・できあがったWhenをaddTimeでCalendarEventEntryに組み込む。
――というようなけっこう面倒くさい手続きを踏まなければいけないのです。ちょっとややこしいので、実際に何度か試してみてください。慣れれば、そう複雑ではありませんから。
6.コールバック関数の用意
最後に、終了時に呼び出される関数リテラルを用意します。イベントの追加はAjax通信を利用するため、終了後に処理をするためのコールバック関数が必要となります。ここではalertを表示した後、getMyFeedを呼び出して表示を更新しています。
7.エントリーを追加する
ようやく準備が整ったので、「insertEntry」メソッドでイベントのエントリーを追加します。これは、以下のように引数を用意します。
これで、外部からGoogleカレンダーにアクセスし、新しいイベントを追加する処理ができるようになりました。とりあえず「イベントの取得・追加」だけでもできるようになれば、そこそこ役に立つんじゃないでしょうか。
1.ログインの処理
ログイン処理は、「google.accounts.user.login( アクセス先 )」という形で呼び出すだけです。非常に単純ですね。これで、ログインしていなければ、アクセス許可のためのページにジャンプし、そこで許可するかどうかを確認するようになっています。
2.ログインチェック
イベント登録を行うdoActionでは、ログインしているかどうかをチェックしています。これは、「google.accounts.user.checkLogin( アクセス先 )」という形で呼び出します。この結果が空のテキストであれば、ログインしていないことになります。
――続いて、イベント登録の処理について整理していきましょう。
3.CalendarEventEntryの作成
これは、ただ単にnewでCalendarEventEntryオブジェクトを作成するだけです。単純ですね。
4.タイトルの設定
タイトルの設定は、CalendarEventEntryの「setTitle」で行います。これ自身は簡単なのですが、引数には通常のテキストではなく、google.gdata.atom.Textというオブジェクトを用意する必要があります。これは、Textの「create」というメソッドを使って作成します。こうして作成したTextオブジェクトを引数にしてsetTitleすることで、タイトルのテキストが設定されます。
5.日時情報の設定
日時の情報は、ちょっと面倒です。これは、google.gdata.Whenというオブジェクトとして用意し、CalendarEventEntryに「addTime」メソッドで組み込んでやります。このWhenオブジェクトは、newで作成後、「setStartTime」「setEndTime」といったメソッドを呼び出して、開始日時、終了日時を設定しておく必要があります。
で、これらに設定する日時の値は、google.gdata.DateTimeオブジェクトとして用意しておくことになっています。これは、DateTimeの「fromIso8601」というメソッドで、日時のテキストから作成することができました。というわけで、
・日時のテキストを用意する。
・fromIso8601メソッドで、DateTimeオブジェクトを作成する。
・Whenオブジェクトを作成する。
・setStartTime/setEndTimeでDateTimeをWhenに組み込む。
・できあがったWhenをaddTimeでCalendarEventEntryに組み込む。
――というようなけっこう面倒くさい手続きを踏まなければいけないのです。ちょっとややこしいので、実際に何度か試してみてください。慣れれば、そう複雑ではありませんから。
6.コールバック関数の用意
最後に、終了時に呼び出される関数リテラルを用意します。イベントの追加はAjax通信を利用するため、終了後に処理をするためのコールバック関数が必要となります。ここではalertを表示した後、getMyFeedを呼び出して表示を更新しています。
7.エントリーを追加する
ようやく準備が整ったので、「insertEntry」メソッドでイベントのエントリーを追加します。これは、以下のように引数を用意します。
[CalendarService].insertEntry( アドレス, [CalendarEventEntry], コールバック関数,最後の「オブジェクトの種類」は、google.gdata.calendar.CalendarEventEntryを指定します。また例外用関数は、ここではhandleError関数をそのまま再利用しています。
例外用関数, オブジェクトの種類 )
これで、外部からGoogleカレンダーにアクセスし、新しいイベントを追加する処理ができるようになりました。とりあえず「イベントの取得・追加」だけでもできるようになれば、そこそこ役に立つんじゃないでしょうか。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
1.ログインの処理 var scope = "https://www.google.com/calendar/feeds/"; var token = google.accounts.user.login(scope); 2.ログインチェック var scope = "https://www.google.com/calendar/feeds/"; token = google.accounts.user.checkLogin(scope); if (token == ""){ alert("ログインしてないよ!"); return; } 3.CalendarEventEntryの作成 var entry = new google.gdata.calendar.CalendarEventEntry(); 4.タイトルの設定 entry.setTitle(google.gdata.atom.Text.create(title)); 5.日時情報の設定 var when = new google.gdata.When(); when.setStartTime(start); when.setEndTime(end); entry.addTime(when); 6.コールバック関数の用意 var func = function(result) { alert("イベントを追加しました。"); getMyFeed(); } 7.エントリーを追加する service.insertEntry(url,entry,func,handleError, google.gdata.calendar.CalendarEventEntry);
※関連コンテンツ