I am getting this json output from yahoo boss api. It goes on for 50 results, but, I have pasted only the first two...
(
[bossresponse] => stdClass Object
(
[responsecode] => 200
[web] => stdClass Object
(
[start] => 0
[count] => 50
[totalresults] => 2750000
[results] => Array
(
[0] => stdClass Object
(
[date] =>
[clickurl] => http://www.apple.com/ipad/
[url] => http://www.apple.com/ipad/
[dispurl] => www.apple.com/<b>ipad</b>
[title] => Apple - <b>iPad</b>
[abstract] => <b>iPad</b> is a magical window where nothing comes between you and what you love. And it comes in two sizes.
)
[1] => stdClass Object
(
[date] =>
[clickurl] => http://en.wikipedia.org/wiki/IPad
[url] => http://en.wikipedia.org/wiki/IPad
[dispurl] => en.wikipedia.org/wiki/<b>IPad</b>
[title] => <b>iPad</b> - Wikipedia, the free encyclopedia
[abstract] => The <b>iPad</b> is a line of tablet computers designed and marketed by Apple Inc., which runs Apple's iOS operating system. The first <b>iPad</b> was released on April 3, 2010; the ...
)
[2] => stdClass Object
(
[date] =>
[clickurl] => http://www.amazon.com/s?ie=UTF8&page=1&rh=i%3Aaps%2Ck%3Aipad
[url] => http://www.amazon.com/s?ie=UTF8&page=1&rh=i%3Aaps%2Ck%3Aipad
[dispurl] => www.amazon.com/s?ie=UTF8&page=1&rh=i%3Aaps%2Ck%3A<b>ipad</b>
[title] => Amazon.com: <b>ipad</b>
[abstract] => Considering an <b>iPad</b>? Compare it to Kindle Fire HD Check out our easy side-by-side comparison chart to see how the newest <b>iPad</b> stacks up to Kindle Fire HD 8.9".
)
I use the following code in php to connect to the api and display the results...
**//connect to yahoo api and get results in json**
<?php
require("OAuth.php");
$cc_key = "**confidential**";
$cc_secret = "**confidential**";
$url = "http://yboss.yahooapis.com/ysearch/web";
$args = array();
$args["q"] = "yahoo";
$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, TRUE);
$rsp = curl_exec($ch);
$results = json_decode($rsp);
?>
**// Present results in html/php**
<div id="resultsdiv">
<?php
foreach($results->bossresponse->web->results as $result)
{
echo '<h3><a href='.$result->url.'>'.$result->title.'</br>'.$result->abstract.'</a></h3>';
}
?>
My question is how do I paginate results, since all the 50 results appear on the first web page only. I want to display ten results in every page.
Any help is appreciated.
Thanks.
According to the Yahoo! BOSS documentation, specifically the Universal Arguments section, it looks like you can use the start
and count
parameters to adjust the pagination of results. It looks like the default return count is 50 which matches what you observed.
In your code example you can adjust by adding:
$args["start"] = 0; // increment as needed
$args["count"] = 10;