2012-09-04 25 views
6

Trước hết, đây không phải là bản sao của: Why does a google search through the google api return different results to a search in the web page? Cũng như bất kỳ câu hỏi nào khác mà tôi đã tìm thấy.Google Search API đôi khi trả lại kết quả đầu tiên đôi khi là kết quả thứ hai so với giao diện web

Tôi đang viết một chương trình javascript nhỏ sử dụng API websearch của Google. Tôi đang tạo liên kết tùy chỉnh cho vị trí mua trang của mình, nghĩa vụ hướng người dùng đến đúng trang trên trang đại lý của chúng tôi để mua sản phẩm họ xem lần cuối khi họ nhấp vào "nơi mua". Tôi sử dụng phương thức javascript là document.referrer rồi phân tích URL để xác định trang nào trên trang web của tôi mà người dùng truy cập lần cuối.

Sau đó, tôi tạo chuỗi truy vấn thích hợp, giới hạn trang web cho đại lý cụ thể, yêu cầu google chỉ trả lại một kết quả rồi chạy truy vấn. Sau đó tôi sử dụng URL để viết lại HTML trong div href cụ thể đó cho kết quả tìm kiếm đầu tiên (và duy nhất). Về cơ bản, tôi mô phỏng các chức năng của nút "Tôi cảm thấy may mắn" mà Google từng có, nhưng cấu trúc truy vấn theo cách mà tôi nhận được chính xác kết quả mà tôi đang tìm kiếm. OK, vì vậy bây giờ bạn biết những gì tôi đang làm và lý do tại sao tôi đang làm điều đó, đây là nơi mọi thứ trở nên kỳ lạ: Hầu hết các kết quả tôi nhận được công việc một cách hoàn hảo. Họ trả lại kết quả tìm kiếm đầu tiên. Một số người trong số họ (và luôn luôn là những người giống nhau) trả lại kết quả tìm kiếm thứ hai.

Đây là mã bạn có thể sao chép và dán vào Code Playground mình để xem vấn đề tôi đề cập quá:

<!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>​ 

tôi đã bao gồm một địa chỉ URL trang sản phẩm mẫu thay vì thực sự sử dụng document.referrer phương pháp (vì rõ ràng bạn hiện không điều hướng trang web của tôi) để chứng minh điều gì đang xảy ra. Tôi cũng đã tạo thêm một thẻ div ở trên cùng để hiển thị tìm kiếm chính xác đang được thực hiện.

Lưu ý cách cuối cùng trong danh sách (vua cổ điển hoặc thứ tư đến cuối cùng trong soltuions proaudio) đều kéo URL xuống cho kết quả tìm kiếm SECOND nếu bạn tự tìm kiếm chính xác. Tuy nhiên, hầu hết trong số chúng chính xác kéo xuống kết quả tìm kiếm FIRST đầu tiên (ví dụ: sweetwater, b & h, la bàn đầy đủ). Điều này xảy ra với hầu hết mọi tìm kiếm tôi thực hiện trên các trang web cụ thể đó. Tôi biết rằng điều này không liên quan đến bất kỳ điều gì liên quan đến trình duyệt của tôi và cài đặt được lưu trữ của tôi vì tôi đã thử tính năng ẩn danh này, trên các máy tính khác, trong các trình duyệt khác nhau v.v ... Có ai có ý tưởng gì đang xảy ra ở đây không? Tại sao tôi không thể nhận được kết quả tìm kiếm đầu tiên từ tìm kiếm của Google dựa trên web để trở thành URL được trả về?

+1

Bạn có chắc chắn bạn đang sử dụng api websearch? Nó không được chấp nhận trong nhiều năm ... –

+0

