简体   繁体   中英

Using the GoogleAPI to return the number of search results for 2 different queries. (PHP)

I'm working on a small experiment for my Honours Project. What I'm trying to achieve is to compute the similarity between the amount of results returned, based on 2 Google search queries. When I have the 2 results, I wish to divide one by the other in order to return a 'ratio' of sorts.

Now, it's easy enough to return one result using the API, I've been using this code:

$query="CinammonRolls";
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$query";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$body = curl_exec($ch);
curl_close($ch);

$json = json_decode($body);

print 'The results for ' . $query . ' are: ' .  $json->responseData->cursor->estimatedResultCount;

That piece of code, returns the result fine. However I'm relatively new to PHP so the follow code, wasn't ever going to work; but I gave it a bash.

$query="CinammonRolls";
$query2="CinammonRollsChinese";
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$query";
$url2 = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$query2";

$ch = curl_init();

$ch2 = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch2, CURLOPT_URL, $url2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2);
$body = curl_exec($ch);
$body2 = curl_exec($ch2);
curl_close($ch);
curl_close($ch2);

$json = json_decode($body);
$json2 = json_decode($body2);
print 'The results for ' . $query . ' are: ' .  $json->responseData->cursor->estimatedResultCount;

print 'The results for ' . $query2 . ' are: ' . $json2->responseData->cursor->estimatedResultCount;

That just returns the error:

Notice: Undefined property: stdClass::$estimatedResultCount in C:\Program Files\EasyPHP-5.3.9\www\googleTest.php on line 24

So I emplore you all, is there a way to get round this? Would it be something like computing both the results in separate functions? I'm stumped.

Thanks for any help.

I think you meant:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2);

to be:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);

The option is to be turned on and off based on the 3rd parameter which is boolean, so 0 or 1. I think when you copied and pasted the lines for the 2nd query and was changing 1 to 2 you accidentally changed the 1 boolean to 2 (non-boolean).

"CinammonRollsChinese" returns NO RESULTS thus there is not estimated result count. You need to check to see if $json2->responseData->cursor->estimatedResultCount exists before doing anything with it since not every search string will yield results.

Avoid code repetition by extracting the querying code to a method, or to a class it it gets more complicated. See the rewrite below:

function print_google_query_results($query) {
    $url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$query";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $body = curl_exec($ch);
    curl_close($ch);
    $json = json_decode($body);
    print 'The results for ' . $query . ' are: ' .  $json->responseData->cursor->estimatedResultCount;
}

$query="CinammonRolls";
$query2="CinammonRollsChinese";

print_google_query_results($query);
print_google_query_results($query2);

Thanks to everyone for the help, I really appreciate it. It's working exactly as I hoped now (with much cleaner code too!). Even though the main problem was the cause of me 'having the dumb'! Thanks for pointing that out, I'd be stuck with this till midnight. The problem was that a) My code was pretty lousy and could be compiled much better. and b) I didn't check to see if my second query 'CinammonRollsChinese' actually returned any results. It didn't.

Here is the final working code.

$query="CinammonRolls";
$query2="DeliciousCake";

print_google_query_results($query);
print '<br>';
print_google_query_results($query2);

function print_google_query_results($query) {
    $url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=$query";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $body = curl_exec($ch);
    curl_close($ch);
    $json = json_decode($body);
    print 'The results for ' . $query . ' are: ' .  $json->responseData->cursor->estimatedResultCount;
}

Superb. Huge thanks again to everyone.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM