JSON から FLASH への文字列の渡し方
上記の例では、どうやら単純に FlashVars というパラメータを埋め込んで文字列を渡しているだけのようだ。
というのも、FireBug で調べたところ、最終的に JavaScript は次のような HTML を生成していることがわかったため。
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/> <title>twitter test03</title> <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/8440992.json?callback=viewTwitter&count=1" charset="UTF-8"> viewTwitter([{"user":{"screen_name":"minorio","name":"minorio","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/22139192\/minorio_normal.jpg","description":"","location":"Tokyo, Japan","url":"http:\/\/minorio.nokosu.com\/topolog\/","id":8440992,"protected":false},"created_at":"Mon Oct 08 11:16:25 +0000 2007","text":"Protect my updates \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u30aa\u30d5\u3060\u3068\u3001\u4e8b\u5b9f\u4e0a\u8ab0\u3067\u3082\u305d\u306e\u30e6\u30fc\u30b6\u30fc\u306euser_timeline \u3092\u53d6\u5f97\u3067\u304d\u308b\u3002twitter \u3092\u3084\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u69cb\u308f\u306a\u3044\u306e\u3067\u3001BASIC \u8a8d\u8a3c\u306f\u3082\u3061\u308d\u3093\u4e0d\u8981\u3002","source":"<a href=\"http:\/\/iconfactory.com\/software\/twitterrific\">twitterrific<\/a>","id":320040162,"truncated":true}]); </script> </head> <body> <script src="js/test03.js" type="text/javascript"> </script> <script type="text/javascript"> loadTwitter('8440992'); </script> <div id="viewTwitter"> <object id="twitter" width="230" height="80" align="middle" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"> <param value="sameDomain" name="allowScriptAccess"/> <param value="modules/twitter.swf" name="movie"/> <param value="high" name="quality"/> <param value="#ffffff" name="bgcolor"/> <param value="twitterText=Protect my updates オプションがオフだと、事実上誰でもそのユーザーのuser_timeline を取得できる。twitter をやっていなくても構わないので、BASIC 認証はもちろん不要。&twitterName=minorio" name="FlashVars"/> <embed width="230" height="80" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="sameDomain" flashvars="twitterText=Protect my updates オプションがオフだと、事実上誰でもそのユーザーのuser_timeline を取得できる。twitter をやっていなくても構わないので、BASIC 認証はもちろん不要。&twitterName=minorio" name="twitter" bgcolor="#ffffff" quality="high" src="http://blog.katsuma.tv/modules/twitter.swf"/> </object> </div> </body> </html>
この文字列を埋め込む部分は以下のようなスクリプトになっている。
function loadTwitter(id){ var api = "http://twitter.com/statuses/user_timeline/" + id + ".json?callback=viewTwitter&count=1"; var s = document.createElement('script'); var head = document.getElementsByTagName('head').item(0); s.setAttribute('type', 'text/javascript'); s.setAttribute('src', api); s.setAttribute('charset', 'UTF-8'); head.appendChild(s); } function viewTwitter(json){ //console.log(json); var states = json; var latest_state = states[0]; var msg = latest_state.text; var name = latest_state.user.name; //console.log(name + " : " + msg); var c ='<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="230" height="80" id="twitter" align="middle">'; c += '<param name="allowScriptAccess" value="sameDomain" />'; c += '<param name="movie" value="modules/twitter.swf" />'; c += '<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />'; c += '<param name="FlashVars" value="twitterText=' + msg + '&twitterName=' + name + '" />'; c += '<embed src="http://blog.katsuma.tv/modules/twitter.swf" quality="high" bgcolor="#ffffff" width="230" height="80" name="twitter" align="middle" FlashVars="twitterText=' + msg + '&twitterName=' + name + '" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'; c += '</object>'; //console.log(c); document.getElementById('viewTwitter').innerHTML = c; }
twitterText と twitterName という2つの変数があり、「変数名=値」の形式で & で繋いで渡している。このやり方は URL 変数の場合と同じだ。なーんだ。わりと簡単そうじゃん。
けど、「JSON.as とか使えばもっと楽チン」だそうなので、その辺りを調べてみるのもいいかも。あとは Twitter_AS というものが配られているので、これも見てみる必要がありそう。この辺りが課題だな。
今後の課題:JSON.as と Twitter_AS について少し勉強すること!