FLASHによる外部RSSリーダー作成メモ

Tags: , ,

JavaScriptのソースコードのみで任意のドメイン上に設置できる外部RSSリーダー(FLASH)作成に関するメモ。このRSSリーダーによりドメインA上に、ドメインB上のFLASHファイルを用いて、ドメインC上のRSSフィード情報を表示することができる。FLSHは「FLASHファイルのあるドメイン」と異なるドメイン上のXMLファイルを普通読むことができないので、FLASHファイルのあるドメイン上に 外部XMLファイルを擬似的に生成してFLASHファイルにロードしてやる必要がある。以下はそのクロスドメインの問題に関する、JavaScript - PHP - FLASHの連携について自分がつまずいたところを強調して解説してある。

ユーザー側JavaScriptソースコード。”http://boreal-kiss.com/js/url_request_rss20.js”にて定義された関数url_request()の引数に取得したいRSSフィードURL(例えば “http://blog.borel-kiss.com/index.xml”)を記述。これによりこのソースコードを記述した地点にFLASHファイル(”http://boreal-kiss.com/flash/rss/rss_reader_20_load_php.swf”)が表示され取得情報を表示する。

<script type="text/javascript" src="http://boreal-kiss.com/js/url_request_rss20.js"></script>
<script type="text/javascript" language="JavaScript">
url_request("http://blog.borel-kiss.com/index.xml");
</script>

関数url_request()の中身。FlashVars属性を用いてJavaScriptからFLASHファイル内で定義された変数に値を渡しFLASHファイルを表示。ここではJavaScript内の変数urlの中身をFLASH内の変数url_xmlに渡している。

function url_request(url){

var flash_obj = ‘<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0″ width=”176″ height=”60″ id=”rss_reader_20_load_php” align=”middle”>’
+ ‘<param name=”allowScriptAccess” value=”always” /”>’
+ ‘<param name=”movie” value=”http://boreal-kiss.com/flash/rss/rss_reader_20_load_php.swf” /”>’
+ ‘<param name=”quality” value=”high” /”>’
+ ‘<param name=”wmode” value=”opaque” /”>’
+ ‘<param name=”FlashVars” value=”url_xml=’+url+’” /”>’
+ ‘<embed src=”http://boreal-kiss.com/flash/rss/rss_reader_20_load_php.swf” quality=”high” wmode=”opaque” bgcolor=”#333333″ width=”176″ height=”60″ name=”rss_reader_20_load_php” align=”middle” allowScriptAccess=”always” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer” FlashVars=”url_xml=’+url+’” /”>’
+ ‘</object”>’;

document.write(flash_obj);
}

FLASH内ActionScriptのソースコード(抜粋)。JavaScriptから受け取った値をurl_xmlに格納、そして同じ内容をLoadVarsクラス内オブジェクトmyData.url_inに格納しなおす(起動時にmyData.url_inに格納しようとしたらうまくいかなかった)。sendAndLoadメソッドでmyDataの情報(ここではmyData.url_in)をPHPファイルに送信し処理後のPHPファイルの内容をXMLクラスnewsXMLに格納する。格納後内容の解析をスタート。ここでPHPファイルは絶対パスで指定する必要がある。異なるドメイン間で通信する場合、相対パスで表記したファイルをFLASHが認識できなかった。

//XMLクラス
var newsXML:XML = new XML();

//ファイル読み込み時に空白を無視(今回は必要ないかも?)
newsXML.ignoreWhite = true;

//FLASHファイル起動時にJavaScriptから値を受け取っている。
var url_xml:String;

//LoadVarsクラス内のオブジェクトmyData.url_inにurl_xmlを格納。
var myData:LoadVars = new LoadVars();
myData.url_in = url_xml;

//PHPファイル(”load.php”)にmyDataの中身を送り、
//PHPファイルで処理後の内容をnewsXMLに格納する。
//PHPファイルは絶対パスで指定。
myData.sendAndLoad(”http://boreal-kiss.com/flash/rss/load.php”, newsXML);

newsXML.onLoad = function(result:Boolean){
(newsXMLロード後の処理)
}

サーバー側PHPソースコード(”load.php”<body>タグ内の内容)。FLASHから変数url_in(RSSフィードURL。例えば “http://blog.borel-kiss.com/index.xml”)を受け取り、その内容をその場に表示。このPHPファイル自体がFLASHファイルの置かれている同一ドメインに生成された疑似XMLファイルの役割を果たす。PHPのソースコードはHTMLファイル内に表記されているため、この疑似XMLファイルには取得したいXMLファイルの内容の他に<html>や<body>タグ等も含まれる。FLASHでこの疑似XMLファイルの中身を解析する際に注意が必要。

<?php
$url = $_POST["url_in“];
readfile($url);
?>

追記(2007/12/17):上記内容の場合、読み込んだXMLファイルのエンコーディング(EUC-JPなど)によっては文字化けしてFLASHに格納される。文字化けを回避する具体的な方法についてはこちらを参照。

RSSリーダー作成中

Tags:

blog Boreal Kissの記事タイトルをランダムに表示するFLASHを作成中。Javascriptで読み込むxmlファイルを指定すれば他の人でも利用できるブログパーツになりそう。クロスドメインの問題がなければ色々面白い遊びができそうなんだけどなあ。それが残念。

[FLASH][ブログパーツ]Balls

Tags: ,


flash boreal kiss

色目が気に入ったのでブログパーツ化。といっても完全観賞用だけど。放っておくとえらいことになる。

ブログ等の表示させたい場所に下記ソースコードを貼付けてください。皆さんに気持ちよくご利用いただくために、利用に関するルールが二つあります(以下参照)。守っていただける方のみ当サイトのブログパーツをご利用ください。よろしくお願いします。

(1) ソースコードの改変をしない。
(2) ソースコードの再配布をしない。

FLASH: Too many balls

Tags:

ペルセウス座流星群はたぶんこんな感じではなかろうか。

balls_300x300.jpg

PLAY >>

FLASHゲーム: おっぱい LASER

Tags: ,

あまりにも簡単すぎるのでゲームの仕組みを少し改造しようかな。

windowlicker_300x300.jpg

PLAY >>

← Previous PageNext Page →