2011年6月19日日曜日

公開されているデータを取得してみる(データの取得と文字コード変換)

外部に公開されているデータを、Flash(AS3)で取り込んでみる
(東京電力で公開されているデータがあるので、それを取ってくる)



import flash.events.Event;

var url:String = "http://www.tepco.co.jp/forecast/html/images/juyo-j.csv";
var loader : URLLoader;
var request:URLRequest = new URLRequest(url);

getTepcoData();

function getTepcoData()
{
loader = new URLLoader();
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete); //読み終わるのを待つ
}

function onComplete(e:Event)
{
trace(loader.data);
}

まあなんて簡単。
と思いきや、、、、、、。
いろいろ諸問題が発生。。

Flashのtrace出力をみてみると、文字化け。。。
公開データはシフトJIS、FlashではUTF-8を扱うという文字コードの違いに起因します。

ということで、UTF-8へ変換をかけてあげないと、折角データを取り込んでもFlashで表示したりできなくなる。。
文字コード変換については、ByteArrayクラスに、writeMultibyteというメソッドがあるのだが、どうも安定性がわるいらしい。自力で書くのも良いが、既にライブラリとして公開されているので、それを活用することにする。
今回用いたのは、as3jcode
このライブラリは、bytearrayのデータを指定した文字コードに変換する機能を持っている。。

http://d.hatena.ne.jp/lyokato/20100121/1264083565   ←日本語での解説
https://github.com/lyokato/as3jcode ←ソースコードはこちら


URLLoaderのloadメソッドは、TEXTモードで取るとStringで入ってしまうので、
あとで大変。(as3jcodeのIFがByteArrayなので)

loader.dataFormat = URLLoaderDataFormat.BINARY;

としてバイナリで取ってあげると、ByteArrayで取れるので便利。
これを、Jcodeで
Jcode.from_sjis(loader.data)

と、変換してあげると、無事に日本語表示されましたん。


今回はこんな感じになりました。
import flash.events.Event;

var url:String = "http://www.tepco.co.jp/forecast/html/images/juyo-j.csv";

var loader : URLLoader;

var request:URLRequest = new URLRequest(url);

getTepcoData();

function getTepcoData()
{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
}

function onComplete(e:Event)
{
trace(Jcode.from_sjis(loader.data));
}


折角なので、これを基にもう少し拡張して行きたいと思います。。

2011年6月14日火曜日

AIR2.6 非同期での書き込みが・・・

OpenAsyncで読み込みは非同期でできるけど、書き込みはなかなか難しそう。
Writeが終わった時のイベントが立たない。。。
COMPLETEが使えるのかとおもったけど、結局発生しない模様。。

WindowsコマンドラインでShiftJis以外の文字コードを使う

コマンドラインは起動すると、普通は文字コードが932(Shift Jis)になっている。
文字コードを変えるコマンドは、

chcp [文字コード]

普段使うのは、
932: Shift Jis
65001: Utf-8
20932: EUC-JP
50222: JIS
51932: euc-jp
くらいですかね。

ここで注意点、Shigt-Jisの状態で先に文字コードをラスターから「MSゴシック」など日本語対応フォントに変えておかないと、もれなく日本語が文字化け表示されます。

Flex SDK を用いて、コマンドライン経由でairパッケージをテストする場合、
文字出力がutf-8なので、この方法は知っておいたほうが特です。。