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.
<!-- 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 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:
{
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 | BegindoGoogleSearch EnddoGoogleSearch |
Zφskßnφ strßnky z cache | doGetCachedPage | BegindoGetCachedPage EnddoGetCachedPage |
Korekce p°eklep∙ | doSpellingSuggestion | BegindoSpellingSuggestion EnddoSpellingSuggestion |
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:
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.
<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.