2012-09-04 34 views
6

首先這不是一個重複:Why does a google search through the google api return different results to a search in the web page?也沒有任何其他的「谷歌搜索API返回意想不到的結果」,我已經能夠找到問題的。谷歌搜索API有時reurns第一結果有時第二個結果相比,Web界面

我在寫一個使用Google websearch API的小型javascript程序。我正在爲我的購買頁面創建自定義鏈接,這些鏈接應該讓用戶訪問我們經銷商網站上的正確頁面,以購買他們上次點擊「購買地點」時查看的產品。我使用了document.referrer的JavaScript方法,然後解析URL以確定用戶上次訪問過我網站上的哪個頁面。

我然後創建一個合適的查詢字符串,限制該網站的特定經銷商,告訴谷歌只返回一個結果,然後運行該查詢。然後,我使用該URL重寫特定的div href中的HTML到第一個(也是唯一的)搜索結果。我基本上模仿Google曾經擁有的「我感覺幸運」按鈕的功能,但是以這樣的方式來構建查詢,以便我得到我正在尋找的結果。

好了,現在你知道我在做什麼,爲什麼我做吧,這裏的情況變得有些古怪:大部分的結果我得到的工作完美。他們返回第一個搜索結果。其中一些(和它們總是相同的)返回第二個搜索結果。

這裏是你可以複製並粘貼到自己Code Playground看到這個問題我指得代碼:實際使用document.referrer

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 

    <title>Google AJAX Search API Sample</title> 
    <script src="http://www.google.com/jsapi?key=AIzaSyA5m1Nc8ws2BbmPRwKu5gFradvD_hgq6G0" type="text/javascript"></script> 
    <script type="text/javascript"> 
google.load('search', '1'); 
var SearchVariables = [ 
     ["alto","altomusic.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/altomusic-button.png","wp-image-6343"], 
     ["acme","www.acmelectronics.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/acme-button.png","wp-image-6344"], 
     ["bhphoto","www.bhphotovideo.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/bh-button3.png","wp-image-6345"], 
     ["frontend","www.frontendaudio.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/frontend-button.png","wp-image-6346"], 
     ["fullcompass","www.fullcompass.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/fullcompass-button3.png","wp-image-6347"], 
     ["performance","www.performanceaudio.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/performance-audio-button.png","wp-image-6348"], 
     ["proaudio","www.proaudiosuperstore.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/ProAudioSolutions-button.png","wp-image-6349"], 
     ["rmc","www.rmcaudiodirect.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/rmc-button1.png","wp-image-6350"], 
     ["sweetwater","www.sweetwater.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/sweetwater-button3.png","wp-image-6351"], 
     ["vintageking","www.vintageking.com","http://www.earthworksaudio.com/wp-content/uploads/2012/03/vintageking-button3.png","wp-image-6352"] 
    ]; 
var Search = new Array(SearchVariables.length); 
function searchComplete() { 


    for(var i = 0; i < Search.length; i++){ 
    if (Search[i].results && Search[i].results.length > 0) { 
     var contentDiv = document.getElementById(Search[i].ed[0]); 
     var curURL = Search[i].results[0].unescapedUrl; 
     var newImage = ' <a href="'+curURL+'"><img class="alignleft size-full '+Search[i].ed[2]+'" title="'+Search[i].ed[0]+'" src="'+Search[i].ed[1]+'" alt=" " width="235" height="94" /></a>'; 
     contentDiv.innerHTML = newImage; 
    } 
    }  
} 
function parseURLString(inString) 
{ 
    var OutString = 'earthworks'; 
     inString = inString.replace(/-/g,' '); 
     inString = inString.replace('zdt',''); 
    var MicVsPre=['preamps','microphones']; 
    var idx = []; 
     for(var j=0;j<MicVsPre.length;j++) 
     { 
      if(inString.search(MicVsPre[j])>=0) 
      { 
      OutString = OutString+' '+MicVsPre[j]; 
        for(var i=inString.length;i>0;i--) 
        { 
        if(inString[i]=='/') 
        { 
         idx.push(i); 
        } 
        } 
      OutString = OutString+' '+inString.substring(idx[0],idx[1]+1); 
      } 
     } 
return OutString; 
} 

