<meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
<p id='prepend'>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.</p>
<h3>Co Google Web APIs nabφzφ?</h3>
<p>Automaticky se nabφzφ myÜlenka zp°φstupn∞nφ vyhledßvacφho engine Googlu, co₧ je pravda. <strong>Google Web APIs</strong> umo₧≥uje nastavit pro ka₧d² vyhledßvacφ dotaz <a href='http://www.google.com/advanced_search'>celou °adu parametr∙</a>, 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 <a href='http://aspx.interval.cz/briza/1030/'>otestovat v on-line ukßzce</a> (<a href='http://aspx.interval.cz/briza/1030/googletest.zip'>zdrojov² k≤d</a>).</p>
<h3>Registrace ·Φtu</h3>
<p>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 <a href='https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey'>Create a Google account</a>, 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.</p>
<h3>Vytvo°enφ ASP.NET projektu</h3>
<p>Spustφme Visual Studio .NET, a vytvo°φme nov² projekt typu <strong>ASP.NET Web Application</strong>. 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 <strong>Add Web Reference</strong>. Do pole adresa vlo₧φme adresu <a href='http://api.google.com/GoogleSearch.wsdl'>http://api.google.com/GoogleSearch.wsdl</a>, 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 <code>com.google.api</code> 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 <em>proxy</em>, se vrßtφme pozd∞ji, nynφ si p°ipravφme strßnku, kterß bude vyhledßvacφ engine Googlu vyu₧φvat.</p>
<p>K naÜim pokus∙m nßm bude staΦit jedinß ASPX strßnka, kterΘ nastavφme vlastnost <strong>pageLayout</strong> na hodnotu <strong>FlowLayout</strong>. 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 <strong>Query</strong>, <strong>Submit</strong> a <strong>Results</strong>. Nastavφme n∞jak smyslupln∞ text na tlaΦφtku, nap°φklad na "Hledat".</p>
<h3>Realizace hledßnφ</h3>
<p>LicenΦnφ Φφslo pro pot°eby naÜφ aplikace uschovßme do konfiguraΦnφho souboru <em>web.config</em> v sekci appSettings, kterou pro tento ·Φel vytvo°φme.</p>
<div class='sample'>
<appSettings>
<br /> <!-- licenΦnφ Φφslo pro Google Web APIs -->
<p>Ve zdrojovΘm k≤du strßnky deklarujeme pot°ebnΘ jmennΘ prostory. ZapφÜeme je do p°φkazu <code>namespace</code>, aby kompilßtor v∞d∞l, kde mß hledat jmenn² prostor Google proxy.</p>
<div class='sample'>
using System.Configuration;
<br />using com.google.api;
</div>
<p>Nßsleduje dvojklik na tlaΦφtko <strong>Hledat</strong>, Φφ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:</p>
<p>Nejd°φve je naΦteno licenΦnφ Φφslo do prom∞nnΘ <code>key</code>. Nßsleduje vytvo°enφ instance t°φdy <code>GoogleSearchResult</code>, 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:</p>
<tr><td>Zφskßnφ strßnky z cache</td><td><code>doGetCachedPage</code></td><td><code>BegindoGetCachedPage</code><code>EnddoGetCachedPage</code></td></tr>
<p>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φ.</p>
<p>Podφvejme se na parametry, kterΘ nßm metoda <code>doGoogleSearch</code> nabφzφ:</p>
<tr><td><samp>maxResults</samp></td><td>int</td><td>Maximßlnφ poΦet vrßcen²ch v²sledk∙. NejvyÜÜφ hodnota je 10.</td></tr>
<tr><td><samp>filter</samp></td><td>bool</td><td>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.</td></tr>
<tr><td><samp>restricts</samp></td><td>string</td><td>Omezuje v²sledky na vybran² Google Web index, nap°φklad "Linux".</td></tr>
<tr><td><samp>safeSearch</samp></td><td>bool</td><td>UrΦuje, zda majφ b²t filtrovßny v²sledky nevhodnΘ pro mlßde₧.</td></tr>
<tr><td><samp>lr</samp></td><td>string</td><td>Omezuje v²sledky na vybranΘ jazyky.</td></tr>
<tr><td><samp>ie</samp></td><td>string</td><td>Vstupnφ k≤dovßnφ, tento parametr je ignorovßn.</td></tr>
<tr><td><samp>oe</samp></td><td>string</td><td>V²stupnφ k≤dovßnφ, tento parametr je ignorovßn.</td></tr>
</table>
</div>
<p>Po provedenφ samotnΘho hledßnφ uvolnφme systΘmovΘ zdroje, kterΘ si hledßnφ vy₧ßdalo, a v²sledky p°edßme Repeateru.</p>
<h3>Zobrazenφ v²sledku</h3>
<p>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:</p>
<p>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 <a href='http://www.google.com/apis/reference.html#3_2'>referenΦnφ p°φruΦce Google Web APIs</a>.</p>
<p>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.</p>
<h3>Odkazy a zdroje</h3>
<div class='list'>
<ul>
<li><a href='http://www.google.com/apis/reference.html'>Google Web APIs Reference</a></li>
<li><a href='http://www.w3.org/TR/wsdl'>W3C: Web Services Description Language (WSDL)</a></li>