我正在为我的荣誉项目做一个小实验。我试图实现的是基于 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 FilesEasyPHP-5.3.9wwwgoogleTest.php on line 24
所以我向大家强调,有没有办法解决这个问题?会不会像在单独的函数中计算两个结果一样?我被难住了。
感谢您的任何帮助。
我想你的意思是:
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2);
成为:
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
该选项是根据第三个参数打开和关闭的,该参数是布尔值,因此为 0 或 1。我认为当您复制并粘贴第二个查询的行并将 1 更改为 2 时,您不小心将 1 布尔值更改为 2(非布尔值)。
"CinammonRollsChinese"不返回任何结果,因此没有估计的结果计数。在对它执行任何操作之前,您需要检查是否存在 $json 2->responseData->cursor->estimatedResultCount,因为并非每个搜索字符串都会产生结果。
通过将查询代码提取到方法或类中来避免代码重复,它变得更加复杂。请参阅下面的重写:
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);
感谢大家的帮助,我真的很感激。它完全按照我现在的希望工作(代码也更干净!即使主要问题是我"愚蠢"的原因!感谢您指出这一点,我会一直坚持到午夜。问题是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;
}
高超。再次非常感谢大家。