使用 GoogleAPI 返回 2 个不同查询的搜索结果数量.(菲律宾比索)



我正在为我的荣誉项目做一个小实验。我试图实现的是基于 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;
}

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

相关内容

  • 没有找到相关文章

最新更新