Googleカレンダーをflashで読み込む

検索クエリがだめだったのか、そもそも需要がないのか、具体的なのが見つけられなかったのでメモ。
AS3.0でGoogleカレンダーを読み込んでみる。

Googleカレンダーの準備

  1. Googleカレンダーにログイン(もしくはアカウントを作る)
  2. 適当なカレンダーを作る
  3. 対象のカレンダーの"カレンダー設定"を開く
  4. "このカレンダーを共有"タブを選択して、"このカレンダーを一般公開する"をチェック*1
  5. "カレンダーの情報"のタブに戻って"カレンダーのアドレス"のXMLボタンをクリック
  6. 表示されたURLを控える

ヘルプはこちら

flashから読み込む

XMLの読み込みはXMLloaderクラスを使わせて頂いた。

上記のXMLloaderクラスを書き込んだXMLloader.asファイルと、メインの〜任意のファイル名〜.flaが同一フォルダにあるとして、メインのタイムラインのスクリプト

// XMLloaderを継承してインスタンスを作る
var myXML:XMLloader = new XMLloader("〜googleカレンダーのアドレス〜", true);

// デフォルト名前空間を設定
default xml namespace = new Namespace("http://www.w3.org/2005/Atom");

// 読み込んだXMLを格納する変数
var rootXML:XML = new XML();

// イベントリスナーの設定
myXML.addEventListener(XMLloader.LOAD_COMPLETE, compHandler);

// XMLの読み込みが完了したときに呼び出されるハンドラ
function compHandler(evt:Event){
	rootXML = myXML.getXML();
	trace(rootXML.entry);
}

と書くことで、タグで囲まれたノードが出力ウィンドウに羅列された。
あとはいろんなサイトのサンプルで紹介されてるようなXMLの利用方法を応用すればOK。

補足?

名前空間

個人的につまづいたのが

// デフォルト名前空間を設定
default xml namespace = new Namespace("http://www.w3.org/2005/Atom");

の部分。
これを設定しないと、E4Xに準拠したXMLへのアクセスができず、出力が"undefined"になってしまう。
あまり詳しく理解できていなけれども、対象のXMLがどの規定に沿っているかをあらかじめ設定しなければXMLをちゃんと読めないようだ。
対象のXMLがどの規定に沿っているかを調べるには、XMLの先頭のタグの中にあるいくつかある"xmlns〜"と書かれた値のうち、xmlns="http〜 のようにxmlnsの次に:が続いていない行の""で囲まれた文字列を見る。Googleカレンダーの場合は"http://www.w3.org/2005/Atom"の部分を引数として名前空間を設定する。

クロスドメインについて

今回は話を単純にするために省いたけれど、これをwebサーバにそのまま上げてもクロスドメインが解決されないのでちゃんと動作しない。
↓↓参考
各種APIをFlashで使うために、クロスドメインに打ち勝つPHP // PHP&Flash - bute_lab.
flash PHP経由でクロスドメインにアクセスする方法 (シモムラボ 2.0)
今度ここだけを取り上げる、かも。

*1:非公開URLを利用することもできるけど、flashで利用すると結局外部からわかっちゃうんじゃないかと。。。