Známý fulltextový vyhledávač Google nabízí své služby s určitým omezením také prostřednictvím webových služeb, skrze rozhraní nazvané Google Web APIs. Využijme tedy této možnosti a naučme se zároveň pracovat s webovými službami ve vývojovém prostředí Visual Studio .NET.

Co Google Web APIs nabízí?

Automaticky se nabízí myšlenka zpřístupnění vyhledávacího engine Googlu, což je pravda. Google Web APIs umožňuje nastavit pro každý vyhledávací dotaz celou řadu parametrů, stejně jako jeho webové rozhraní. Ovšem Google zpřístupňuje i další služby, a to konkrétně obsah Google Cache a opravy překlepů (spelling correction). My se podíváme na první a asi nejzajímavější službu a vytvoříme si jednoduchou ASPX stránku s vyhledávačem. Výsledek naší práce můžete otestovat v on-line ukázce (zdrojový kód).

Registrace účtu

Rozhraní vyhledávače nemůže používat jen tak někdo, ale pouze majitel řádně zaregistrovaného Google účtu. Pokud jej nemáte, vaše první kroky by měly vést na stránku Create a Google account, kde si tento účet můžete zadarmo zřídit vyplněním jednoduchého formuláře. Jedinou podmínkou je vlastnictví e-mailové adresy. Její existence bude ověřena běžným způsobem – zasláním potvrzovacího kódu ve formě URL, na kterou stačí kliknout, čímž se váš účet aktivuje. Jakmile se k němu přihlásíte, bude vám e-mailem zaslán licenční klíč ke službám Google Web APIs. Tento klíč byste si měli dobře uschovat, neboť vám umožňuje spouštět 1 000 dotazů denně, což by pro nekomerční účely mělo stačit.

Vytvoření ASP.NET projektu

Spustíme Visual Studio .NET, a vytvoříme nový projekt typu ASP.NET Web Application. Ten napojíme na Google API přidáním odkazu na webovou službu Google. V Solution Exploreru klikneme na projekt pravým tlačítkem a vybereme Add Web Reference. Do pole adresa vložíme adresu http://api.google.com/GoogleSearch.wsdl, což je soubor obsahující podrobnou specifikaci webových služeb a jejich parametrů v jazyce WSDL. Tento jazyk je standardem W3C a je postaven na XML, stejně jako téměř všechny moderní popisné jazyky. Dialog potvrdíme tlačítkem Add Reference. Tím ve jmenném prostoru našeho projektu vznikl podprostor com.google.api a v něm sada tříd zpřístupňujících požadované služby. Můžeme se o tom přesvědčit pohledem do Object Browseru. K třídám, které se často označují jako proxy, se vrátíme později, nyní si připravíme stránku, která bude vyhledávací engine Googlu využívat.

K našim pokusům nám bude stačit jediná ASPX stránka, které nastavíme vlastnost pageLayout na hodnotu FlowLayout. Do stránky vložíme z ToolBoxu jedno textové pole (TextBox), za něj tlačítko (Button) a pod ně Repeater, který bude zobrazovat výsledky hledání. Tyto komponenty pojmenujeme Query, Submit a Results. Nastavíme nějak smysluplně text na tlačítku, například na „Hledat“.

Realizace hledání

Licenční číslo pro potřeby naší aplikace uschováme do konfiguračního souboru web.config v sekci appSettings, kterou pro tento účel vytvoříme.

<appSettings>
  <!– licenční číslo pro Google Web APIs –>
  <add key=“GoogleLicenseKey“ value=“ … “ />
</appSettings>

Ve zdrojovém kódu stránky deklarujeme potřebné jmenné prostory. Zapíšeme je do příkazu namespace, aby kompilátor věděl, kde má hledat jmenný prostor Google proxy.

using System.Configuration;
using com.google.api;

