3

私は自分の名誉プロジェクトのために小さな実験に取り組んでいます。私が達成しようとしているのは、2つのGoogle検索クエリに基づいて、返される結果の量の間の類似性を計算することです。2つの結果が得られたら、ある種の「比率」を返すために、一方を他方で除算したいと思います。

これで、APIを使用して1つの結果を返すのは簡単です。私は、次のコードを使用しています。

$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

ですから、皆さんに申し訳ありませんが、これを回避する方法はありますか?両方の結果を別々の関数で計算するようなものでしょうか?私は困惑しています。

助けてくれてありがとう。

4

3 に答える 3

0

私はあなたが意味したと思います:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2);

することが:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);

このオプションは、ブール値である3番目のパラメーターに基づいてオンとオフを切り替えるため、0または1です。2番目のクエリの行をコピーして貼り付け、1から2に変更したときに、誤って1ブール値を2に変更したと思います。 (非ブール値)。

「CinammonRollsChinese」は結果を返さないため、推定結果数はありません。すべての検索文字列で結果が得られるわけではないため、何かを行う前に、$ json2-> responseData->cursor->estimatedResultCountが存在するかどうかを確認する必要があります。

于 2012-11-30T14:55:12.520 に答える
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

皆さんの助けに感謝します。本当に感謝しています。それは私が今望んでいた通りに正確に機能しています(はるかにクリーンなコードもあります!)。主な問題は私が「馬鹿げている」原因でしたが!それを指摘してくれてありがとう、私は真夜中までこれで立ち往生するでしょう。問題は、a)私のコードはかなりお粗末で、はるかにうまくコンパイルできるということでした。b)2番目のクエリ「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 に答える