0

我是一名新手程序员,试图了解 api 的工作原理。最近几天一直在研究它并取得了一些进展,但仍然需要一些帮助。

这似乎是提交查询的 url,不太明白如何正确形成它?

$url = "http://yboss.yahooapis.com/ysearch/web";

如果我希望结果以 json 形式返回,这是否正确?

$url = "http://yboss.yahooapis.com/ysearch/web?q={keywords}&format=json";

这真的让我很难过,完全不知道如何从传递的 html 表单中获取实际查询,这是正确的吗?

$url = "http://yboss.yahooapis.com/ysearch/web?q={keywords}";

如果是这样,我是否需要包括:

$args["keywords"]

如果我能弄清楚如何正确地从 html 表单传递查询,我相信我的大多数其他问题也会得到解答。

关于本节,我假设这些是 api 服务允许的各种参数的变量。对于每个参数,我是否必须在下面的列表中包含相应的 $args[""] 代码?例如,如果我在 url 查询中有 &format=json,那么我还需要在下面的列表中保留 $args["format"] = json"; 吗?

$args = array();
$args["q"] = "yahoo";
$args["format"] = "json";

或者说,如果想包括:

$url = "http://yboss.yahooapis.com/ysearch/web?q={keywords}&abstract=long";

我还需要包括:

$args[abstract] = "long";

到上面的 $args 列表?

真正让我难过的部分是如何让通过 html 表单提交的实际查询通过?

$url = "http://yboss.yahooapis.com/ysearch/web?q={keywords}

然后我是否包括:

$args["keywords"]

到 $args 列表?

当我去测试它时,这是我得到的结果:

domain.com/search.php?q=car

stdClass Object ( [bossresponse] => stdClass Object ( [responsecode] => 200 [web] => stdClass Object ( [start] => 0 [count] => 50 [totalresults] => 112000000 [results] => Array ( [0] => stdClass 对象 ( [date] => [clickurl] => http://www.yahoo.com/ [url] => http://www.yahoo.com/ [dispurl] => www. yahoo.com [title] => Yahoo! [abstract] => Yahoo! 主页,其中包含最新的突发新闻和有趣的文章、互联网上现在流行的项目、其他 Yahoo! 网站和本地新闻的链接以及... ) [1] => stdClass 对象 ( [日期] => [clickurl] => http://mail.yahoo.com/ [url] => http://mail.yahoo.com/[dispurl] => mail.yahoo.com [title] => 登录 Yahoo! [摘要] => 雅虎!让您轻松享受世界上最重要的事情。一流的雅虎!邮件、突发本地、国家和全球新闻、财经、体育、音乐、电影和...) [2] => stdClass Object ([date] => [clickurl] => http://us.yahoo.com/ [url] => http://us.yahoo.com/ [dispurl] => us.yahoo.com [title] => Yahoo! [abstract] => 对 Yahoo! 的新欢迎。新的 Yahoo! 体验使更容易发现您最关心的新闻和信息。这是为您订购的网络。) [3] => stdClass Object ( [date] => [clickurl] => http://sports.yahoo.com/ [网址] => http://sports.yahoo.com/[dispurl] => sports.yahoo.com [title] => Yahoo! Sports - Sports News, Scores, Rumors, Fantasy Games ... [abstract] => 所有最新的体育新闻、比分、谣言、幻想游戏等)[4] => stdClass Object ([date] => [clickurl ] => http://my.yahoo.com/ [url] => http://my.yahoo.com/ [dispurl] => my.yahoo.com [title] => 登录 Yahoo! [摘要] => My Yahoo 是一个可自定义的网页,包含新闻、股票报价、天气和许多其他功能。) [5] => stdClass Object ( [date] => [clickurl] => http://dir.yahoo. com/ [url] => http://dir.yahoo.com/ [dispurl] => dir.yahoo.com [title] => Yahoo! Directory [abstract] => 帮助我们改进 Yahoo! Directory - 分享您的想法)[6] =>http://search.yahoo.com/ [url] => http://search.yahoo.com/ [dispurl] => search.yahoo.com [title] => Yahoo! 搜索 - 网络搜索 [摘要] => 帮助您准确找到所需内容的搜索引擎。从整个 Web 中查找最相关的信息、视频、图像和答案。) [7] => stdClass Object ( [date] => [clickurl] => http://news.yahoo.com/ [url] => http://news.yahoo.com/ [dispurl] => news .yahoo.com [title] => Yahoo! News - 最新消息和头条 [摘要] => Yahoo! News 的最新消息和头条新闻。通过视频和照片获取突发新闻故事和深入报道。)[8] => stdClass 对象 ( [日期] => [clickurl] => http://autos.yahoo.com/ [url] =>http://autos.yahoo.com/ [dispurl] => autos.yahoo.com [title] => 新车图片、价格和评论 - Yahoo! 汽车 [摘要] => 在 Yahoo! 上查看新车图片、了解新车价格并阅读新车评论。汽车。比较汽车并从您附近的经销商处获得免费报价。查看 Clear ... ) [9] => stdClass Object ( [date] => [clickurl] => http://us.m.yahoo.com/ [url] => http://us.m. yahoo.com/ [dispurl] => us.m.yahoo.com [title] => Yahoo! Mobile [abstract] => 在您的 Yahoo!

显然查询没有被正确传递,因为结果都是关于雅虎而不是查询“汽车”。它看起来像是一个未格式化的 json 响应,因为我知道 xml 是非常不同的。任何指向关于 json 的好教程的链接都会很棒。

如果我能弄清楚如何从 html 表单中获取实际的查询,我相信它会回答其中的许多问题。

以下是我认为雅虎提供的用于显示结果的默认代码:

$results = json_decode($rsp);
print_r($results);

我需要为此设置某种类型的 json 代码吗?能否提供一个示例或链接来帮助我更好地理解 json,我知道它的基础是键值对,但以前从未使用过 json,不知道从哪里开始......

对于这么长的问题,我深表歉意,但我有很多问题,而不是提交多个问题,我认为最好是 1 个长问题。

4

1 回答 1

0

这是我在 PHP 中用于 Yahoo BOSS API 的,希望对您有所帮助

<?php
// This enable debugging
ini_set('display_errors', 'On');
error_reporting(E_ALL);

require("OAuth.php"); // You will need to make your own OAuth.php

$cc_key = "---FILL THIS IN WITH YOUR INFO---";
$cc_secret = "---FILL THIS IN WITH YOUR INFO---";
$url = "http://yboss.yahooapis.com/ysearch/web"; // This can be tweaked to search images, videos etc
$args = array();
$args["q"] = "--FILL THIS IN WITH WHAT YOU WANT TO SEARCH FOR---"; // search operator, fill in with query value
$args["count"] = "10"; // Default is 50, restricts results down to 10
$args["web.sites"] = "";  // comma separated value, optional -- usnews.com,nytimes.com, etc
$args["format"] = "json"; // Default is json, options are xml or json, code below only works for JSON at the moment


$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));
echo $url . "<br>";
$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, TRUE);
$rsp = curl_exec($ch);
$results = json_decode($rsp); // Decodes JSON
print_r($results); // Prints results to screen
?>
于 2013-08-13T04:48:15.800 回答