2007.08.03
category
comments

CASAを使ってPHPとやりとりする

通常はsendAndLoadを使うけど、CASAを使うともっと手軽に出来ます。new VarsLoad()の第1引数でPHPのパスを指定し、第2引数で「GET」か「POST」の送信方法を指定する。myVarsLoad.setValue(“text”, “Hello World”);でPHPに渡したい値を指定する。第1引数が変数名で第2引数が値になる。

PHPからの返り値を受け取るにはコンプリートハンドラーの中でthis.myVarsLoad.getValue(“text”)とすればよい。この場合の引数はPHPから返ってくる変数名を指定する。ちなみにPHPからの返り値を全て見たいときはtrace(this.myVarsLoad.$receive)とすればよい。さらにPHPから返ってくるオブジェクトそのものを見たいときは前回のエントリーでも書いたObjectDumper.toString()メソッドを使うと一発で理解できる。trace(ObjectDumper.toString(myVarsLoad, true, true));とすれば中身が丸見え。

CASA使うとコード量が格段に減ってすっきりするので気持ちよい。

import org.casaframework.load.data.VarsLoad;

//-----[初期設定]
var myVarsLoad:VarsLoad;

//-----[ボタンクリックでPHPと通信]
btn.onRelease = function()
{
	myVarsLoad = new VarsLoad("やりとりしたいPHPのパス", "GET");
	myVarsLoad.addEventObserver(_root, VarsLoad.EVENT_LOAD_COMPLETE, "onDataLoad");
	myVarsLoad.setValue("text", "Hello World");
	myVarsLoad.start();
}

//-----[ロード完了]
function onDataLoad(sender:VarsLoad):Void
{
	trace(this.myVarsLoad.getValue("text"));
}
2007.07.02
category
comments

CASA Frameworkを試す

CASAが良いらしい、とよく聞くので使ってみる。クラスを一通り見てみると「LoadGroup」と「XmlUtil」あたりが便利そうだ。

「LoadGroup」を使うと複数のxmlや画像を一括管理で読み込む事ができる。今回は自分のTwitterのuserとfriendsのRSSをまとめて読み込んでみる。読み込んだ後はxpathにてノードを取得する。(CASAでもノード取得できるはずなんだけど、なぜかセレクトできなかったので。)

注目すべきは「new Percent(25)」の部分。読み込む対称に対して全体の何パーセントを割り当てるか、を設定できる。ここでは1つ目のxmlを読み込んだ時点で全体の25%読込完了となる。ローディングバーとかに細かく反映できたりしてこそばゆい。

読込が完了したら、「getXML()」でxmlに変換してやりxpathにて取り出す。trace文にはTwitterの最新タイトルがそれぞれ表示されます。CASAを使うと、ちょこちょこしたスクリプトを簡便化できるので、地味だけど後からジワジワ効いてきます。「ArrayUtil」クラスとかも使う機会多いんじゃないかな。ちなみに画像をまとめて読み込む場合は「MediaLoad」クラスを使います。詳しくはドキュメントを参照されたし。

import org.casaframework.load.LoadGroup
import org.casaframework.load.base.BytesLoadInterface;
import org.casaframework.load.data.xml.XmlLoad;
import org.casaframework.load.media.MediaLoad;
import org.casaframework.math.Percent;
import org.casaframework.util.XmlUtil;

//-----[xmlの取得先]
var userXML:XmlLoad = new XmlLoad("http://twitter.com/statuses/user_timeline/6023282.rss?"+getTimer());
var friendsXML:XmlLoad = new XmlLoad("http://twitter.com/statuses/friends_timeline/6023282.rss?"+getTimer());
var myLoadGroup = new LoadGroup();

//-----[初期化関数]
init();
function init()
{
   //-----[ロードオブジェクトを追加]
   myLoadGroup.addLoad(userXML, new Percent(25));
   myLoadGroup.addLoad(friendsXML, new Percent(75));

   //-----[オブザーバーの登録]
   myLoadGroup.addEventObserver(this, LoadGroup.EVENT_LOAD_PERCENT, "onGroupLoadPercent");
   myLoadGroup.addEventObserver(this, LoadGroup.EVENT_LOAD_ERROR, "onGroupLoadError");
   myLoadGroup.addEventObserver(this, LoadGroup.EVENT_LOAD_COMPLETE, "onGroupLoadComplete");
   myLoadGroup.start();
}

//-----[ロードグループイベントハンドラー]
function onGroupLoadPercent(sender:LoadGroup, progress:Percent):Void
{
   trace("My group is " + progress.getPercentage() + "% loaded.");
}

function onGroupLoadError(sender:LoadGroup, failedLoad:BytesLoadInterface):Void
{
   myLoadGroup.removeLoad(failedLoad);
   myLoadGroup.start();
}

function onGroupLoadComplete():Void
{
   trace("xml complete");

   var userObj:Object = XmlUtil.xmlToObject(userXML.getXml())['rss'][0]['channel'][0]['item'];
   var friendsObj:Object = XmlUtil.xmlToObject(friendsXML.getXml())['rss'][0]['channel'][0]['item'];

   trace(userObj[1].title[0].nodeValue);
   trace(friendsObj[1].title[0].nodeValue);
}

7/17追記
xpathを使わずにcasaのみでノードを取得するやり方が分かったのでコードを修正しました。

page 1 / 11