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」を使用しております。
どうかご教授お願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/12/20 11:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント167pt

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


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

id:Cherenkov

「複数回 build_query を実行」
あーそれが一番簡単ですね…

2011/12/13 12:57:46
id:kanienoteiou

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

2011/12/13 16:33:41
id:kodairabase No.2

回答回数661ベストアンサー獲得回数80

ポイント167pt

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

id:kanienoteiou

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

もしくは、すでに充分具体的ですか・・・?

2011/12/13 16:35:38
id:kodairabase

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

2011/12/13 17:24:14
id:a-kuma3 No.3

回答回数4973ベストアンサー獲得回数2154

ポイント166pt

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'];
	...
  • id:windofjuly
    うぃんど 2011/12/13 12:07:55
    例えば、q.hatena.ne.jpとwikipedia.orgの両方から
    「xx」に関連する書き込みを探したいみたいなことだと思いますが・・・

    「そもそも、できるのかな?」で現在思考停止中・・・
  • id:Cherenkov
    そういう話ならpipesですかね

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません