Navigace

Hlavnφ menu

 

Napojenφ na Google API v ASP.NET

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:

PopisSynchronnφ volßnφAsynchronnφ volßnφ
HledßnφdoGoogleSearchBegindoGoogleSearchEnddoGoogleSearch
Zφskßnφ strßnky z cachedoGetCachedPageBegindoGetCachedPageEnddoGetCachedPage
Korekce p°eklep∙doSpellingSuggestionBegindoSpellingSuggestionEnddoSpellingSuggestion

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ßzevTypPopis
keystringVaÜe licenΦnφ Φφslo.
qstringSamotn² vyhledßvacφ dotaz.
startintIndex prvnφho vrßcenΘho v²sledku v mno₧in∞ vÜech v²sledk∙. Prvnφ v²sledek mß nulov² index.
maxResultsintMaximßlnφ poΦet vrßcen²ch v²sledk∙. NejvyÜÜφ hodnota je 10.
filterboolUrΦuje, zda mß b²t pou₧it filtr pro omezenφ velmi podobn²ch v²sledk∙, nap°φklad pochßzejφcφch z jednoho webu.
restrictsstringOmezuje v²sledky na vybran² Google Web index, nap°φklad "Linux".
safeSearchboolUrΦuje, zda majφ b²t filtrovßny v²sledky nevhodnΘ pro mlßde₧.
lrstringOmezuje v²sledky na vybranΘ jazyky.
iestringVstupnφ k≤dovßnφ, tento parametr je ignorovßn.
oestringV²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

B°φza, Petr (9. 11. 2004)