Google Search API terkadang menampilkan kembali hasil pertama terkadang hasil kedua dibandingkan dengan antarmuka web

Pertama, ini bukan duplikat dari: Mengapa penelusuran google melalui google api memberikan hasil yang berbeda dengan penelusuran di halaman web? Juga tidak ada pertanyaan "API penelusuran google yang memberikan hasil yang tidak diharapkan" lainnya yang dapat saya jawab menemukan.

Saya sedang menulis program javascript kecil yang menggunakan API pencarian web Google. Saya membuat tautan khusus untuk halaman tempat membeli yang seharusnya mengarahkan pengguna ke halaman yang benar di situs dealer kami untuk membeli produk yang terakhir mereka lihat ketika mereka mengklik "tempat membeli". Saya menggunakan metode javascript document.referrer lalu mengurai URL untuk menentukan halaman mana di situs saya yang terakhir dikunjungi pengguna.

Saya kemudian membuat string kueri yang sesuai, membatasi situs untuk dealer tertentu, memberi tahu Google untuk hanya mengembalikan satu hasil, lalu menjalankan kueri. Saya kemudian menggunakan URL untuk menulis ulang HTML dalam div href tertentu ke hasil pencarian pertama (dan satu-satunya). Saya pada dasarnya meniru fungsi tombol "Saya merasa beruntung" yang dulu dimiliki Google, tetapi menyusun kueri sedemikian rupa sehingga saya mendapatkan hasil yang persis seperti yang saya cari.

Oke, jadi sekarang setelah Anda tahu apa yang saya lakukan dan mengapa saya melakukannya, di sinilah keadaan menjadi aneh: Sebagian besar hasil yang saya peroleh bekerja dengan sempurna. Mereka mengembalikan hasil pencarian pertama. Beberapa di antaranya (dan selalu sama) mengembalikan hasil pencarian kedua.

Berikut adalah kode yang dapat Anda salin dan tempel ke Code Playground diri Anda sendiri untuk melihat masalah yang saya maksud juga:

<!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="/id'+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>​ 

Saya telah menyertakan contoh URL laman produk alih-alih menggunakan metode document.referrer (karena jelas Anda tidak sedang menjelajahi situs web saya saat ini) untuk menunjukkan apa yang terjadi. Saya juga telah membuat tag div tambahan di bagian atas yang menunjukkan pencarian sebenarnya yang sedang dilakukan.

Perhatikan bagaimana yang terakhir dalam daftar (vintage king, atau yang keempat dari terakhir dalam solusi proaudio) menarik URL untuk hasil penelusuran SECOND jika Anda sendiri melakukan penelusuran yang sama persis. Namun sebagian besar dari mereka dengan benar menarik hasil penelusuran PERTAMA (misalnya: sweetwater, b&h, full compass). Hal ini terjadi pada hampir setiap pencarian yang saya lakukan di situs tersebut. Saya tahu bahwa ini tidak ada hubungannya dengan browser saya, dan pengaturan saya yang tersimpan sejak saya mencoba penyamaran ini, di komputer lain, di browser yang berbeda, dll. Adakah yang tahu apa yang terjadi di sini? Mengapa saya tidak selalu mendapatkan hasil pencarian pertama dari pencarian Google berbasis web sebagai URL yang dikembalikan?


person dynamphorous    schedule 04.09.2012    source sumber
comment
Apakah Anda yakin menggunakan api pencarian web? Sudah tidak digunakan lagi selama bertahun-tahun...   -  person Alex Churchill    schedule 04.09.2012
comment
Saya mengetahui statusnya, tetapi menurut Google, ini seharusnya terus berfungsi di masa mendatang dengan satu-satunya batasan adalah permintaan per hari, dan juga tidak akan ada pembaruan yang dapat merusak fungsi program saya. Mengingat sifat sederhana dari apa yang saya gunakan, saya tidak melihat masalah yang membuat saya ingin pindah ke API pencarian khusus mereka karena lebih sulit untuk mencapai apa yang saya coba lakukan.   -  person dynamphorous    schedule 04.09.2012
comment
Hmm... Saya lebih akrab dengan api CSE, tapi mungkin masih berasal dari masalah yang sama seperti pertanyaan lain yang Anda kutip: mungkin lokal yang terdeteksi berbeda, mungkin parameter lain memiliki default berbeda, mungkin API tidak persis sama dengan yang digunakan Google untuk hasil webnya (bagaimanapun juga, ini adalah api yang tidak digunakan lagi; mungkin hasil Google melalui beberapa pemrosesan lain di tempat lain)   -  person Alex Churchill    schedule 04.09.2012
comment
Secara umum, API penelusuran akan memberikan hasil serupa namun berbeda pada waktu berbeda kepada orang berbeda. Mungkin lebih mudah untuk memikirkan kembali pendekatan Anda terhadap masalah tersebut. Jika Anda perlu melakukan hal-hal dengan cara ini, menggunakan titik akhir seluler dan menguraikan HTML (saya tahu ini menyebalkan -- saya harus melakukannya sekali untuk gmail) mungkin merupakan satu-satunya cara.   -  person Alex Churchill    schedule 04.09.2012
comment
Ya, kalau masalahnya bukan sespesifik ini dan selalu sama setiap saat. Itu selalu hasil pencarian #2, dan selalu ketika mencari situs web dealer tersebut, DAN selalu hasil terbaik kedua? Anda benar sekali tentang satu hal, jika itu masalah API dan ada masalah dengan API itu, saya tidak pernah bisa memperbaikinya. Saya berharap seseorang dapat memberi tahu saya apa yang salah dengan kode spesifik saya sehingga mereka dapat melihatnya. Apa yang sebenarnya saya cari adalah beberapa parameter yang akan menonaktifkan optimasi yang mungkin mengganggu pencarian.   -  person dynamphorous    schedule 05.09.2012
comment
Mungkin ada satu yang tidak saya sadari; API pencarian Google tidak terlalu lengkap/dapat diakses.   -  person Alex Churchill    schedule 05.09.2012
comment
Kamu bisa mengatakannya lagi. Beberapa trik yang saya gunakan di sini untuk meneruskan variabel ke fungsi panggilan balik saya, saya hanya dapat mengetahuinya dengan menggunakan pembakar dan memeriksa DOM saya untuk menentukan variabel apa yang saya atur. Dokumentasinya tidak terlalu lengkap sama sekali. Saya berharap ada beberapa metode yang dapat saya timpa untuk memperbaikinya di API, itu akan menjadikan saya seorang pembuat kode yang bahagia!   -  person dynamphorous    schedule 05.09.2012


Jawaban (1)


Saya mengalami masalah itu ketika saya melakukan hal serupa, dan menurut apa yang saya temukan saat itu (iirc) mengembalikan hasil tergantung pada parameter bahasa yang Anda berikan ke google dan string ID browser.

Perhatikan bahwa ini bisa saja berubah, dan ini masih jauh, tapi patut untuk dicoba.

Sunting:

Saya baru saja melihat Anda sedang mencari bukti untuk jawabannya, jadi ini dia: http://www.windmeadow.com/node/36 ‹-- Google memberikan hasil pencarian berbeda berdasarkan browser. http://productforums.google.com/forum/#!topic/webmasters/7K02-AUCTVM ‹-- Hasil penelusuran berbeda dalam bahasa berbeda

EDIT 2:

Ini adalah bug yang diketahui di Google AJAX API: http://code.google.com/p/google-ajax-apis/issues/detail?id=43

person alexandernst    schedule 10.09.2012
comment
Jika ini masalahnya, saya akan berpikir untuk menambahkan Search[i].setRestriction(google.search.Search.RESTRICT_EXTENDED_ARGS,{ lr : lang_en , gl : us , cr : countryUS , filter : 1 }); ke objek pencari akan menjadi langkah pertama terbaik untuk menyelesaikannya. Tapi ini sepertinya memberikan hasil yang sama. Punya ide bagaimana saya bisa membatalkan bias yang diterapkan Google ini? Hal yang menurut saya paling menjengkelkan tentang hal ini adalah SELALU hasil pencarian kedua dikembalikan, dan TIDAK PERNAH menjadi hasil terbaik untuk kueri yang dimaksud. - person dynamphorous; 10.09.2012
comment
Menurut webmasters.stackexchange.com/questions/24783/ Anda dapat mencoba menghapus cookie. Selain itu, coba telusuri dalam ascii biasa (hanya untuk pengujian) untuk benar-benar yakin bahwa Google tidak melakukan apa pun weird. - person alexandernst; 11.09.2012
comment
Cookies memang menarik, tetapi Anda tahu satu hal bagi saya adalah ini: Cookie selalu merupakan hasil kedua, (yang selalu lebih rendah dari hasil pencarian pertama yang harus dikembalikan) dan URL-nya selalu sama dengan hasil kedua. Saya akan percaya jika ini bukan pencarian bedah yang luar biasa (maksud saya, saya sebenarnya mencari SATU halaman, di SATU situs web di mana saya mengetahui URL dasar situs tersebut dan setiap kata kunci lain yang akan ada di sana untuk memberi saya SATU hasil pencarian yang benar). Saya akan memberi Anda hadiah jika saya tidak mendapatkan jawaban yang lebih baik dalam dua hari ke depan... - person dynamphorous; 11.09.2012
comment
Ngomong-ngomong, apakah hasil pertama terkait dengan kueri? Apakah dari url dasar yang sama (seperti di situs web yang sama)? - person alexandernst; 12.09.2012
comment
Sudahkah Anda mencoba menjalankan kode yang saya posting di atas? Saya membatasi setiap pencarian pada satu URL seperti yang ditentukan dalam variabel: SearchVariables, kolom 2. Dan yang saya lakukan hanyalah mencari halaman produk spesifik kami di situs dealer tertentu. Jadi setiap pencarian yang diberikan berasal dari URL dasar yang sama. Itulah yang membingungkan tentang masalah ini... - person dynamphorous; 12.09.2012
comment
Saya baru saja menemukan ini... Menurut code.google .com/p/google-ajax-apis/issues/detail?id=43 ini adalah bug yang diketahui (dan melihat tanggal laporan, menurut saya ini tidak akan pernah diperbaiki) - person alexandernst; 12.09.2012
comment
Terima kasih Alex, sepertinya Anda benar.... Sangat disayangkan Google mengacaukan API-nya sendiri sebanyak ini, sepertinya sengaja membatasi orang untuk menggunakan API dan memuat server mereka, ya? Sayang sekali karena saya sangat menyukai layanan Googles secara umum. Saya telah menandai tanggapan Anda sebagai jawabannya. Saya akan mengedit tanggapan asli Anda dan menyertakan tautan terakhir ini sehingga jelas bagi siapa pun yang menemukan pertanyaan saya bahwa ini hanyalah masalah endemik dengan Google API. - person dynamphorous; 12.09.2012
comment
Terima kasih! saya senang bisa membantu ;) - person alexandernst; 12.09.2012