「Web AI」は、クロノス・クラウンの柳井政和が開発しているJavaScirptのライブラリです。
「Web AI」には、検索をメソッド・チェーンで効率化させる機能があります。この機能を使えば、検索結果を元にして、次の検索を行うといった処理を手軽に書くことができます。
「Web AI」の検索は、「Google AJAX API」を使っています。検索オブジェクトは、「Google AJAX Search API」のサーチャー・オブジェクトになります。また、受け取る結果は、同APIの結果オブジェクトになります。
また、検索結果からのキーワード抽出や、文章抽出の機能もあります。
それでは以下、「Web AI」のWeb検索のサンプルを掲載します。
まずは、実例です。
検索キーワード:以下、ソースコードです。メソッド・チェーンで検索を行っているのが分かると思います。
「srch」メソッドの引数に使う連想配列の「page」「loop」「key」などは、数値や文字列を直接設定しても、関数を設定しても構いません。関数の場合は、呼び出されるごとに、関数の結果を引数と解釈して受け取ります。これらは、全て内部で自動的に処理されます。
// Googleからスクリプトをロード
google.load("search", "1");
google.load("feeds", "1");
google.load("jquery", "1.4.3");
// ロード中アニメ
var loadAnmArr // ロード中アニメ配列
= [".(^o^).", "(^o^)..", "^o^)..(", "o^)..(^", "^)..(^o", ")..(^o^", "..(^o^)"];
var loadAnmCnt = 0; // ロード中アニメ・カウンター
// Web AI
var $WA = crocro.webAi; // 短縮表記
var cWSrch = new $WA.WebSrch(); // Web検索
var cJpKw = new $WA.JpKw(); // 日本語キーワード
var cJpSntnc = new $WA.JpSntnc(); // 日本語文章
/**
* 【初期化処理】
*/
cWSrch.ready(function(){
prettyPrint(); // ソースの装飾(*説明装飾用)
// 検索ごとにインターバルを置きたい場合は数値か関数を指定
//cWSrch.intrvl = 1000;
//cWSrch.intrvl = function(){return (Math.floor(Math.random() * 5) + 1) * 100;};
cWSrch
.brand("gglBrnd") // Googleのブランド表示
.init({
type : "web", // Web検索を初期化
opt : function(obj) { // 検索オブジェクトを受け取り、設定を変更
obj.setResultSetSize(google.search.Search.LARGE_RESULTSET); // 8件
}
})
.init({
type : "blg", // ブログ検索を初期化
opt : function(obj) { // 検索オブジェクトを受け取り、設定を変更
obj.setResultSetSize(google.search.Search.LARGE_RESULTSET); // 8件
}
})
.setEachCall(function(){
// ステップごとに呼び出される処理を追加
drwLoadAnm(true); // ロードアニメ描画
})
.start(); // 実行開始
});
/**
* @title 【テスト】
* @description
*
* テストを行う。
*/
function test() {
// 変数の初期化
var qStr = $("#q").val(); // 検索語
var kwArr = []; // キーワード配列
// リセット
cJpKw.reset();
cJpSntnc.reset();
// 検索語はキーワード対象外にする(「,」区切りで複数指定可能)
cJpKw.avoidStr = qStr;
// 検索のメソッド・チェーン処理
cWSrch
.reset() // 命令格納のリセット
.srch({
type : "web",
page : 4, // 検索を行うページ数を指定(8件×4ページで32件分)
// 指定がない場合は1ページ目だけ検索
// 結果は、検索したページの結果を全て連結した状態で得られる
key : qStr, // 検索キーワード
res : function(res, cursor) {
var outStr = "";
if (cursor) {
outStr += "検索数 : " + cursor.estimatedResultCount + "\n\n";
}
if (! res || res.length <= 0) {
// 結果なし
cWSrch.cmndsBreak(); // チェーン処理終了
drwLoadAnm(false); // ロードアニメ描画
} else {
// 結果あり
for (var i = 0; i < res.length; i ++) {
// 出力文字列の作成
var r = res[i];
outStr += "[" + i + "]\n"
+ r.titleNoFormatting + "\n"
+ r.unescapedUrl + "\n"
+ r.content + "\n\n";
// キーワードの収集
cJpKw.addSrc(r.titleNoFormatting);
cJpKw.addSrc(r.content);
}
}
$("#res1").val(outStr);
}
})
.srch({
init : function() {
// 命令の初期化フェイズ
// パラメータ付きで、キーワードを出力
$("#res1Kw").val(cJpKw.getStrArr({prmAll: true}).join("\n"));
// キーワードの取得
kwArr = cJpKw.getStrArr();
},
type : "blg",
loop : function() { // 検索のループ回数。引数は数値でも関数でも構わない
return (kwArr.length >= 2) ? 2 : kwArr.length;
},
key : function() { // 引数が関数なら、ループ毎に実行される
// キーワード
return kwArr[cWSrch.loopCnt];
},
res : function(res) {
if (! res || res.length <= 0) return; // 結果なし
var outStr = "";
for (var i = 0; i < res.length; i ++) {
var r = res[i];
outStr += "[" + i + "]\n"
+ r.titleNoFormatting + "\n"
+ r.unescapedUrl + "\n"
+ r.content + "\n\n";
// 文章の収集
cJpSntnc.addSntnc(r.content);
}
$("#res2_" + (cWSrch.loopCnt + 1)).val(outStr);
}
})
.add(function() {
// 抽出した文章を出力
var outStr = cJpSntnc.getSntncArr({usePrfrd: false}); // 校正なしで文章取得
$("#resSntnc").val(outStr.join("\n"));
// 検索の終了
drwLoadAnm(false); // ロードアニメ描画
})
.start(); // 実行開始
}
/**
* @title 【ロードアニメ描画】
* @description
*
* ロード中のアニメを描画する。
*
* @param loading ロード中か否か
* @return なし
*/
function drwLoadAnm(loading) {
var dwStr = ""
if (loading) {
dwStr = "Now Loading... " + loadAnmArr[loadAnmCnt ++ % loadAnmArr.length];
}
$("#loading").text(dwStr);
}