Následuje dvojklik na tlačítko Hledat, čímž se v kódu stránky vytvoří metoda obsluhující události kliknutí na toto tlačítko. Do jejího těla vepíšeme následující kód:

private void Submit_Click(object sender, EventArgs e)
{
  string key =
    ConfigurationSettings.AppSettings[„GoogleLicenseKey“];
  GoogleSearchService proxy = new GoogleSearchService();
  GoogleSearchResult result = proxy.doGoogleSearch(
    key, Query.Text, 0, 10, true, „“, false, „“, „“, „“);
  proxy.Dispose();
  Results.DataSource = result.resultElements;
  Results.DataBind();
}

Nejdříve je načteno licenční číslo do proměnné key. Následuje vytvoření instance třídy GoogleSearchResult, což je samotná proxy třída webové služby. Její metody umožňují volat služby Google API synchronně i asynchronně. Názvy metod jsou v následující tabulce:

Popis Synchronní volání Asynchronní volání
Hledání doGoogleSearch BegindoGoogleSearchEnddoGoogleSearch
Získání stránky z cache doGetCachedPage BegindoGetCachedPageEnddoGetCachedPage
Korekce překlepů doSpellingSuggestion BegindoSpellingSuggestionEnddoSpellingSuggestion

Synchronní volání použijeme, pokud chceme pouze službu zavolat a výsledky ihned zpracovat. Kdyby zpracování mohlo počkat a chtěli bychom mezitím provést další operace, lze využít asynchronní volání.

Podívejme se na parametry, které nám metoda doGoogleSearch nabízí:

Název Typ Popis
key string Vaše licenční číslo.
q string Samotný vyhledávací dotaz.
start int Index prvního vráceného výsledku v množině všech výsledků. První výsledek má nulový index.
maxResults int Maximální počet vrácených výsledků. Nejvyšší hodnota je 10.
filter bool Určuje, zda má být použit filtr pro omezení velmi podobných výsledků, například pocházejících z jednoho webu.
restricts string Omezuje výsledky na vybraný Google Web index, například „Linux“.
safeSearch bool Určuje, zda mají být filtrovány výsledky nevhodné pro mládež.
lr string Omezuje výsledky na vybrané jazyky.
ie string Vstupní kódování, tento parametr je ignorován.
oe string Výstupní kódování, tento parametr je ignorován.

Po provedení samotného hledání uvolníme systémové zdroje, které si hledání vyžádalo, a výsledky předáme Repeateru.

Zobrazení výsledku

Abychom nemuseli pokaždé uvádět úplný kvalifikovaný název všech tříd proxy, importujeme si jejich jmenný prostor v hlavičce stránky:

<%@ Import namespace=“(jmenný prostor).com.google.api“ %>

Nakonec vytvoříme v HTML kódu stránky šablonu pro jednotlivé položky Repeateru. Výsledky hledání budeme zobrazovat jako jednoduchý číslovaný seznam. Definujeme postupně šablony pro hlavičku, pro položku výsledků hledání a pro patičku Repeateru. Použijeme přitom tři vlastnosti výsledku, další si můžete najít v Object Browseru a jejich popis v referenční příručce Google Web APIs.

<asp:Repeater id=“Results“ runat=“server“>
  <HeaderTemplate>
    <ol>
  </HeaderTemplate>
  <ItemTemplate>
    <li>
    <a href=“<%#((ResultElement)Container.DataItem).URL%>“>
      <%#((ResultElement)Container.DataItem).title %>
    </a><br/>
    <%# ((ResultElement)Container.DataItem).snippet %>
    </li>
  </ItemTemplate>
  <FooterTemplate>
    </ol>
  </FooterTemplate>
</asp:Repeater>

A tím je naše práce hotova. Jak vidíte, za málo peněz jsme získali poměrně hodně muziky. Projekt lze samozřejmě dále vylepšovat, ovšem to již nechám zcela na vaší vlastní fantazii.

Odkazy a zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět