MSN Search RSS Feeds
宮川さんのところ(MSN Search Results as RSS: blog.bulknews.net)で知りましたが、MSN Search betaがRSSを生成するようになっていました。
早速、「mt-search.cgiを捨てて簡単メタサーチにしてみよう」でやっていた、サイト内検索にGoogle Web APIsを使う方法を放棄しました(待てど暮らせどうちのサイトにはGoogleがクロールに来てくれないので役に立たないのデス)。で、こっちに乗り換えました。
どういうことかと言うと、例えば、「小川」をサイト内(as-is.net内)検索したい場合、
http://beta.search.msn.co.jp/results.aspx?q=%E5%B0%8F%E5%B7%9D+site:as-is.net&format=rss
というURLで検索結果のRSSが得られます(「%E5%B0%8F%E5%B7%9D」は「小川」をUTF-8に変換してURLエンコーディングしたもの)。したがって、このRSSをMagie RSS(Magpie RSS - PHP RSS Parser)などを使って読み込んで表示するだけで、真っ当なサイト内検索として機能してくれるというわけです。
ざっくり書くとこんな感じ。
<?php
define('CHARSET', '<$MTPublishCharset$>');
define('BLOG_HOST', '<$MTBlogHost$>');
define('BLOG_SITE_PATH', '<$MTBlogSitePath$>');
$search = isset($_GET['search']) ? htmlspecialchars(trim($_GET['search'])) : "";
echo <<<EOD
<form method="get" action="{$_SERVER['PHP_SELF']}">
<h3>サイト内の検索</h3>
<p><input name="search" size="30" value="{$search}" /><input type="submit" value="Search" /></p>
</form>
EOD;
if ($search) {
$qstring = urlencode(mb_convert_encoding($search, 'utf-8', CHARSET));
$cond_site = urlencode("site:" . BLOG_HOST);
echo "<h2>MSN Search betaのサイト内検索結果:</h2>\n\n";
require_once BLOG_SITE_PATH . 'rss_fetch.inc';
define('MAGPIE_CACHE_DIR', BLOG_SITE_PATH . 'cache');
define('MAGPIE_OUTPUT_ENCODING', CHARSET);
$url = "http://beta.search.msn.co.jp/results.aspx?q={$qstring}+{$cond_site}&format=rss";
$rss = fetch_rss($url);
if ($cnt = count($rss->items)) {
echo "<p>{$cnt}件見つかりました。</p>\n\n";
echo "<ul>\n";
foreach ($rss->items as $item) {
$title = htmlspecialchars($item['title']);
$url = htmlspecialchars($item['link']);
$snippet = htmlspecialchars($item['description']);
echo "<li><a href=\"$url\">$title</a>\n<div class=\"note\">$snippet</div></li>\n\n";
}
echo "</ul>\n";
} else {
echo "<p>見つかりませんでした。</p>\n\n";
}
echo "<p><small>[Powered by <a href=\"http://blogs.msdn.com/msnsearch/archive/2005/01/11/351064.aspx\">RSS Feeds for MSN Search Results</a>]</small></p>\n\n";
}
?>
上のコードはMovable Typeのテンプレートに張り込むことを考慮して、一部MTタグを使って書かれていますが、先頭で定義しているCHARSET、BLOG_HOST、BLOG_SITE_PATHという三つの定数を適当に変更するだけで、大抵のサイトで利用できます。
Feed2jsやprocfeedのように貼り付け用のJavascriptを生成してくれるサービスを利用してもよいのですが、こうしたサービスは総じて負荷が集中しやすく動作速度も遅いため、ページ全体のレスポンスを悪化させるので、私は使っていません。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/228
Comments (0)