Jak praktycznie wszystkie API Google'owe musimy wygenerować kod API i uruchomić API poprzez komendę google.load('search', '1'). Następnie obsługując zdarzenie wczytania się usługi uruchamiamy poszczególne wyszukiwarki (mamy dostęp także m.in. do wyszukiwarki obrazów, wideo itd.).
<script type="text/javascript" src="http://www.google.com/jsapi?key=KLUCZ_API"></script> <script type="text/javascript"> google.load("search", "1"); function OnLoad() { ... } google.setOnLoadCallback(OnLoad); </script>Po załadowaniu usługi do dyspozycji otrzymujemy obiekt google.search.SearchControl. Jego zadaniem jest zarządzanie wyświetlaniem wyników. Do niego też podłączamy obiekty poszczególnych wyszukiwarek. Dla nas najważniejsze jest wyszukiwanie treści - więc inicjalizujemy jedynie obiekt WebSearch i dodajemy go do szukania.
function OnLoad() { var searchControl = new google.search.SearchControl(); var webSearch = new google.search.WebSearch(); searchControl.addSearcher(webSearch); }W celu ograniczenia wyszukiwania do domeny wykonujemy metodę setSiteRestriction, gdzie jako parametr podajemy domenę.
function OnLoad() { var searchControl = new google.search.SearchControl(); var webSearch = new google.search.WebSearch(); webSearch.setSiteRestriction('michalbiniek.blogspot.com'); searchControl.addSearcher(webSearch); }
Całość wiążemy z węzłem o zadanym identyfikatorze.
function OnLoad() { var searchControl = new google.search.SearchControl(); var webSearch = new google.search.WebSearch(); webSearch.setSiteRestriction('michalbiniek.blogspot.com'); searchControl.addSearcher(webSearch); searchControl.draw(document.getElementById("content")); }Kolejnym etapem jest wyciągnięcie z adresu URL informacji o wyszukiwanym słowie i uruchomienie wyszukiwania. Ponieważ nie każdy lubi samemu parsować adres URL - można wykorzystać gotowe rozwiązanie jak np. jQuery URL Parser.
function OnLoad() { var searchControl = new google.search.SearchControl(); var webSearch = new google.search.WebSearch(); webSearch.setSiteRestriction('michalbiniek.blogspot.com'); searchControl.addSearcher(webSearch); searchControl.draw(document.getElementById("content")); // parametr z szukaną frazą to q searchControl.execute($.url.param('q')); }
W tym miejscu kończy się JavaScript a zaczynają style CSS. Struktura poszczególnych wyników jest podana w dokumentacji Google, dzięki czemu można mniej więcej rozeznać się w klasach generowanego kodu HTML. Jednak lepiej samemu sprawdzić co zostało wygenerowane, bo czasami dokumentacja nie nadąża za zmianami w API. A oto przykładowy wycinek z dokumentacji dla wyniku z wyszukiwarki WebSearch:
<div class="gs-result gs-webResult"> <!-- Note, a.gs-title can have embedded HTML // so make sure to account for this in your rules. // For instance, to change the title color to red, // use a rule like this: // a.gs-title, a.gs-title * { color : red; } --> <div class="gs-title"> <a class="gs-title"></a> </div> <div class="gs-snippet"></div> <!-- The default CSS rule has the -short URL visible and // the -long URL hidden. // // If you want to reverse this, use a rule like: // #mycontrol .gs-webResult .gs-visibleUrl-short { display:none; } // #mycontrol .gs-webResult .gs-visibleUrl-long { display:block; } --> <div class="gs-visibleUrl gs-visibleUrl-short"></div> <div class="gs-visibleUrl gs-visibleUrl-long"></div> </div>
Domyślnie Google nadaje elementom odpowiednie style - jeżeli chcemy, aby Google nie dodawał nic od siebie możemy podać parametr nocss podczas ładowania biblioteki google.load('search', '1', {'nocss': true}).
Gotowa całość wyszukiwarki wygląda mniej więcej tak:
HTML
<html> <head> <script type="text/javascript" src="http://www.google.com/jsapi?key=KLUCZ_API"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> <script type="text/javascript" src="jquery.url.js"></script> <script type="text/javascript"> // zawartość w bloku poniżej </script> </head> <body> <div id="content"> </div> </body> </html>
JavaScript
google.load("search", "1"); function OnLoad() { var searchControl = new google.search.SearchControl(); var webSearch = new google.search.WebSearch(); webSearch.setSiteRestriction('michalbiniek.blogspot.com'); searchControl.addSearcher(webSearch); searchControl.draw(document.getElementById("content")); searchControl.execute($.url.param('q')); } google.setOnLoadCallback(OnLoad);
I w ten oto szybki i łatwy sposób mamy w pełni profesjonalną wyszukiwarkę po stronie. Warto pamiętać, że jeżeli śledzimy wyniki wyszukiwań w Google Analytics'ie to zapytania idą jako AJAX - czyli sami musimy obsłużyć akcję zliczania poprzez wywołanie adresu z parametrem słowa szukanego (oczywiście oprócz tego pierwszego). Wówczas warto skorzystać z funkcji callback'owych - do obsługi zdarzenia wyszukiwania. Oczywiście, żeby nie zliczyć podwójnie wyszukiwania pierwszego słowa, dodamy flagę, która sprawdza, czy zdarzenie wykonuje się po raz pierwszy.
var first = true; function OnLoad() { var searchControl = new google.search.SearchControl(); var webSearch = new google.search.WebSearch(); webSearch.setSiteRestriction('michalbiniek.blogspot.com'); searchControl.addSearcher(webSearch); searchControl.draw(document.getElementById("content")); searchControl.execute($.url.param('q')); searchControl.setSearchCompleteCallback(this, function(form) { if (first) {first = false; return;} var searchWord = form.input.value; _gaq.push(['_link', '/search.html?q='+searchWord]); }); }
Na koniec przykład z działającą wyszukiwarką po domenie michalbiniek.blogspot.com.
1 komentarz:
o wielkie dzieki dobry czlowieku :))
Prześlij komentarz