E4Xで天気予報取得
ActionScript3.0を勉強しています。
E4Xを試そうと思い、Livedoor Weather Hackから天気データを読み取ろうとしたが、うまくいかない。
どうやら、外部ドメインからデータを取得しようとすると「セキュリティサンドボックス侵害」エラーがでるようです。
調べた限りでは、解決方法はcrossdomain.xmlを接続先サーバーに設置するしかないようです。
これだと使えないなぁ。
フォーラム - Flex User Group
によると自サーバーのアプリを介してデータを取得しているらしい・・・
とにかく天気が気になったのでやってみた。
Windows環境です。以下すべて同ディレクトリ(C直下)
Rubyで簡単なWebサーバーを実装。
server.rb
require "webrick" s = WEBrick::HTTPServer.new(:Port => 7000, :CGIInterpreter => "c:/ruby/bin/ruby.exe") s.mount("/", WEBrick::HTTPServlet::FileHandler, "c:/") ["INT", "TERM"].each do |t| trap(t){ s.shutdown } end s.start
require "open-uri" puts "Content-Type: text/xml;charset=UTF-8\n\n" open("http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today") do |f| puts f.read end
次のコードをコンパイルしたSWFファイルを置く。
Sample.as
package { import flash.text.*; import flash.display.*; import flash.events.Event; import flash.net.*; public class Sample extends Sprite { public function Sample() { var text:TextField = new TextField(); text.width = 500; text.height = 500; addChild(text); var request:URLRequest = new URLRequest("http://localhost:7000/weather.cgi"); var loader:URLLoader = new URLLoader(request); loader.addEventListener(Event.COMPLETE, function(event:Event):void { var loader:URLLoader = event.target as URLLoader; if(loader != null) { var e:XML = new XML(loader.data); text.text = e.title.toString() + "\n" + e.telop.toString(); } }); } } }
swfファイルを見る為のHTMLを書く。
index.html
<EMBED src="Sample.swf" loop=true quality=high bgcolor=#aaaaff WIDTH="500" HEIGHT="500" NAME="fi1" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> </EMBED>
動作確認
#サーバー起動 ruby server.rb #CGIの確認 http://localhost:7000/weather.cgi #天気を見る http://localhost:7000/index.html
やっと動いた・・・・。
天気がわかってスッキリするはずもなく、めんどくさすぎです。
本当にこんな方法しかないのか?詳しい人おしえてください。