2 つの Google API から結果を取得し、結果を整数値で並べ替えてユーザーに表示する検索候補スクリプトがあります。rel
このスクリプトは、各クエリの属性に基づいて、各クエリに対して最も関連性の高い 5 つの応答のみを返すようにします。
JSFiddle: http://jsfiddle.net/22LN5/
ただし、この現在のセットアップではフォールト トレランスがありません。たとえば、1 つの API が使用可能であるか、1 つの API のクエリ制限を超えているため、結果が返されません。
これはどのように解決できますか?
私のjQueryコードは次のとおりです。
var combined=[];
$(document).ready(function(){
$("#search").keyup(function(e){
$(this).html("");
$.getJSON("http://suggestqueries.google.com/complete/search?q="+$("#search").val()+"&client=chrome&callback=?",function(data1){
$.getJSON("https://www.googleapis.com/freebase/v1/search?query="+$("#search").val()+"&limit=3&encode=html&callback=?",function(data2){
for(var key in data1[1]){
if(data1[4]["google:suggesttype"][key]=="NAVIGATION"){
combined.push("<li rel='"+data1[4]["google:suggestrelevance"][key]+"'><a href='"+data1[1][key]+"'>"+data1[2][key]+"</a></li>");
}else{
combined.push("<li rel='"+data1[4]["google:suggestrelevance"][key]+"'>"+data1[1][key]+"</li>");
}
}
for(var key in data2.result){
combined.push("<li rel='"+Math.round(data2.result[key].score*5)+"'> Freebase: "+data2.result[key].name+"</li>");
}
combined.sort(function(a,b){
return +$(b).attr("rel")-+$(a).attr("rel");
});
$("#suggest").html(combined.slice(0,5).join(""));
combined=[];
});
});
});
});