実装方針検討
JSON形式で予定情報を取得できる準備は整いました。あとは以下の手順で処理をすればカレンダアプリケーションに取り込むことができるでしょう。
(1) Google Calendar data APIにアクセスし,JSON形式で予定情報を取得する (2) 取得したJSON文字列をevalし,予定情報を持つオブジェクトにする (3) 予定情報オブジェクトから予定情報を取得し,スケジューラオブジェクトが管理する予定情報として取り込む (4) スケジューラオブジェクトが外部から取り込んだ予定情報は編集/削除はできないようにする
(1)
ここで,
- method
HTTPのメソッドを文字列で指定します。必須項目。GET,
POST, PUT, DELETEなど, HTTPのメソッドは何でも使えます。 - url
アクセス先URLを文字列で指定します。必須項目。
- headers
HTTPリクエストヘッダを,
名前をフィールドとし, 値をそのフィールドの文字列値として持つオブジェクトとして指定します。オプション項目。 例:ブラウザ上でフォームをPOSTで送信する動作をシミュレートする場合に必要なリクエストヘッダの指定
headers:{"Content-type":"application/
x-www-form-urlencoded"} - data
HTTPリクエスト本体を文字列で指定します。オプション項目。
例:ブラウザ上でフォームをPOSTで送信する動作をシミュレートする場合
data:"q=" + encodeURIComponent("Greasemonkey アプリケーション gotin")
- onload
リクエストが正常に終了した場合に呼ばれる関数を指定します。オプション項目。
- onerror
リクエストの処理中にエラーが発生した場合に呼ばれる関数を指定します。オプション項目。
- onreadystatechange
リクエストの処理中状態が変化したタイミングで呼ばれる関数を指定します。オプション項目。
onload,
- status
HTTPレスポンスのHTTPステータスコードを表す整数値。200なら正常終了,
404ならNot Found, など。 - statusText
サーバが返すステータステキストを表す文字列。ステータステキストはサーバにより返す文字列は変わる。
- responseHeaders
HTTPレスポンスに含まれるHTTPヘッダーを表す文字列。リクエスト用ヘッダのフィールドheadersはオブジェクト形式だが,
レスポンス用ヘッダはオブジェクトではなく文字列で返される。 - responseText
HTTPレスポンス本体を表す文字列。
- readyState
HTTPリクエストの段階を示す整数値。
- 1:リクエスト準備中
- 2:リクエスト準備完了
- 3:リクエスト送信完了,
レスポンス待機中 - 4:レスポンス完了
利用例:
GM_
xmlhttpRequest({ method:"GET", url:"http:// www. google. com/ calendar/ feeds/ gordon. timothy. nathanson%40gmail. com/ public/ full?alt=json", onload:function(x){alert(x. responseText)} });
これで予定情報のJSON文字列をalertで出力することができます。図1はその主要部分の一部を示したものです。
図1 Google Calendar data APIのJSONフォーマットによるカレンダ情報の一部
{
"version":"1.0",
"encoding":"UTF-8",
"feed":{"xmlns":"http://www.w3.org/2005/Atom",
//中略
"entry":[{
"title":{"type":"text","$t":"第3回記事公開"},
"content":{"type":"text"},
"gd$when": [{
"startTime":"2007-08-20",
"endTime":"2007-08-21"}],
"gd$where":[{}]},
:
:
}
(2)
GM_xmlhttpRequest({
method:"GET",
url:"http://www.google.com/calendar/feeds/gordon.timothy.nathanson%40gmail.com/public/full?alt=json",
onload:function(x){
alert(eval("(" + x.responseText + ")").feed.entry[0].title.$t);
}
});
これで最初の予定情報のタイトルをalertで出力することができます。図1の場合であれば"第3回記事公開"が表示されるはずです。
この要領で予定情報を取得し,