function OnLoad() { 
     var String_To_Parse = 'http://www.earthworksaudio.com/microphones/qtc-series-2/qtc40/';  
     var query = parseURLString(String_To_Parse); 

     var testloc = document.getElementById('vardiv'); 
     testloc.innerHTML = query; 

     for(var i = 0; i < SearchVariables.length; i++) 
     { 
     Search[i] = new google.search.WebSearch(); 
     Search[i].setNoHtmlGeneration(); 
     Search[i].setResultSetSize(1); 
     Search[i].setUserDefinedLabel([SearchVariables[i][0],SearchVariables[i][2],SearchVariables[i][3]]); 
     Search[i].setSiteRestriction(SearchVariables[i][1]); 
     Search[i].setSearchCompleteCallback(this, searchComplete,null); 
     Search[i].execute(query); 
     } 
} 
google.setOnLoadCallback(OnLoad); 

    </script> 
    </head> 
    <body style="font-family: Arial;border: 0 none;"> 
    <div id="vardiv">Testing</div> 
    <div id='acme'></div> 
    <div id='alto'></div> 
    <div id='bhphoto'></div> 
    <div id='fullcompass'></div> 
    <div id='frontend'></div> 
    <div id='performance'></div> 
    <div id='proaudio'></div> 
    <div id='rmc'></div> 
    <div id='sweetwater'></div> 
    <div id='vintageking'></div> 
    </body> 
</html>​ 

我已經包含了一個樣本產品頁面的URL,而不是方法(因爲顯然你現在沒有瀏覽我的網站)來演示發生了什麼事情。我還在頂部創建了一個額外的div標籤,顯示正在執行的確切搜索。

注意如何在列表的最後一個(復古國王或第四到專業音響soltuions持續)兩種,如果你做同樣的搜索自己拉下的URL 第二搜索結果。但是,其中大部分正確地將搜索結果(例如:sweetwater,b & h,完整指南針)拉下來。幾乎每一次我在這些特定網站上進行的搜索都會發生這種情況。我知道這與我的瀏覽器和我的存儲設置無關,因爲我嘗試了這種隱身方式,在其他計算機上,在不同的瀏覽器中等等。有沒有人知道這裏發生了什麼?爲什麼我不能始終將基於網絡的Google搜索的首個搜索結果作爲返回的URL?

+1

你確定你正在使用的網絡搜索API?它已被棄用多年... –

+0

我知道它的地位,但根據谷歌它應該繼續在可預見的未來的功能,唯一的限制是每天的請求,並且將不會有更新可能會破壞我程序的功能。鑑於我使用它的簡單性,我沒有看到任何會讓我想要遷移到自定義搜索API的問題,因爲我很難完成我想要做的事情。 – dynamphorous

+0

嗯...我對CSE api更加熟悉,但它可能仍然源於與您引用的其他問題相同的問題:也許檢測到的區域設置不同,也許其他參數具有不同的默認值,也許API不是' t與谷歌用於其網頁結果的完全一樣(畢竟,這是一個棄用的api;也許谷歌的結果會經過別處的其他處理) –

回答

2

我有這樣的問題,當我在做類似的東西,並根據我發現當時(IIRC)返回的結果取決於語言的參數傳遞給谷歌和瀏覽器ID字符串。

注意,這可能發生了變化,這是一個長鏡頭,但它是值得一試。

編輯:

我剛纔看見你正在尋找一種證明的答案的,所以在這裏你去: http://www.windmeadow.com/node/36 < - 谷歌給出了基於瀏覽器不同的搜索結果。 http://productforums.google.com/forum/#!topic/webmasters/7K02-AUCTVM < - 不同的搜索結果不同的語言

編輯2:

它在谷歌AJAX API一個知道是不是BUG:http://code.google.com/p/google-ajax-apis/issues/detail?id=43

+0

如果這是問題,我會想添加搜索[i] .setRestriction(google.search.Search.RESTRICT_EXTENDED_ARGS,{「lr」:「lang_en」,「gl」:「我們」,「cr」:「countryUS」 ,「filter」:「1」});搜索對象將是解決它的最好的第一步。但是,這似乎只是返回相同的結果。有什麼想法,我可以撤消谷歌適用這種「偏見」?我覺得最令人煩惱的是它總是返回第二個搜索結果,它永遠不會是有問題的查詢的最佳結果。 – dynamphorous

+0

根據此http://webmasters.stackexchange.com/questions/24783/why-do-different-browsers-return-different-search-results-at-google-and-how-can,您可以嘗試刪除Cookie。另外,嘗試用簡單的ascii進行搜索(僅用於測試),以便完全確定Google沒有做任何「怪事」。 – alexandernst

+0

餅乾很有趣,但你知道我的一件事是這樣的:它總是第二個結果(它總是低於應該返回的第一個搜索結果)並且它總是返回第二個結果的相同URL。我會相信,如果這不是一個驚人的手術搜索(我的意思是字面意思是我正在尋找一個網頁,在一個網站上,我知道該網站的基本網址和其他關鍵字將駐留在那裏給我一個正確的搜索結果)。如果我在接下來的兩天沒有得到更好的答案,我會給你獎勵... – dynamphorous