異なるドメインからXML(RSS)を取得する

前回のエントリーで触れた、ドメインが異なるRSSをswfで取得する方法について。

今回やろうとしていること

ドメインが異なる場合flashはセキュリティの都合で外部のデータを直に読み込めない。

これだと読めない。
[ www.example.com/reader.swf ] -> [www.example.org/news.rss]

なので手を加えて読めるようにする必要がある。
色々と方法はあるみたいなんだけど、自分でもできそうなの、ということでphpを使った方法でひとまず動くことだけを目標にやってみる。

こんな感じになるようだ。
[www.example.com/reader.swf -> www.example.com/relay.php] -> [www.example.org/news.rss]

要はPHPを中継することで、swfからみると同一ドメインから情報を読んでいるかのようになる、ということみたい。

絵にするとこんな感じだろうか

読み込むRSS

今回は、Googleカレンダーの公開カレンダーから下記のRSSを使わせてもらうことにした。
http://www.google.com/calendar/feeds/7u23mpjv9bd2hoders1fqrft74%40group.calendar.google.com/public/basic

phpの準備

まずテキストファイルを新規作成し、好きな名前をつけて拡張子をphpに変更する(今回は"calendar.php"にした)。
そしてできあがったファイルに以下を記入。

<?php
$loadURL = file_get_contents("http://www.google.com/calendar/feeds/7u23mpjv9bd2hoders1fqrft74%40group.calendar.google.com/public/basic");
echo $loadURL;
?>

上書き保存。
他のRSSを読みたい場合は、"file_get_contents(〜"以下の""で囲まれた部分を書き換える。

正常に動作しているか確認したい場合は、phpが実行可能なサーバにアップロードして、そのファイルをブラウザから開いてみる。
読み込みたいRSSがブラウザ上に表示されれば成功。

flashからphpを読み込む

前回のスクリプトで、

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

とあった部分を、

// XMLloaderを継承してインスタンスを作る
var myXML:XMLloader = new XMLloader("上で作ったphpの場所", true);

に変更する。
今回は、swfとphpが同じフォルダ(階層)にいるので、単純に"calendar.php"に書き換えた。
最終的には

// XMLloaderを継承してインスタンスを作る
var myXML:XMLloader = new XMLloader("calendar.php", true);

こうなる。

これで、異なるドメイン間でも、情報を受け取るようにすることができる。