3

我正在为我的荣誉项目做一个小实验。我想要实现的是根据 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 比较陌生,所以下面的代码永远不会起作用;但我给了它一个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;

那只是返回错误:

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

所以我恳请大家,有没有办法解决这个问题?会不会像在单独的函数中计算两个结果一样?我难住了。

谢谢你的帮助。

4

3 回答 3

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);
于 2012-11-30T15:06:22.593 回答
0

我想你的意思是:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2);

成为:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);

该选项将根据布尔值的第三个参数打开和关闭,因此为 0 或 1。我认为当您复制并粘贴第二个查询的行并将 1 更改为 2 时,您不小心将 1 布尔值更改为 2 (非布尔值)。

"CinammonRollsChinese" 返回 NO RESULTS 因此没有估计的结果计数。在对它进行任何操作之前,您需要检查 $json2->responseData->cursor->estimatedResultCount 是否存在,因为并非每个搜索字符串都会产生结果。

于 2012-11-30T14:55:12.520 回答
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;
}

高超。再次非常感谢大家。

于 2012-11-30T16:01:15.267 回答