2012-11-30 31 views
3

我正在爲我的榮譽項目做一個小實驗。我想要實現的是根據2個Google搜索查詢計算返回結果數量之間的相似度。當我得到2個結果時,我希望將另一個分開,以便返回各種「比例」。現在使用GoogleAPI返回2個不同查詢的搜索結果數量。 (PHP)

,這是很容易使用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 

所以我emplore你的一切,是有辦法克服這個?它會像在不同的功能中計算結果一樣嗎?我很難過。

感謝您的任何幫助。

回答

0

我想你的意思是:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 2); 

是:

curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1); 

的選項將被開啓和關閉是布爾第三個參數爲主,所以0或1。我認爲當你複製並粘貼第二個查詢的行並且正在更改1到2時,意外地將1布爾值更改爲2(非布爾值)。

「CinammonRollsChinese」返回NO結果,因此沒有估算結果。您需要檢查$ json2-> responseData-> cursor-> estimatedResultCount之前是否存在,因爲不是每個搜索字符串都會產生結果。

+0

哎呀,我是個笨蛋屁股或什麼,男人是那些當你認爲你正在尋找一個更大的程序時錯過了那些小東西。謝謝,我非常感謝幫助。 – BertyLurch

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); 
+0

謝謝你,我知道它會是這樣的。我非常感謝幫助,現在一切正常。 – BertyLurch

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; 
} 

非常棒。再次感謝大家。