home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 January / PCWorld_2005-01_cd.bin / novinky / Interval / clanek04.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-12-09  |  17.9 KB  |  193 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='-1' />
  10. <meta name='robots' content='index,follow' />
  11. <meta name='googlebot' content='index,follow,snippet,noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta name='ICBM' content='49.1915, 16.626' />
  15. <meta name='DC.Title' content='Interval.cz' />
  16. <meta name='DC.Identifier' content='http://interval.cz' />
  17. <meta name='DC.Language' content='cs' />
  18. <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))' />
  19. <meta http-equiv='imagetoolbar' content='no' />
  20. <meta http-equiv='MSThemeCompatible' content='no' />
  21. <meta name='MSSmartTagsPreventParsing' content='true' />
  22. <link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
  23. <link rel='alternate' type='application/rss+xml' title='RSS Interval.cz' href='http://interval.cz/__rss/rss.asp' />
  24. <link rel='home' href='http://interval.cz' />
  25. <link rel='search' href='http://interval.cz/search_ex.asp' />
  26. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  27. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  30. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  31. <title>Interval.cz - webdesign a e-komerce denn∞</title>
  32. </head>
  33. <body class='interval interval-articles'>
  34. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  35. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  36. <div id='page-body'><div id='page-left'><div id='article'>
  37.  
  38.  
  39. <h2>Napojenφ na Google API v ASP.NET</h2>
  40. <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>
  41.  
  42. <h3>Co Google Web APIs nabφzφ?</h3>
  43. <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>
  44.  
  45. <h3>Registrace ·Φtu</h3>
  46. <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>
  47.  
  48. <h3>Vytvo°enφ ASP.NET projektu</h3>
  49. <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>
  50. <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>
  51.  
  52. <h3>Realizace hledßnφ</h3>
  53. <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>
  54.  
  55. <div class='sample'>
  56. <appSettings>
  57. <br />  <!-- licenΦnφ Φφslo pro Google Web APIs -->
  58. <br />  <add key="GoogleLicenseKey" value=" ... " />
  59. <br /></appSettings>
  60. </div>
  61.  
  62. <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>
  63.  
  64. <div class='sample'>
  65. using System.Configuration;
  66. <br />using com.google.api;
  67. </div>
  68.  
  69. <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>
  70.  
  71. <div class='sample'>
  72. private void Submit_Click(object sender, EventArgs e)
  73. <br />{
  74. <br />  string key =
  75. <br />    ConfigurationSettings.AppSettings["GoogleLicenseKey"];
  76. <br />  GoogleSearchService proxy = new GoogleSearchService();
  77. <br />  GoogleSearchResult result = proxy.doGoogleSearch(
  78. <br />    key, Query.Text, 0, 10, true, "", false, "", "", "");
  79. <br />  proxy.Dispose();
  80. <br />  Results.DataSource = result.resultElements;
  81. <br />  Results.DataBind();
  82. <br />}
  83. </div>
  84.  
  85. <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>
  86.  
  87. <div class='table'>
  88. <table cellspacing='0'>
  89. <tr><th>Popis</th><th>Synchronnφ volßnφ</th><th>Asynchronnφ volßnφ</th></tr>
  90. <tr><td>Hledßnφ</td><td><code>doGoogleSearch</code></td><td><code>BegindoGoogleSearch</code><code>EnddoGoogleSearch</code></td></tr>
  91. <tr><td>Zφskßnφ strßnky z cache</td><td><code>doGetCachedPage</code></td><td><code>BegindoGetCachedPage</code><code>EnddoGetCachedPage</code></td></tr>
  92. <tr><td>Korekce p°eklep∙</td><td><code>doSpellingSuggestion</code></td><td><code>BegindoSpellingSuggestion</code><code>EnddoSpellingSuggestion</code></td></tr>
  93. </table>
  94. </div>
  95.  
  96. <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>
  97. <p>Podφvejme se na parametry, kterΘ nßm metoda <code>doGoogleSearch</code> nabφzφ:</p>
  98.  
  99. <div class='table'>
  100. <table cellspacing='0'>
  101. <tr><th>Nßzev</th><th>Typ</th><th>Popis</th></tr>
  102. <tr><td><samp>key</samp></td><td>string</td><td>VaÜe licenΦnφ Φφslo.</td></tr>
  103. <tr><td><samp>q</samp></td><td>string</td><td>Samotn² vyhledßvacφ dotaz.</td></tr>
  104. <tr><td><samp>start</samp></td><td>int</td><td>Index prvnφho vrßcenΘho v²sledku v mno₧in∞ vÜech v²sledk∙. Prvnφ v²sledek mß nulov² index.</td></tr>
  105. <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>
  106. <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>
  107. <tr><td><samp>restricts</samp></td><td>string</td><td>Omezuje v²sledky na vybran² Google Web index, nap°φklad "Linux".</td></tr>
  108. <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>
  109. <tr><td><samp>lr</samp></td><td>string</td><td>Omezuje v²sledky na vybranΘ jazyky.</td></tr>
  110. <tr><td><samp>ie</samp></td><td>string</td><td>Vstupnφ k≤dovßnφ, tento parametr je ignorovßn.</td></tr>
  111. <tr><td><samp>oe</samp></td><td>string</td><td>V²stupnφ k≤dovßnφ, tento parametr je ignorovßn.</td></tr>
  112. </table>
  113. </div>
  114.  
  115. <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>
  116.  
  117. <h3>Zobrazenφ v²sledku</h3>
  118. <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>
  119.  
  120. <div class='sample'>
  121. <%@ Import namespace="(jmenn² prostor).com.google.api" %>
  122. </div>
  123.  
  124. <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>
  125.  
  126. <div class='sample'>
  127. <asp:Repeater id="Results" runat="server">
  128. <br />  <HeaderTemplate>
  129. <br />    <ol>
  130. <br />  </HeaderTemplate>
  131. <br />  <ItemTemplate>
  132. <br />    <li>
  133. <br />    <a href="<%#((ResultElement)Container.DataItem).URL%>">
  134. <br />      <%#((ResultElement)Container.DataItem).title %>
  135. <br />    </a><br/>
  136. <br />    <%# ((ResultElement)Container.DataItem).snippet %>
  137. <br />    </li>
  138. <br />  </ItemTemplate>
  139. <br />  <FooterTemplate>
  140. <br />    </ol>
  141. <br />  </FooterTemplate>
  142. <br /></asp:Repeater>
  143. </div>
  144.  
  145. <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>
  146.  
  147. <h3>Odkazy a zdroje</h3>
  148.  
  149. <div class='list'>
  150. <ul>
  151. <li><a href='http://www.google.com/apis/reference.html'>Google Web APIs Reference</a></li>
  152. <li><a href='http://www.w3.org/TR/wsdl'>W3C: Web Services Description Language (WSDL)</a></li>
  153. </ul>
  154. </div>
  155.  
  156. <div id='article-author'>
  157. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=217'>B°φza, Petr</a> (9. 11. 2004)
  158.  
  159. </div>
  160.  
  161.  
  162. </div></div>
  163. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  164. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  165.  
  166.  
  167.  
  168. <div class='page-right-box book'>
  169.     <h3>Kni₧nφ novinka</h3>
  170.     <div class='page-right-box-in'>
  171.         <div class='book-top'>
  172.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=280'>xCSS - referenΦnφ p°φruΦka</a></h4>
  173.         </div>
  174.         <div class='image'>
  175.             <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  176.         </div>
  177.         <div class='book-bottom'>Cena: <span class='book-price-old'>350 KΦ</span> <span class='book-price-new'>315 KΦ</span></div>
  178.     </div>
  179. </div>
  180.  
  181.  
  182.  
  183. <div class='page-right-box reading'><h3 title='NejΦten∞jÜφ Φlßnky za poslednφch 14 dn∙'>NejΦten∞jÜφ</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3658'>VyhlßÜenφ sout∞₧e Interzen 2004</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3682'>Zend's PHP 5 Coding Contest - wtcSQLite</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3693'>PSPad - zaΦφnßme tvo°it webov² projekt</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3694'>SEO - struktura a p°esm∞rovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3689'>NauΦte se vid∞t kreativn∞</a></li></ul></div></div><div class='page-right-box cauldron'><h3 title='Nejdiskutovan∞jÜφ Φlßnky za poslednφch 21 dn∙'>Diskuznφ kotel</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3680' title='(34 komentß°∙)'>H°φchy pro ÜφlenΘho korektora - autentizace, autentikace nebo autentifikace?</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3694' title='(31 komentß°∙)'>SEO - struktura a p°esm∞rovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3683' title='(13 komentß°∙)'>Individualizace stylopis∙ k eliminaci chyb prohlφ₧eΦ∙ - teoretick² p°ehled</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3682' title='(13 komentß°∙)'>Zend's PHP 5 Coding Contest - wtcSQLite</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3676' title='(11 komentß°∙)'>Webdesign s webov²mi standardy</a></li></ul></div></div>
  184.  
  185.  
  186.  
  187. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  188. </div>
  189. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  190. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  191. </body>
  192. </html>
  193.