「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); }