我正在为我的荣誉项目进行一项小型实验。我想要实现的是根据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
所以我向你们全部投资,有没有办法绕过这个?它会像在单独的函数中计算结果吗?我很难过。
感谢您的帮助。
答案 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;
}
优异。再次感谢大家。