使用GoogleAPI返回2个不同查询的搜索结果数。 (PHP)

时间:2012-11-30 14:38:36

标签: php google-api

我正在为我的荣誉项目进行一项小型实验。我想要实现的是根据2个Google搜索查询计算返回结果数量之间的相似性。当我得到2个结果时,我希望彼此分开以便返回各种各样的“比率”。

现在,使用API​​返回一个结果很容易,我一直在使用这段代码:

$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;

这段代码,返回结果很好。但是我对PHP比较新,所以下面的代码并没有开始工作;但我给了它一个重击。

$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;

只返回错误:

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

所以我向你们全部投资,有没有办法绕过这个?它会像在单独的函数中计算结果吗?我很难过。

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我认为你的意思是:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2);

是:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);

该选项是基于布尔值的第3个参数打开和关闭的,所以0或1.我认为当你复制并粘贴第二个查询的行并且正在改变1到2时你意外地改变了1布尔值为2(非布尔值)。

<强>&#34; CinammonRollsChinese&#34;返回NO RESULTS因此没有估计结果计数。您需要检查$ json2-&gt; responseData-&gt; cursor-&gt; estimatedResultCount是否存在,然后再对其执行任何操作,因为并非每个搜索字符串都会产生结果

答案 1 :(得分:0)

通过将查询代码提取到方法或类更复杂来避免代码重复。请参阅下面的重写:

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);

答案 2 :(得分:0)

感谢大家的帮助,我真的很感激。它正如我现在所希望的那样工作(代码也更清晰!)。即使主要问题是我'愚蠢'的原因!谢谢你指出这一点,我会坚持到午夜。问题是a)我的代码非常糟糕,可以编译得更好。和b)我没有检查我的第二个查询'CinammonRollsChinese'是否实际返回了任何结果。它没有。

这是最终的工作代码。

$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;
}

优异。再次感谢大家。