6

yahoo 開発者の Web サイトにある手順を使用して、API キーを使用して yahoo から結果を取得できます。http://developer.yahoo.com/boss/search/boss_api_guide/codeexamples.html#

コード:

if ($_POST['query'])
{
$newline="<br />";
$query = urlencode("'{$_POST['query']}'");

require("OAuth.php");

$cc_key  = "key goes here";
$cc_secret = "secret goes here";
$url = "http://yboss.yahooapis.com/ysearch/web";
$args = array();
$args["q"] = "$query";
$args["format"] = "json";

$consumer = new OAuthConsumer($cc_key, $cc_secret);
$request = OAuthRequest::from_consumer_and_token($consumer, NULL,"GET", $url, $args);
$request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, NULL);
$url = sprintf("%s?%s", $url, OAuthUtil::build_http_query($args));
$ch = curl_init();
$headers = array($request->to_header());
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
$rsp = curl_exec($ch);
$results = json_decode($rsp); 

print_r($results);

}

上に示したようにprint_r($results)を使用すると、次のような結果が得られます (「エレファント」を検索して表示された最初の 3 つの結果の抜粋)。

2 つ以上のリンクを投稿するには少なくとも 10 の評判が必要なので、URL を「WWW」に変更したことに注意してください。

象への脅威 » 象に関する詳細: 基本情報 . 脅威。擁護者が支援するために行っていること。できること ... ) [2] => stdClass オブジェクト ( [date] => [clickurl] => WWW [url] => WWW [dispurl] => kids.nationalgeographic.com/.../african-elephant [タイトル] => アフリカゾウの事実と写真 -- ナショナル ジオグラフィック キッズ [要約] => ゾウに関する子供向けの特集で、写真、ビデオ、オーディオ、楽しい事実、電子メールのはがき、他の動物へのリンクが掲載されています。) [ 3] => stdClass Object ( [date] => [clickurl] => WWW [url] => WWW [dispurl] => elephant.elehost.com/About_Elephants/about_elephants.htm [title] => 象について [要約] => ゾウ情報レポジトリでゾウのすべてを!このページには、ゾウの世界に足を踏み入れるためのゾウ関連の事実の概要が含まれています。)

次のように、結果を読みやすい形式で出力しようとしました。

コード試行 1:

foreach ($results->{ 'results' } as $item ) 
{

echo "<a href=\"{$item->{ 'url' }}\"><font color ='blue'>{$item->{ 'title' }}</font></a>".": "."$newline"."$newline".$item->{ 'abstract' }."\n\n";


}

私も次のことを試しましたが、成功しませんでした:

コード試行 2:

echo $results['results']['url'];
echo $results['results']['title'];
echo $results['results']['abstract'];

何をすべきかについてのアイデアはありますか?

ありがとう。

4

1 に答える 1

1

ドキュメントのコード例からコードをコピーして貼り付けただけだと気づきましたが、気にしないでください。

results配列に間違った方法でアクセスしています:

foreach ($results->bossresponse->web->results as $result)
{
    //do stuff
    echo $result->title.'<br/>';
}

または、cptnk が提案したように:

$results = json_decode($rsp, true);
//force to assoc-array, which will allow array-access
foreach($results['bossresponse']['web']['results'] as $result)
{
    //$result is array here, but do the same stuff
    echo $result['title'].'<br/>';
}

または、2つを組み合わせる

foreach($results->bossresponse->web->results as $result)
{
    $result = (array) $result;//casts stdClass to array
    printf('<a href="%s">%s</a><br/>', $result['url'], $result['title']);
}
于 2013-07-01T09:27:14.933 に答える