いつのまにか通常のGogle Search APIが公開停止となり、代わりにGoogle AJAX Search APIが登場していた。面白そうなので、さっそくAPI keyを取得していじってみることにする。
実のところそれに先立ち、もともとMovabletypeには「キーワード」というフィールドがあり、最近のバージョンではこれに加え「タグ」というフィールドも登場したため、データ整理上この2種類をどう使い分けたものか悩んでいたという経緯があった。
そんなところにたまたまGoogleの新APIが出たので、うまくキーワードを(タグと異なるかたちで)区別して使うことができるのではないか、と思うようになったんである。
もともとMTのキーワードは、デフォルトテンプレートでは表面に出ず、もっぱらサーチ用のアトリビュートになっていた。例えば本文中に「あんこう」と書いたとして、キーワードフィールドに「鮟鱇」と入れておけば、漢字での全文検索にもエントリーが引っかかるという具合。これはこれで便利な機能だけれども、タグがあれば「鍋」「グルメ」みたいなところから容易にエントリーへたどり着けるので、どれだけのニーズがあるのかは疑問。
今回Google AJAX Search APIを入れ、そこへのサーチクエリとして投げるテキストにこのキーワードフィールドを利用すると、
■タグ
・カテゴリー横串でエントリーを束ねる。旅日記でも新宿のレストランでも「タイ料理」でひけるように。
・カテゴリー内の細目見出しをつける。「旅行」カテゴリー内のある旅行だけに関するエントリーを束ねるように。
・そのエントリーの要約見出しとして利用する。
■キーワード
・従来通り、全文検索用の補助索引。
・あるエントリーと似た別のページ(サイト内外を問わず)を拾ってくるためのレレバンシーを作る単語として利用する。
これはいいかも。と、勝手に用法を見いだして喜んでおります。
で、各ページにキーワードを振り、Google APIをひいてみる。ソースはこんな感じ。
<h2 id=”archive-title”>関連ページ – Google Search Results</h2>
<div class=”entry”>
<div class=”entry-content”><MTSetVar name=”GoogleAJAXSearchAPIKey” value=”自分のAPI key”>
<script src=”http://www.google.com/uds/api?file=uds.js&v=0.1&key=<MTGetVar name=”GoogleAJAXSearchAPIKey”>” type=”text/javascript”></script><style type=”text/css”>
@import “http://www.google.com/uds/css/gsearch.css”;
.gsc-control { width: auto; }
</style><script type=”text/javascript”>
//<![CDATA[function OnLoad() {
// Create a search control
var searchControl = new GSearchControl();// Add in a full set of searchers
var searchControl = new GSearchControl();
var siteSearch = new GwebSearch();
siteSearch.setUserDefinedLabel(“<$MTBlogName$>”);
siteSearch.setUserDefinedClassSuffix(“siteSearch”);
siteSearch.setSiteRestriction(“<$MTBlogHost encode_js=”1″$>”);var youtubeSearch = new GwebSearch();
youtubeSearch.setUserDefinedLabel(“Youtube”);
youtubeSearch.setUserDefinedClassSuffix(“youtubeSearch”);
youtubeSearch.setSiteRestriction(“www.youtube.com”);var flickrSearch = new GwebSearch();
flickrSearch.setUserDefinedLabel(“Flickr”);
flickrSearch.setUserDefinedClassSuffix(“flickrSearch”);
flickrSearch.setSiteRestriction(“www.flickr.com”);searchControl.addSearcher(siteSearch);
searchControl.addSearcher(new GblogSearch());
searchControl.addSearcher(new GwebSearch());
searchControl.addSearcher(new GnewsSearch());
searchControl.addSearcher(new GvideoSearch());
searchControl.addSearcher(flickrSearch);
searchControl.addSearcher(youtubeSearch);// 表示オプションのオブジェクト指定
var drawOptions = new GdrawOptions();
drawOptions.setDrawMode(GSearchControl.DRAW_MODE_TABBED);// タブモードの指定
searchControl.draw(document.getElementById(“searchcontrol”), drawOptions);// 初期設定のキーワード
searchControl.execute(“<$MTEntryKeywords$>”);
}GSearch.setOnLoadCallback(OnLoad);
//]]>
</script><div id=”searchcontrol”>読み込み中です……</div>
</div>
</div>
たまたま僕はサブドメイン以下すべてが自分の領域なので自分のブログを検索することが簡単ですが、そうでない人は工夫がいりそうですけど。
これをWidgetにして各ページに貼り付けてみる。
お、思ったより面白いかも。
問題は、タグもキーワードも、過去のブログにほとんどついていない点。そのうち頑張りたいと思います……。
ちなみに参考になったのは例によって例のごとくOgawa::Memorandaさんの「Widget for Google AJAX Search API」。あと、Googleのサイトにも英文ながら例題混じりの解説があるので、それはひととおり試してみるべきでしょうか。