人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Yahoo 検索 APIを使って、複数サイト内の検索のしかたをお教えください。
http://developer.yahoo.co.jp/sample/search/sample1.html
このページで紹介されている、common.phpの、

function build_query() {
global $appid, $service;
if(empty($_REQUEST['query']) || !in_array($_REQUEST['type'],array_keys($service))) done();

$q = '?query='.rawurlencode($_REQUEST['query']);
if(!empty($_REQUEST['start'])) $q.="&start=".$_REQUEST['start'];
$q .= "&appid=$appid";
return $q;
}

の部分の最後に、

function build_query() {
global $appid, $service;
if(empty($_REQUEST['query']) || !in_array($_REQUEST['type'],array_keys($service))) done();

$q = '?query='.rawurlencode($_REQUEST['query']);
if(!empty($_REQUEST['start'])) $q.="&start=".$_REQUEST['start'];
$q .= "&appid=$appid";
$q .= '&site=' . $_REQUEST['site'];//←これを追加。
return $q;
}

とすることで、一つのサイトの中の検索結果を返すことは出来ました。
これを、複数のサイトの検索結果を返す方法がわかりません。
APIは、「アップグレード版ウェブ検索API」を使用しております。
どうかご教授お願いいたします。

●質問者: kanienoteiou
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Cherenkov
●167ポイント

Yahoo!デベロッパーネットワーク - 検索 - ウェブ検索
siteパラメータは検索するドメインを指定するものです。
複数のサイトの検索結果というのは、その指定を外した普通の検索という意味ですよね?
単純に$q .= '&site=' . $_REQUEST['site'];この行を削除するだけです。


windofjulyさんがコメントでおっしゃっているような、横断検索が行いたいのならば、yahoo pipesを使うのがおすすめです。
横断検索 yahoo pipes 等のキーワードでグーグル検索すればヒントが見つかります。
yahoo pipesを使った思いつき実装は以下のような感じです。
検索キーワードを入力してpipesにGETを飛ばすと、pipes側でキーワードを元に複数のサイトの検索結果のrss取得し、それらを束ねてjsonやxml形式で返却されるので、それを元に結果を表示する。


Cherenkovさんのコメント
「複数回 build_query を実行」 あーそれが一番簡単ですね…

kanienoteiouさんのコメント
おお皆さんたくさんお考えいただいて恐縮です。 pipesというのを使うのよりも、build_queryを複数回実行のほうが簡単ということですか?

2 ● kodairabase
●167ポイント

一度の検索クエリーで複数サイトを横断検索することはできないので、 $_REQUEST['site'] のサイト名を変えて、複数回 build_query を実行してください。


kanienoteiouさんのコメント
おへんじありがとうございます! はい。そうです。複数の指定サイトから横断検索したいのです。 他の方も、build_queryを複数回実行が一番良いとおっしゃっていますが、少し具体的にお教えいただいてよろしいでしょうか? もしくは、すでに充分具体的ですか・・・?

kodairabaseさんのコメント
$_REQUEST['site']の中に複数サイトがどのように格納されているのか示してもらわないと、具体的な回答ができません。

3 ● a-kuma3
●166ポイント

build_query 関数は、検索用の URL を作っているだけなので、build_query を複数回呼び出しても駄目です。

build_query で作成した URL を使って検索を実行しているのは、YJSearchExample.php の方です。
以下のコードで、一回分の検索をやってます。

$q=build_query();
$xml = simplexml_load_file($service[$_REQUEST['type']].$q);

このコードを、検索対象サイトの数だけ繰り返すことになります。
検索結果は $res という配列に追加されてゆくので、その部分も含めてループにしてあげれば良いんじゃないでしょうか?

例えば、元のサンプルの形をあまり変えないとしたら、YJSearchExample.php で検索をしているところを、
以下のように変える感じになると思います。

$site_arr = ...; // ※ 検索対象サイトの配列

foreach ($site_arr as $site) { // ※ 対象サイトの数だけループする
 $q=build_query();

 $q .= '&site=' . $site; // ※ build_query が返してきた URL に対象サイトを付け加える

 $xml = simplexml_load_file($service[$_REQUEST['type']].$q);
 foreach($xml->attributes() as $name=>$attr) {
 $res[$name]=$attr;
 }
}

$first = $res['firstResultPosition'];
...
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