首先這不是一個重複: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?
你確定你正在使用的網絡搜索API?它已被棄用多年... –
我知道它的地位,但根據谷歌它應該繼續在可預見的未來的功能,唯一的限制是每天的請求,並且將不會有更新可能會破壞我程序的功能。鑑於我使用它的簡單性,我沒有看到任何會讓我想要遷移到自定義搜索API的問題,因爲我很難完成我想要做的事情。 – dynamphorous
嗯...我對CSE api更加熟悉,但它可能仍然源於與您引用的其他問題相同的問題:也許檢測到的區域設置不同,也許其他參數具有不同的默認值,也許API不是' t與谷歌用於其網頁結果的完全一樣(畢竟,這是一個棄用的api;也許谷歌的結果會經過別處的其他處理) –