検索エンジン経由のアクセス時はGoogle Ajax Searchでサイト内検索した結果を表示

調べれば誰かやっていそうな小ネタですが。

検索エンジンからアクセスしてきたときに、そのときの検索語でサイト内検索しておいて結果を表示すると便利っぽいのでやってみた。このブログのサイト内検索に使っている、GoogleAjaxSearchにちょっとコードを追加。

function load()
{
    var searchControl = new GSearchControl();
    var blogSearch = new GwebSearch();
..snip..
    searchControl.draw(document.getElementById("searchcontrol"));
    var query = '<?=my_get_referer_query()?>';
    if (query != '') {
        searchControl.execute(query);
    }
}

JavaScriptで完結させたいところですが、文字コードの変換は面倒なのでリファラーから検索語を拾う箇所はPHPで。

function my_get_referer_query()
{
    $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    if ($referer == '') {
        return '';
    }
    $p = @parse_url($referer);
    if ($p === false || !isset($p['host']) || !isset($p['query']) || $p['host'] == $_SERVER['HTTP_HOST']) {
        return;
    }
    if (strpos($p['host'], 'google.') !== false || strpos($p['host'], 'msn.') !== false) {
        $key = 'q';
    } else if (strpos($p['host'], 'yahoo.') !== false) {
        $key = 'p';
    } else if (strpos($p['host'], 'goo.') !== false) {
        $key = 'MT';
    } else if (strpos($p['host'], 'excite.') !== false) {
        $key = 'search';
    } else if (strpos($p['host'], 'nifty.') !== false) {
        $key = 'Text';
    } else if (strpos($p['host'], 'infoseek.') !== false) {
        $key = 'qt';
    } else if (strpos($p['host'], 'aol.com') !== false) {
        $key = 'query';
    } else {
        $key = 'q';
    }
    parse_str($p['query'], $param);
    $query = isset($param[$key]) ? $param[$key] : '';
    return htmlspecialchars(mb_convert_encoding(urldecode($query), 'UTF-8', 'auto'), ENT_QUOTES);
}

レイアウト的にサイト内検索の位置が一番下なのがいまいち。。検索エンジン経由のときは横にあった方が見やすいかも。

This entry was posted in つくる. Bookmark the permalink. Both comments and trackbacks are currently closed.

One Comment

  1. だいひょー
    Posted 2007/02/19 at 9:58 am | Permalink

    なるほど! これ面白いですね。うーん

Page optimized by WP Minify WordPress Plugin