Google Calendar API (5/6)
作成:2010-04-27 14:30
更新:2011-05-01 11:14
更新:2011-05-01 11:14
■イベントを追加する
続いて、イベントの追加を行ってみましょう。これは、いろいろと注意しなければならない点があります。まずはそれらを整理しておきましょう。
1.フィードのURLが違う!
表示を取得したときには、CalendarServiceでアクセスしたアドレスは「http://www.google.com/calendar/feeds/カレンダーID/public/full」というものでした。最後は、/public/fullとなってました。が、この/public/fullは、公開されたフィードであり、公開データを取り出すためのものです。データの変更などは、/private/fullにアクセスをする必要があります。
2.ログインしないといけない!
/private/fullにアクセスし、データの変更を行うためには、データ変更の権限を持つユーザーとしてログインをしなければいけません。これには、google.accounts.userというオブジェクトにある「login」メソッドを利用します。
3.イメージを用意しないといけない!
ログイン機能は、どういう理由かわかりませんが、ページ内に必ず<img>タグがなければいけません。何でもいいので、適当なイメージを用意し、<img>タグを記述してください。
これらの点は、イベント追加の作業以前の知識として頭に入れておいてください。次に、イベント追加の流れを整理しておきましょう。
1.CalendarServiceを用意する
まずは、CalendarServiceオブジェクトを用意します。これは既に登場していますからおなじみですね。
2.ログインチェックをする
作業に入る前に、ログインされているかどうかをチェックします。これは、google.accounts.userオブジェクトの「checkLogin」というメソッドを使います。ログインしていなければ、そのまま処理を抜けるようにしておきます。
3.CalendarEventEntryオブジェクトを用意する
イベントの情報は、google.gdata.calendar.CalendarEventEntryというオブジェクトとして用意します。このオブジェクトをnewで作成し、タイトルや開始日時などの情報を組み込んでやります。
4.insertEntryでイベントを追加する
CalendarServiceオブジェクトの「insertEntry」メソッドで、作成したCalendarEventEntryを追加します。これで、カレンダーにイベントが追加されます。
――全体の流れはわかりましたか? では、これも簡単なサンプルを作成し、それを見ながら理解していくことにしましょう。これは、簡単なイベント登録のサンプルです。
まず、カレンダーにアクセス可能なアカウントでログインしてからこのページにアクセスし、それから「Login」ボタンを押してください。このWebページから、Googleカレンダーにアクセスを許可するための表示が現れるので、そのまま許可をしてやります。
続いて、日付(開始日時と終了日時)とイベントのタイトルを入力し、「add」ボタンを押してください。ログインしているアカウントが、カレンダーの変更権限を持っていれば、これでイベントが追加されます。もし追加に失敗すると、エラーメッセージが表示されます。
ここでは、image.pngというイメージを<img>タグで追加していますが、これはそれぞれで好きなように変更してかまいません。また、《カレンダーID》部分には、例によって自分のカレンダーIDを入れてください。
1.フィードのURLが違う!
表示を取得したときには、CalendarServiceでアクセスしたアドレスは「http://www.google.com/calendar/feeds/カレンダーID/public/full」というものでした。最後は、/public/fullとなってました。が、この/public/fullは、公開されたフィードであり、公開データを取り出すためのものです。データの変更などは、/private/fullにアクセスをする必要があります。
2.ログインしないといけない!
/private/fullにアクセスし、データの変更を行うためには、データ変更の権限を持つユーザーとしてログインをしなければいけません。これには、google.accounts.userというオブジェクトにある「login」メソッドを利用します。
3.イメージを用意しないといけない!
ログイン機能は、どういう理由かわかりませんが、ページ内に必ず<img>タグがなければいけません。何でもいいので、適当なイメージを用意し、<img>タグを記述してください。
これらの点は、イベント追加の作業以前の知識として頭に入れておいてください。次に、イベント追加の流れを整理しておきましょう。
1.CalendarServiceを用意する
まずは、CalendarServiceオブジェクトを用意します。これは既に登場していますからおなじみですね。
2.ログインチェックをする
作業に入る前に、ログインされているかどうかをチェックします。これは、google.accounts.userオブジェクトの「checkLogin」というメソッドを使います。ログインしていなければ、そのまま処理を抜けるようにしておきます。
3.CalendarEventEntryオブジェクトを用意する
イベントの情報は、google.gdata.calendar.CalendarEventEntryというオブジェクトとして用意します。このオブジェクトをnewで作成し、タイトルや開始日時などの情報を組み込んでやります。
4.insertEntryでイベントを追加する
CalendarServiceオブジェクトの「insertEntry」メソッドで、作成したCalendarEventEntryを追加します。これで、カレンダーにイベントが追加されます。
――全体の流れはわかりましたか? では、これも簡単なサンプルを作成し、それを見ながら理解していくことにしましょう。これは、簡単なイベント登録のサンプルです。
まず、カレンダーにアクセス可能なアカウントでログインしてからこのページにアクセスし、それから「Login」ボタンを押してください。このWebページから、Googleカレンダーにアクセスを許可するための表示が現れるので、そのまま許可をしてやります。
続いて、日付(開始日時と終了日時)とイベントのタイトルを入力し、「add」ボタンを押してください。ログインしているアカウントが、カレンダーの変更権限を持っていれば、これでイベントが追加されます。もし追加に失敗すると、エラーメッセージが表示されます。
ここでは、image.pngというイメージを<img>タグで追加していますが、これはそれぞれで好きなように変更してかまいません。また、《カレンダーID》部分には、例によって自分のカレンダーIDを入れてください。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" />
<title>Sample Page</title>
<script type="text/javascript"
src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
<!--
google.load("gdata","2");
google.setOnLoadCallback(getMyFeed);
function getMyFeed(){
var service = null;
var url = "http://www.google.com/calendar/feeds/
《カレンダーID》/public/full";
service = new google.gdata.calendar.CalendarService
("calendar-sample");
query = new google.gdata.calendar.CalendarEventQuery(url);
query.setOrderBy(google.gdata.calendar.
CalendarEventQuery.ORDERBY_START_TIME);
query.setSortOrder(google.gdata.calendar.
CalendarEventQuery.SORTORDER_DESCENDING);
query.setSingleEvents(true);
query.setMaxResults(10);
var start = new google.gdata.DateTime.fromIso8601
("2010-01-01");
var end = new google.gdata.DateTime.
fromIso8601("2010-12-31");
query.setMinimumStartTime(start);
query.setMaximumStartTime(end);
service.getEventsFeed(query, callback, handleError);
}
function callback(result) {
var entries = result.feed.entry;
var res = "";
for (var i = 0; i < entries.length; i++) {
var entry = entries[i];
var title = entry.getTitle().getText();
var times = entry.getTimes();
res += (i + 1) + ": " + title + " (" + times[0].startTime + ")<br />";
}
document.getElementById("view").innerHTML = res;
}
function handleError(error) {
alert(error);
}
function doLogin(){
var scope = "https://www.google.com/calendar/feeds/";
var token = google.accounts.user.login(scope);
}
function doAction(){
var service = null;
var url = "http://www.google.com/calendar/feeds/
《カレンダーID》/private/full";
service = new google.gdata.calendar.CalendarService
("calendar-sample");
var scope = "https://www.google.com/calendar/feeds/";
token = google.accounts.user.checkLogin(scope);
if (token == ""){
alert("ログインしてないよ!");
return;
}
var t1 = document.getElementById("time1").value;
var t2 = document.getElementById("time2").value;
var title = document.getElementById("title").value;
var start = new google.gdata.DateTime.fromIso8601(t1);
var end = new google.gdata.DateTime.fromIso8601(t2);
var entry = new google.gdata.calendar.CalendarEventEntry();
entry.setTitle(google.gdata.atom.Text.create(title));
var when = new google.gdata.When();
when.setStartTime(start);
when.setEndTime(end);
entry.addTime(when);
var func = function(result) {
alert("イベントを追加しました。");
getMyFeed();
}
service.insertEntry(url,entry,func,handleError,
google.gdata.calendar.CalendarEventEntry);
}
//-->
</script>
</head>
<body>
<h1>サンプル</h1>
<img src="image.png">
<input type="button" value="Login" onclick="doLogin();">
<hr>
<input type="text" id="time1" value="2010-01-01"><br>
<input type="text" id="time2" value="2010-01-01"><br>
<input type="text" id="title"><br>
<input type="button" value="add" onclick="doAction();">
<hr>
<div id="view" style="color:#096;"></div>
</body>
</html>
※関連コンテンツ