- 2009年8月 4日 21:03
- ActionScript 3.0
IPinfodbは、IP情報を一括してXMLやJSON,XMLなどの各種データで取得できるサービスです。このサービスを利用すれば、アクセスしたユーザーのIPを取得し、国名・県名、アクセスポイントの経度緯度などを活用することが出来ます。
クロスドメインも問題なし
さて、他社サービスのAPIをAPIを利用して、FlashやJavascriptを用いて開発を行う場合、障壁となるのがセキュリティサンドボックスです。特にActionScriptでは別ドメインのサーバーにアクセスしてデータを取得するには、ポリシーファイル(crossdomain.xml)と呼ばれるXMLファイルを用意して、対象ドメイン側でアクセス側のドメインを許可する必要があります。この点IPinfodbでは、crossdomain.xmlがallow-access-from domain="*"(全てのドメインに対してアクセス許可)で許可されていますので、問題なくデータを取得することが出来ます。(ただし、ローカルファイルでのアクセスはできません。テストするには、サーバーか仮想サーバーへのアップロードが必要です)。
IPinfodb ActionScript 3.0 API
API IPinfodbを使用するときにおすすめなのが今回ご紹介する、IPinfodb ActionScript 3.0 APIです。この Creative Geek TalkのDaanさんが紹介しているAS3ライブラリは、IPinfodbの通信とイベント管理を担ってくれます。このAPIの特徴は手軽さにあります。僕たちは、IPinfodbのURLを知らなくたって、サービスを享受でき、リスナー登録するだけで勝手に結果がオブジェクトにくるまって帰ってきます。パースする必要すらない。便利ですね!
では、さっそく使い方を見てみましょう。
IPinfodb ActionScript 3.0 APIは、SWCで配布されています。クラスパスを通しておきましょう。
流れは以下のようになります。
- IPinfodbEvents.IP_LOCATOR_RESULTイベントをリスナー登録
- IPinfodb.getIPInformationメソッドで通信開始。
- 通信・パースが終了し、イベントが発生。
- IPinfodbEventsイベントインスタンスからclsIPinfodbインスタンスを取得。
簡単ですね。ソースも見てみましょう。
package {
import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFormat;
import ipinfodb.data.clsIPinfodb;
import ipinfodb.IPinfodb;
import ipinfodb.events.IPinfodbEvents;
/**@author kamoyusuke */
public class TestExample extends MovieClip {
private var textField:TextField;
public function TestExample():void {
//テキストフィールドの生成
textField = addChild(new TextField) as TextField;
textField.width = stage.stageWidth;
textField.height = stage.stageHeight;
textField.multiline = true;
//まずはIP情報取得したら送出されるイベントを登録する
IPinfodb._staticDispatcher.addEventListener(IPinfodbEvents.IP_LOCATOR_RESULT, ipLocatorResultHandler)
//通信を開始する。
IPinfodb.getIPInformation();
}
private function ipLocatorResultHandler(e:IPinfodbEvents):void {
//IP情報を内包するclsIPinfodbインスタンスを取得する。
var ipInfo:clsIPinfodb = e._data as clsIPinfodb;
textField.text = (["ip : "+ipInfo.ip,
"countryCode : "+ipInfo.countryCode,
"countryName : "+ipInfo.countryName,
"regionCode : "+ipInfo.regionCode,
"regionName :"+ipInfo.regionName,
"city : "+ipInfo.city,
"lat : "+ipInfo.lat,
"lon : "+ipInfo.lon,
].join("\n"));
}
}
}



