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ề?
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 ... –
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
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) –