Tôi biết về tình trạng của nó, nhưng theo google nó được cho là sẽ tiếp tục hoạt động trong tương lai gần với giới hạn duy nhất là yêu cầu mỗi ngày, và sẽ không có cập nhật quá có thể phá vỡ chức năng của chương trình của tôi. Với bản chất đơn giản của những gì tôi đang sử dụng nó cho, tôi thấy không có vấn đề mà sẽ làm cho tôi muốn di chuyển đến API tìm kiếm tùy chỉnh của họ vì nó là khó khăn hơn để thực hiện những gì tôi đang cố gắng để làm. – dynamphorous

+0

Hmm ... Tôi quen thuộc với api CSE hơn, nhưng nó có thể vẫn xuất phát từ cùng một vấn đề như câu hỏi khác mà bạn trích dẫn: có thể địa phương được phát hiện khác, có thể các tham số khác có mặc định khác. t chính xác giống như một google sử dụng cho kết quả web của nó (nó là, sau khi tất cả, một api không được chấp nhận; có lẽ kết quả google đi qua một số chế biến khác ở nơi khác) –

Trả lời

2

Tôi gặp vấn đề khi tôi làm một việc tương tự, và theo những gì tôi tìm thấy sau đó (iirc) trả về kết quả phụ thuộc vào tham số ngôn ngữ bạn chuyển tới google và chuỗi ID trình duyệt.

Lưu ý rằng điều này có thể đã thay đổi và đó là một cảnh quay dài nhưng đáng để kiểm tra.

EDIT:

Tôi chỉ thấy bạn đang tìm kiếm một số loại giấy tờ chứng minh cho câu trả lời, vì vậy ở đây bạn đi: http://www.windmeadow.com/node/36 < - Google sẽ cho kết quả tìm kiếm khác nhau dựa trên trình duyệt. http://productforums.google.com/forum/#!topic/webmasters/7K02-AUCTVM < - kết quả tìm kiếm khác nhau với các ngôn ngữ khác nhau

EDIT 2:

Đó là một lỗi bí quyết trong Googles AJAX API: http://code.google.com/p/google-ajax-apis/issues/detail?id=43

+0

Nếu đây là vấn đề, tôi sẽ nghĩ thêm Tìm kiếm [i] .setRestriction (google.search.Search.RESTRICT_EXTENDED_ARGS, {"lr": "lang_en", "gl": "us", "cr": "countryUS" , "filter": "1"}); đối tượng tìm kiếm sẽ là bước đầu tiên tốt nhất để giải quyết nó. Nhưng điều này dường như chỉ trả lại kết quả tương tự. Có bất kỳ ý tưởng nào về cách tôi có thể hoàn tác "thiên vị" này của google được áp dụng? Điều mà tôi thấy khó chịu nhất về điều này là nó luôn luôn là kết quả tìm kiếm thứ hai được trả lại, và nó sẽ KHÔNG BAO GIỜ là kết quả tốt nhất cho truy vấn được đề cập. – dynamphorous

+0

Theo http://webmasters.stackexchange.com/questions/24783/why-do-different-browsers-return-different-search-results-at-google-and-how-can bạn có thể thử xóa cookie. Ngoài ra, hãy thử tìm kiếm trong ascii đơn giản (chỉ để thử nghiệm) để hoàn toàn chắc chắn rằng Google không làm gì cả 'lạ'. – alexandernst

+0

Cookie thú vị, nhưng bạn biết một điều với tôi là: nó luôn là kết quả thứ hai, (luôn luôn thua kém kết quả tìm kiếm đầu tiên sẽ được trả lại) và luôn có cùng URL trả về kết quả thứ hai. Tôi sẽ tin rằng nếu điều này không phải là một tìm kiếm phẫu thuật đáng kinh ngạc (tôi có nghĩa là tôi đang tìm kiếm MỘT trang, trên trang web ONE nơi tôi biết URL cơ sở của trang web đã nói và mọi từ khóa khác sẽ ở đó để cung cấp cho tôi ONE kết quả tìm kiếm chính xác). Tôi sẽ cung cấp cho bạn tiền thưởng nếu tôi không nhận được câu trả lời tốt hơn trong hai ngày tới ... – dynamphorous

Các vấn đề liên quan