検索エンジンのAPIを使ったMT検索

MT-column > Plugin
| | コメント(0) | トラックバック(0)

SearchEngine

Google や Yahoo! の検索APIを利用してサイトを検索するプラグインを作成しました。

検索例

Yahoo! Web検索

「ckeditor」「1.01」で Yahoo! の検索APIを利用して検索を行います。
https://tec.toi-planning.net/mtos/mt-search.cgi?search=ckeditor+1.01&__mode=yahoo&type=web&IncludeBlogs=10%2C1&limit=8

Google 画像検索

「ckeditor」「1.01」で Google の検索APIを利用して検索を行います。
https://tec.toi-planning.net/mtos/mt-search.cgi?IncludeBlogs=10%2C1&limit=20&search=ckeditor+1.01&__mode=google&type=images

設置方法

  1. ダウンロードページから「SearchEngine-x.x.x.zip」をダウンロードします。(x.x.xにはバージョン番号が入ります)
  2. ダウンロードしたファイルを展開します。
  3. SearchEngine-x.x.x/plugins/SearchEngine を、インストール先のMTに plugins/SearchEngine としてアップロードします。
  4. Yahoo! のAPIを使う場合はアプリケーションIDを取得して、システムのプラグイン設定で取得したIDを設定します。
  5. テンプレートを編集します。(編集例は後述)
  6. 設置完了です

テンプレート

検索条件と検索結果のテンプレートを以下のように編集します。
(mt:FillInFormは別にプラグインをインストールする必要があります)

検索条件

<form method="get" action="<mt:CGIPath /><mt:SearchScript />">
    <input type="hidden" name="IncludeBlogs" value="<mt:BlogID />" />
    <input type="hidden" name="limit" value="<mt:SearchMaxResults />" />
    <mt:Ignore>
        <!--
             対象とするディレクトリを指定することもできます。
             デフォルトでは<mt:BlogURL />が利用されます。
        -->
        <input type="hidden" name="site" value="<mt:BlogArchiveURL>/dir/" />
    </mt:Ignore>

    <mt:FillInForm>
    <input type="text" id="search" class="ti" name="search" value="<$mt:SearchString$>" />
    
    <fieldset>
        <label for="mode_google">Google:</label>
        <input id="mode_google" type="radio" name="__mode" value="google" />
        <label for="mode_yahoo">Yahoo!:</label>
        <input id="mode_yahoo" type="radio" name="__mode" value="yahoo" />
    </fieldset>
    
    <fieldset id="search_type">
        <label for="type_web">Web:</label>
        <input id="type_web" type="radio" name="type" value="web" />
        <label for="type_images">Image:</label>
        <input id="type_images" type="radio" name="type" value="images" />
    </fieldset>

    <div id="format">
        <fieldset id="format_web">
            <label for="format_pdf">PDF:</label>
            <input id="format_pdf" type="radio" name="format" value="pdf" />
            <label for="format_doc">DOC:</label>
            <input id="format_doc" type="radio" name="format" value="doc" />
        </fieldset>

        <fieldset id="format_images">
            <label for="format_jpeg">JPEG:</label>
            <input id="format_jpeg" type="radio" name="format" value="jpeg" />
            <label for="format_png">PNG:</label>
            <input id="format_png" type="radio" name="format" value="png" />
        </fieldset>
    </div>

    <input type="submit" accesskey="4" value="検索" />
    </mt:FillInForm>
</form>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script>
<script>
jQuery(function() {
    function onclick() {
        $('#format fieldset').hide();
        if (this != window) {
            $('#format input').attr('checked', '');
        }

        var format = $('#search_type input:checked').val();
        if (format) {
            $('#format_' + format).show();
        }
    }

    $('#search_type input').click(onclick);
    onclick();
});
</script>

検索結果

<mt:IfSearchEngineIsEntry>
    <$mt:Include module="ブログ記事の概要" hide_counts="1"$>
</mt:IfSearchEngineIsEntry>

<mt:IfSearchEngineIsPage>
    <$mt:Include module="ブログ記事の概要" hide_counts="1"$>
</mt:IfSearchEngineIsPage>

<mt:IfSearchEngineIsAsset>
<div id="" class="entry-asset asset hentry">
    <div class="asset-header">
        <h2 class="asset-name entry-title"><a href="<mt:AssetURL />" rel="bookmark"><mt:AssetFileName></a></h2>
        <div class="asset-meta">
            <span class="byline">
            </span>
        </div>
    </div>
    <div class="asset-content entry-content">
        <div class="asset-body">
            <mt:If tag="AssetDescription">
                <mt:AssetDescription />
                <br />
            </mt:If>
            <mt:If tag="AssetThumbnailURL">
                <a href="<mt:AssetURL />" ><img src="<mt:AssetThumbnailURL width="200" />"></a>
            </mt:If>
        </div>
    </div>
    <div class="asset-footer"></div>
</div>
</mt:IfSearchEngineIsAsset>

<mt:IfSearchEngineIsUnkown>
<div id="" class="entry-asset asset hentry">
    <div class="asset-header">
        <h2 class="asset-name entry-title"><a href="<mt:SearchEngineResultURL />" rel="bookmark"><mt:SearchEngineResultTitle></a></h2>
        <div class="asset-meta">
            <span class="byline">
            </span>
        </div>
    </div>
    <div class="asset-content entry-content">
        <div class="asset-body">
            <mt:SearchEngineResultContent />
            <br />
            <mt:If tag="SearchEngineSearchType" eq="images">
                <a href="<mt:SearchEngineResultURL />"><img src="<mt:SearchEngineResultURL />" width="200" /></a>
            <mt:Else>
                <a href="<mt:SearchEngineResultURL />"><mt:SearchEngineResultURL /></a>
            </mt:If>
        </div>
    </div>
    <div class="asset-footer"></div>
</div>
</mt:IfSearchEngineIsUnkown>

<mt:SearchResultsFooter>
<div style="text-align: right;">
    <mt:SearchEnginePoweredBy />
</div>
</mt:SearchResultsFooter>

用途

MTの検索機能を拡張するサンプルとして作ったのですが、検索エンジンでインデックスされていればPDFも検索対象にできるなど、意外と使い道もありそうな気がしています。

既知の問題点

  • インデックステンプレートやアーカイブテンプレートを判別できないなど、今はあまり丁寧に実装されていません。
  • Googleの検索APIを利用する場合は、1ページにつき8件まで、また最大8ページまでしか表示できません。

拡張

SearchEngineはさらに別のプラグインで拡張することができ、少しのコードを書くだけで他の検索エンジンや独自の検索システムを埋め込むことができます。

ダウンロードページに SearchEngineSample と SearchEngineTest という 2つのサンプルがあります。

対応しているMT

  • MT4
  • MT5

ライセンス

MITライセンス

トラックバック(0)

このブログ記事を参照しているブログ一覧: 検索エンジンのAPIを使ったMT検索

このブログ記事に対するトラックバックURL: https://tec.toi-planning.net/mtos/mt-tb.cgi/727

コメントする