我可以使用我的API密钥从yahoo检索结果,使用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),我会得到结果,例如以下内容(搜索“ elephant 时显示的前三个结果的摘录“):
请注意我已将网址更改为“WWW”,因为我需要至少10个信誉才能发布超过2个链接。
stdClass对象([bossresponse] =&gt; stdClass对象([responsecode] =&GT; 200 [web] =&gt; stdClass对象([start] =&gt; 0 [count] =&gt; 50 [totalresults] =&gt; 36800000 [results] =&gt;数组([0] =&gt; stdClass对象 ([date] =&gt; [clickurl] =&gt; WWW [url] =&GT; WWW [dispurl] =&gt; en.wikipedia.org/wiki/Elephant [title] =&gt;大象 - 维基百科, 免费百科全书[摘要] =&gt;大象树干有多个 功能,包括呼吸,嗅觉,...一只大象 观察通过跪在前腿上放牧,...)[1] =&gt; stdClass的 对象([date] =&gt; [clickurl] =&gt; WWW [url] =&gt; WWW [dispurl] =&gt; www.defenders.org/elephant/basic-facts [title] =&gt;大象|基本 关于大象的事实|野生动物的捍卫者[摘要] =&gt;象。 关于大象的基本事实关于大象的更多信息:对大象的威胁» 更多关于大象:基本事实。威胁。防御者正在做些什么 救命。你能做什么......)[2] =&gt; stdClass对象([date] =&gt; [clickurl] =&GT;万维网 [url] =&gt; 万维网 [dispurl] =&gt; kids.nationalgeographic.com/.../african-elephant [title] =&GT;非洲大象事实和图片 - 国家地理儿童[摘要] =&gt;关于大象的孩子们的特色,照片,视频, 音频,有趣的事实,电子邮件明信片和其他动物的链接。 ) [3] =&gt; stdClass对象([date] =&gt; [clickurl] =&gt; WWW [url] =&GT; WWW [dispurl] =&gt; elephant.elehost.com/About_Elephants/about_elephants.htm [title] =&gt;关于大象[摘要] =&gt;关于大象的一切 大象信息库!此页面包含摘要 大象相关的事实让你被引入世界 大象。 )
我试图以清晰的格式输出结果,如下所示:
代码尝试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'];
有关该怎么做的任何想法?
感谢。
答案 0 :(得分:1)
我注意到你刚从the documentation's code examples复制粘贴了代码,但没关系。
您以错误的方式访问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/>';
}
或者,结合两个
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']);
}