命令の挿入
srch()メソッドなどで登録した命令は、上から1つずつ順番に処理されます。その際、検索結果によっては処理を分岐させたい場合もあるでしょう。「Web AI」は、そういった「実行中の処理の分岐」を実現する仕組みを持っています。
WebSrchでは、命令の実行中にinsrtOn()、insrtOff()メソッドを使うことで、現在の処理の直後に新たな命令を追加していくことができます。
これは、説明するよりも実際のコードを見てもらった方が早いと思います。以下、命令の挿入のサンプルを掲載します。
// flickr URL
var flickrUrl = "http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?"
// 変数の初期化
var kwArr = ["cat", "dog"]; // キーワード配列
var cntArr = {cat : 0, dog : 0}; // 検索数を格納する連想配列
/*
*------------------------------
* 検索のメソッド・チェーン処理
*------------------------------
*/
cWSrch
.reset() // 命令格納のリセット
.srch({
type : "web",
loop : 2, // ループ回数
key : function() {return kwArr[cWSrch.loopCnt]}, // 検索キーワード
res : function(res, cursor) {
if (cursor) {
var kw = kwArr[cWSrch.loopCnt]; // キーワード
cntArr[kw] = cursor.estimatedResultCount; // インデックス数の格納
$("#res").append("<div>" + kw + " : " + cntArr[kw] + "</div>");
}
}
})
.add(function() {
/*
*------------------------------
* 分岐処理
*------------------------------
*/
if (cntArr.dog > cntArr.cat) {
/*
*------------------------------
* dog が多い場合
*------------------------------
*/
$("#res").append("<div>Peoples like dogs!</div>");
/*
*------------------------------
* 新たな命令を実行途中で挿入
*------------------------------
*/
cWSrch
.insrtOn() // ★挿入開始★
.addCallback({
// コールバック処理を追加
exec: function() {
$.getJSON(
flickrUrl,
{tags : "dog", format : "json"},
function(json){
$("#res").append("<div>flickr's dogs</div>");
for (var i = 0; i < json.items.length; i ++) {
var item = json.items[i];
$("<img/>")
.attr("src", item.media.m)
.appendTo("#data");
}
cWSrch.endCallback(); // コールバックの終了を通知
}
)
}
})
.add(function() {
// 検索終了
$("#res").append("<div>end : search dogs.</div>");
})
.insrtOff(); // ★挿入終了★
} else {
/*
*------------------------------
* cat が多い場合
*------------------------------
*/
$("#res").append("<div>Peoples like cats!</div>");
$("#res").append("<div>I don't serach cats (T_T</div>");
}
})
.add(function() {
// 全体の終了処理
$("#res").append("<div>end : exec cmnds.</div>");
drwLoadAnm(false); // ロードアニメ描画
})
.start(); // 実行開始

検索結果によって処理を分岐させたあと、insrtOn()、insrtOff()を使って、実行中に命令を挿入しています。上記のプログラムでは、「dog」のインデックス数が、「cat」のインデックス数より多い場合には、flickrで犬の画像を検索して表示するようにしています。
「Web AI」では、こういった「非同期処理のメソッドチェーン化」と「命令実行中に新規命令を挿入可能な仕組み」を備えています。そのため、人間が検索結果に応じて「考えながら検索する」ような処理を、プログラムとして簡潔に記述できます。
