<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>deadlime.project &#187; XML</title>
	<atom:link href="http://deadlime.hu/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://deadlime.hu</link>
	<description>squeezed out</description>
	<lastBuildDate>Tue, 24 Jan 2012 21:54:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Kliens oldali XSLT</title>
		<link>http://deadlime.hu/2008/04/03/kliens-oldali-xslt/</link>
		<comments>http://deadlime.hu/2008/04/03/kliens-oldali-xslt/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 08:48:12 +0000</pubDate>
		<dc:creator>kriz</dc:creator>
				<category><![CDATA[nincs kategória]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XSLT]]></category>

		<guid isPermaLink="false">http://deadlime.hu/?p=111</guid>
		<description><![CDATA[Avagy az oldal összerakásával terheljük inkább a látogató böngészőjét a szerver helyett. Néha egész érdekes dolgokat lehet látni, ha az ember - szakmai ártalomból, vagy csak egyszerű kíváncsiságból - beleles egyes oldalak forrásába. Az ilyen oldalak közé tartozik a The World of Warcraft Armory is. Az első pillantásra elég bonyolultnak tűnő oldal mögött meglepően kicsi [...]]]></description>
			<content:encoded><![CDATA[<p><em>Avagy az oldal összerakásával terheljük inkább a látogató böngészőjét a szerver helyett.</em></p>

<p>Néha egész érdekes dolgokat lehet látni, ha az ember - szakmai ártalomból, vagy csak egyszerű kíváncsiságból - beleles egyes oldalak forrásába. Az ilyen oldalak közé tartozik a <a href="http://eu.wowarmory.com/">The World of Warcraft Armory</a> is. Az első pillantásra elég bonyolultnak tűnő oldal mögött meglepően kicsi (5 soros) XML fájl van. Legalábbis látszólag. Természetesen az XSLT áll a dolog mögött, aminek a szerver oldali alkalmazásáról már <a href="http://deadlime.hu/2006/03/03/xslt-a-gyakorlatban/">réges-régen ejtettem pár szót</a>. Nézzük akkor most meg, hogy kliens oldalon mit művelhetünk vele:</p><span id="more-111"></span>

<h3>Az alapok</h3>

<p>Amire szükségünk lesz az egy XML és egy XSL fájl. A rendszerben valószínűleg az XSL fájlok statikusak lesznek, az XML-ek pedig szerver oldalon fognak generálódni. Nézzünk egy egyszerű blog példát kezdésnek:</p>

<pre class="code prettyprint lang-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;index.xsl&quot;?&gt;
&lt;page&gt;
    &lt;post url=&quot;http://example.com/&quot;&gt;
        &lt;name&gt;A bejegyzés címe #1&lt;/name&gt;
        &lt;content&gt;
            &lt;p&gt;A bejegyzés tartalma #1&lt;/p&gt;
        &lt;/content&gt;
        &lt;author url=&quot;http://example.com/&quot;&gt;író #1&lt;/author&gt;
        &lt;tags&gt;
            &lt;tag url=&quot;http://example.com/&quot;&gt;tag #1&lt;/tag&gt;
            &lt;tag url=&quot;http://example.com/&quot;&gt;tag #2&lt;/tag&gt;
        &lt;/tags&gt;
    &lt;/post&gt;
    &lt;post url=&quot;http://example.com/&quot;&gt;
        &lt;name&gt;A bejegyzés címe #2&lt;/name&gt;
        &lt;content&gt;
            &lt;p&gt;A bejegyzés tartalma #2&lt;/p&gt;
        &lt;/content&gt;
        &lt;author url=&quot;http://example.com/&quot;&gt;író #1&lt;/author&gt;
        &lt;tags&gt;
            &lt;tag url=&quot;http://example.com/&quot;&gt;tag #3&lt;/tag&gt;
            &lt;tag url=&quot;http://example.com/&quot;&gt;tag #4&lt;/tag&gt;
            &lt;tag url=&quot;http://example.com/&quot;&gt;tag #5&lt;/tag&gt;
        &lt;/tags&gt;
    &lt;/post&gt;
&lt;/page&gt;</pre>

<p>Gyakorlatilag bármilyen XML-t használhatunk, az oldal akár lehetne egy RSS feed is, amit a megfelelő XSL fájllal formálunk weboldal alakúvá. Esetünkben ez a fájl valahogyan így néz ki:</p>

<pre class="code prettyprint lang-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
    &lt;xsl:output method=&quot;html&quot; doctype-system=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot; doctype-public=&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;/&gt;
    &lt;xsl:template match=&quot;page&quot;&gt;
        &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
            &lt;head&gt;
                &lt;title&gt;XSL teszt&lt;/title&gt;
            &lt;/head&gt;
            &lt;body&gt;
                &lt;div id=&quot;container&quot;&gt;
                    &lt;xsl:apply-templates/&gt;
                &lt;/div&gt;
            &lt;/body&gt;
        &lt;/html&gt;
    &lt;/xsl:template&gt;
    &lt;xsl:template match=&quot;post&quot;&gt;
        &lt;div class=&quot;post&quot;&gt;
            &lt;h2&gt;&lt;a href=&quot;{@url}&quot;&gt;&lt;xsl:value-of select=&quot;name/text()&quot;/&gt;&lt;/a&gt;&lt;/h2&gt;
            &lt;ul class=&quot;post-tags&quot;&gt;
                &lt;xsl:for-each select=&quot;tags/tag&quot;&gt;
                    &lt;li&gt;&lt;a href=&quot;{@url}&quot;&gt;&lt;xsl:value-of select=&quot;text()&quot;/&gt;&lt;/a&gt;&lt;/li&gt;
                &lt;/xsl:for-each&gt;
            &lt;/ul&gt;
            &lt;div class=&quot;post-content&quot;&gt;&lt;xsl:copy-of select=&quot;content&quot;/&gt;&lt;/div&gt;
        &lt;/div&gt;
    &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;</pre>

<p>A transzformáció az első illeszkedő <code>&lt;xsl:template&gt;</code> blokk végrehajtása után leáll (esetünkben ez az <code>&lt;xsl:template match="page"&gt;</code> kezdetű blokk). Ahhoz, hogy további template blokkokat hajthassunk végre a jelenlegi elemen (esetünkben ez az XML <code>&lt;page&gt;</code> tagje), vagy annak gyerekein, az <code>&lt;xsl:apply-templates/&gt;</code> taget kell használni (ennek van egy <code>select=""</code> tulajdonsága, amivel még szűkíthetjük a node-okat, amin szeretnénk végrehajtani transzformációt).</p>

<p>A <code>&lt;post&gt;</code> tagre illeszkedő template-ben látható példa arra, hogy hogyan tudunk egy tulajdonságnak értéket adni (<code>{@url}</code>), hogyan lehet sima szöveget kinyerni az eredeti XML-ből (<code>&lt;xsl:value-of select="name/text()"/&gt;</code>) valamint arra, hogyan lehet egy XML részt egy az egyben átmásolni az eredeti XML-ből (<code>&lt;xsl:copy-of select="content"/&gt;</code>). Hosszasan lehetne magyarázni, hogy akkor most ez hogy is van és egyébként is milyen eszközök állnak még a rendelkezésre, de mivel már születtek erről leírások <a href="http://www.stud.u-szeged.hu/Vizhanyo.Andor/">erre</a> és <a href="http://www.zvon.org/xxl/XSLTutorial/Output_hun/contents.html">erre</a> (meg még sok egyéb helyen is biztos), ezért ugorjuk át az unalmas részleteket, és nézzünk valami izgalmasabb dolgot, nevezetesen azt, hogy mire is lehet ezt az XSLT dolgot használni?</p>

<h3>Többnyelvűsítés</h3>

<p>Hogyan is többnyelvűsítünk olyan adatokat a weboldalon, amik statikusan bele vannak írva a sablonba? Például ez a dolog valahogy úgy történhet meg, hogy van egy (optimális esetben minél rövidebb nevű) függvényünk, ami megkapja paraméterként a szöveget és ha van hozzá az adott nyelven fordítás, akkor megjelenítni, ha nincs, akkor pedig kiírja az eredetileg kapott szöveget (vagy bármi más feltűnő szöveget, hogy szegény fordító lássa, hogy ott még hiány van). A függvény maga meg valószínűleg adatbázisból dolgozik, esetleg az adatbázisból generálódik egy PHP, XML vagy egyéb szöveges formátumú fájl cache-elési szándékkal.</p>

<p>Ha már mindenképpen generálunk mondjuk egy XML fájlt ezekből az adatokból, akkor miért ne lehetne azt csinálni, hogy az XSLT-t segítségül hívva rakjuk be a megfelelő helyre a megfelelő nyelvű szöveget? Nézzük is az új XML fájlunkat:</p>

<pre class="code prettyprint lang-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;multilang.xsl&quot;?&gt;
&lt;page lang=&quot;hu&quot;/&gt;</pre>

<p>A felesleget kiszórtam belőle, mivel valószínűleg az XML-be csak dinamikus adatok kerülnek már a megfelelő nyelven, úgyhogy az a része minket most nem érdekel. Emellett kapott egy extra tulajdonságot a <code>&lt;page&gt;</code> tag (<code>lang="hu"</code>). Szükségünk lesz még egy második XML fájlra, ami az oldal megjelenítéséhez szükséges statikus szövegeket tartalmazza:</p>

<pre class="code prettyprint lang-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;strings&gt;
    &lt;string id=&quot;text-1&quot;&gt;Valami szöveg&lt;/string&gt;
    &lt;string id=&quot;text-2&quot;&gt;Valami másik szöveg&lt;/string&gt;
&lt;/strings&gt;</pre>

<p>...és természetesen egy XSL fájlra, a megfelelő kimenet érdekében:</p>

<pre class="code prettyprint lang-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
    &lt;xsl:output method=&quot;html&quot; doctype-system=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot; doctype-public=&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;/&gt;
    &lt;xsl:variable name=&quot;lang&quot; select=&quot;/page/@lang&quot;/&gt;
    &lt;xsl:variable name=&quot;data&quot; select=&quot;document(concat('data_',$lang,'.xml'))&quot;/&gt;
    &lt;xsl:template match=&quot;page&quot;&gt;
        &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
            &lt;head&gt;
                &lt;title&gt;XSL teszt&lt;/title&gt;
            &lt;/head&gt;
            &lt;body&gt;
                &lt;h1&gt;&lt;xsl:value-of select=&quot;$data/strings/string[@id='text-1']&quot;/&gt;&lt;/h1&gt;
                &lt;p&gt;&lt;xsl:value-of select=&quot;$data/strings/string[@id='text-2']&quot;/&gt;&lt;/p&gt;
            &lt;/body&gt;
        &lt;/html&gt;
    &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;</pre>

<p>Az előző kódhoz képest lett pár új dolog. Az <code>&lt;xsl:variable&gt;</code> segítségével adhatunk változóknak értéket, amiket később a $változónév formában érhetünk el. Ezen kívül megjelent pár XSL függvény is, a <code>document()</code> és a <code>concat()</code>. A <code>concat()</code> egyszerű string összefűzés, a <code>document()</code> segítségével pedig egy külső XML-t tölthetünk be (így a változón keresztül elérhetjük a benne lévő adatokat).</p>

<h3>És a <acronym title="Search Engine Optimization">SEO</acronym>?</h3>

<p>Persze, szép dolog szétválasztani a nyers adatokat, a statikus, többnyelvű szöveget a megjelenítéstől, és mintezt kliens oldalon össszerakni, de mit sem ér, ha a keresők nem tudnak vele mit kezdeni. Nem látok bele a keresőrobotok lelki világába, de abból kiindulva, hogy az "armory" szóra a bevezetőben említett oldal amerikai párja jön fel a <a href="http://www.google.hu/search?q=armory">Google-ben első találatként</a>, arra lehet következtetni, hogy különösebben nem viseli meg őket a dolog. Ha az oldal tárolt változatát is megnézzük, észre lehet venni, hogy a forrásban már az XSL transzformáció utáni állapotot mutatja (és mellesleg a <a href="http://search.yahoo.com/search?p=armory">Yahoo!</a>-val és a <a href="http://search.msn.com/results.aspx?q=armory">Live Search</a>-el kapcsolatban is hasonló a helyzet), azaz szerintem az XML+XSLT oldalak (amiknek a kimenete HTML) ugyanúgy viselkednek kereső-optimalizációs szempontból nézve, mint a sima HTML oldalak.</p>

<p>Ennyit mára. <em>Folyt. köv.</em></p>]]></content:encoded>
			<wfw:commentRss>http://deadlime.hu/2008/04/03/kliens-oldali-xslt/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>A SOAP osztály kiváltása</title>
		<link>http://deadlime.hu/2006/07/26/a-soap-osztaly-kivaltasa/</link>
		<comments>http://deadlime.hu/2006/07/26/a-soap-osztaly-kivaltasa/#comments</comments>
		<pubDate>Tue, 25 Jul 2006 22:11:06 +0000</pubDate>
		<dc:creator>kriz</dc:creator>
				<category><![CDATA[nincs kategória]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://deadlime.hu/2006/07/26/a-soap-osztaly-kivaltasa/</guid>
		<description><![CDATA[Kisebb-nagyobb kihagyás után ismét itt vagyok (vagy talán vagyunk). Egy munka során felmerült problémát, és a hozzá tartozó megoldásomat szeretném most megosztani. Arról már korábban volt szó, hogy hogyan használhatjuk a PHP 5 beépített SOAP osztályát, ha SOAP klienst vagy szervert szeretnénk üzemeltetni. Azonban mi van akkor, ha nem áll rendelkezésre PHP 5? Persze, ott [...]]]></description>
			<content:encoded><![CDATA[<p>Kisebb-nagyobb kihagyás után ismét itt vagyok (vagy talán vagyunk). Egy munka során felmerült problémát, és a hozzá tartozó megoldásomat szeretném most megosztani. Arról már <a href="http://deadlime.hu/2006/05/14/google-web-api/">korábban volt szó</a>, hogy hogyan használhatjuk a PHP 5 <a href="http://php.net/soap">beépített SOAP osztályát</a>, ha SOAP klienst vagy szervert szeretnénk üzemeltetni. Azonban mi van akkor, ha nem áll rendelkezésre PHP 5? Persze, ott a PEAR, de mivel nekem egyrészről nem volt szükségem a SOAP kliens által nyújtott minden szolgáltatásra és egyébként is inkább előnyben részesítem a saját kódot, ezért elő is bányásztam már porosodó cURL tudásomat, mivel a cURL kiterjesztés nagyban megkönnyíti a HTTP kérések küldését és a válaszok fogadását valamint a PHP 4-es verziójában is elérhető.</p>

<p>A feladat tehát, hogy az <a href="http://www.mnb.hu/">MNB</a> SOAP alapú webszolgáltatását használva lekérjük az éppen aktuális árfolyamokat a PHP egy 4.4 feletti verziója segítségével. Az MNB-nél elég programozó-barátak ilyen téren, a <a href="http://www.mnb.hu/arfolyamok.asmx">http://www.mnb.hu/arfolyamok.asmx</a> címen tulajdonképpen mindent megtudhatunk a szolgáltatás működéséről, kezdve attól, hogy milyen formátumú XML-t várnak tőlünk, addig, hogy milyen formátumút fogunk mi azért cserébe kapni. Természetesen a dolog nem ennyire szép, mivel csak a szabványos SOAP kérés-válasz van leírva, hogy az adatokat magukat milyen formátumban kapjuk, az nincs. Részletkérdés, úgyis látni fogjuk... :)</p><span id="more-63"></span>

<p>Mint az a fentebb említett címen kitűnően látható, három függvény áll a rendelkezésünkre, ebből mi csak a középsőt fogjuk használni, mivel az adja vissza az aktuális árfolyamokat. Ha vagyunk olyan bátrak és rá is kattintunk, láthatjuk a kérés és válasz szabványos formáját. Kezdjük is el a kódolást:</p>

<pre class="code prettyprint lang-php">$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, &quot;http://www.mnb.hu/arfolyamok.asmx&quot;);
curl_setopt($ch, CURLOPT_HEADER, 0);</pre>

<p>Létrehozunk egy cURL kapcsolatot, majd megadjuk neki az URL-t, megmondjuk, hogy nem kérünk header-eket, a könnyebb feldolgozhatóság érdekében. A példa XML header-jében látszik, hogy POST-olnunk kell az adatokat a rendszernek, ezért a következő beállításra is szükségünk lesz:</p>

<pre class="code prettyprint lang-php">curl_setopt($ch, CURLOPT_POST, true);</pre>

<p>Ennek viszont megvan az a hátránya, hogy az alapértelmezett Content-Type <code>application/x-www-form-urlencoded</code> lesz, a szolgáltatás viszont <code>text/xml</code>-t vár el tőlünk (és ezt nem is felejti el megjegyezni egy hiba formájában ha mégis az előbbivel küldjük neki az adatokat). Így ezt át kell állítanunk, valamint egy saját header-re is szükségünk van (SOAPAction):</p>

<pre class="code prettyprint lang-php">curl_setopt($ch, CURLOPT_HTTPHEADER, array(
	'Content-Type: text/xml; charset=utf-8',
	'SOAPAction: &quot;http://www.mnb.hu/webservices/GetCurrentExchangeRates&quot;'
));</pre>

<p>Nincs más hátra, mint a megfelelő <code>curl_setopt</code> segítségével a POST adatot hozzácsapni a kérés végére:</p>

<pre class="code prettyprint lang-php">curl_setopt($ch, CURLOPT_POSTFIELDS, &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?&gt;
&lt;soap:Envelope xmlns:xsi=\&quot;http://www.w3.org/2001/XMLSchema-instance\&quot; xmlns:xsd=\&quot;http://www.w3.org/2001/XMLSchema\&quot; xmlns:soap=\&quot;http://schemas.xmlsoap.org/soap/envelope/\&quot;&gt;
	&lt;soap:Body&gt;
		&lt;GetCurrentExchangeRates xmlns=\&quot;http://www.mnb.hu/webservices/\&quot;/&gt;
	&lt;/soap:Body&gt;
&lt;/soap:Envelope&gt;&quot;);</pre>

<p>Már csak egy utolsó beállítás, hogy ne rögtön kiírja az eredményt, hanem visszaadja, majd végrehajtjuk a lekérést és lezárjuk a kapcsolatot:</p>

<pre class="code prettyprint lang-php">curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$soap_response = curl_exec($ch);
curl_close($ch);</pre>

<p>Meg is volnánk. Bár tény, hogy a SOAP osztályt használva fele ennyi kóddal megúsztuk volna és abban már az eredmény kinyerése a SOAP válaszból is meglett volna, de ez legalább működik PHP 4-es környezetben is. Klimatizált szerverszobában gazdag további nyarat Mindenkinek.</p>]]></content:encoded>
			<wfw:commentRss>http://deadlime.hu/2006/07/26/a-soap-osztaly-kivaltasa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo! Search API</title>
		<link>http://deadlime.hu/2006/05/14/yahoo-search-api/</link>
		<comments>http://deadlime.hu/2006/05/14/yahoo-search-api/#comments</comments>
		<pubDate>Sun, 14 May 2006 12:42:16 +0000</pubDate>
		<dc:creator>kriz</dc:creator>
				<category><![CDATA[nincs kategória]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://deadlime.hu/2006/05/14/yahoo-search-api/</guid>
		<description><![CDATA[Miután Polaa belevetette magát a Google API rejtelmeibe, gondoltam megnézem, hogy a konkurens keresővállalatnál mi a helyzet ilyen téren. Természetesen létezik Yahoo! API is. Természetesen arra ne is gondoljunk, hogy a Google által használt megoldást valósították meg Ők is. Miért is tették volna? Tehát az előzőekben átnézett, megszeretett SOAP kódunkat a Yahoo! esetében dobhatjuk a [...]]]></description>
			<content:encoded><![CDATA[<p>Miután Polaa belevetette magát a Google API rejtelmeibe, gondoltam megnézem, hogy a konkurens keresővállalatnál mi a helyzet ilyen téren. Természetesen létezik Yahoo! API is. Természetesen arra ne is gondoljunk, hogy a Google által használt megoldást valósították meg Ők is. Miért is tették volna? Tehát az előzőekben átnézett, megszeretett SOAP kódunkat a Yahoo! esetében dobhatjuk a kukába. No de nézzük mire is lesz szükségünk.</p>

<p>Először is, <a href="http://api.search.yahoo.com/webservices/register_application">vadásznunk kell magunknak</a> egy application id-t, amit majd minden kéréshez hozzá kell csatolnunk. Ehhez szükségünk lesz egy Yahoo! ID-re is, mert akkor már ugye növeljük a Yahoo! felhasználók táborát. Ha minden megvan, akkor igazából készen is vagyunk és kezdhetünk kódot írni. A kódoláshoz használtam a cURL kiterjesztést, mivel ez nagyban megkönnyíti a dolgunkat, de használhatnánk <code>file_get_contents()</code> függvényt, ha engedélyezve van a php.ini-ben az allow_url_fopen vagy pedig használhatjuk az <code>fsockopen()</code> függvényt is, ha lehetőségünk van rá.</p><span id="more-47"></span>

<p>No, csapjunk a lecsóba, nézzünk egy kis kódot, amivel megkaphatjuk egy keresés eredményét XML formátumban:</p>

<pre class="code prettyprint lang-php">header('Content-Type: text/xml');

$app_id = 'ide jön az application id';

$service = array(
	'image' =&gt; 'http://api.search.yahoo.com/ImageSearchService/V1/imageSearch',
	'local' =&gt; 'http://api.local.yahoo.com/LocalSearchService/V1/localSearch',
	'news' =&gt; 'http://api.search.yahoo.com/NewsSearchService/V1/newsSearch',
	'video' =&gt; 'http://api.search.yahoo.com/VideoSearchService/V1/videoSearch',
	'web' =&gt; 'http://api.search.yahoo.com/WebSearchService/V1/webSearch'
);

$conn = curl_init($service['web'].'?appid='.$app_id.'&amp;query=deadlime');
curl_setopt($conn, CURLOPT_HEADER, false);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($conn);
curl_close($conn);
 
echo $xml;</pre>

<p>Mint az látszik, van egy $service tömb, amiben tároljuk a Yahoo! egyes API-jainak az elérési útját. Tulajdonképpen mindenféle PHP nélkül a böngészőben is játszhatnánk ezzel, hogy beírjuk címnek az egyik szolgáltatást és a következő GET paraméterekkel bővítjük a lekérdezést:</p>

<dl>
<dt>appid</dt>
<dd>Az application id, amit kaptál.</dd>
<dt>query</dt>
<dd>A lekérés szövege, érdemes lefuttatni rajta egy urlencode() vagy rawurlencode() függvényt.</dd>
<dt>zip</dt>
<dd>Zipcode, csak a Local Search szolgáltatásnál használható.</dd>
<dt>start</dt>
<dd>Ezzel lehet megadni, hogy hányadik elemtől mutassa a találatokat.</dd>
</dl>

<p>Nincs más hátra, mint kinyerni az adatokat a kapott XML fájlból, aminek a formátuma a $service['web'] esetén (ezt használtuk a fentebbi PHP példában) a következő:</p>

<pre class="code prettyprint lang-xml">&lt;ResultSet xsi:schemaLocation=&quot;urn:yahoo:srch http://api.search.yahoo.com/WebSearchService/V1/WebSearchResponse.xsd&quot; totalResultsAvailable=&quot;&quot; totalResultsReturned=&quot;&quot; firstResultPosition=&quot;&quot;&gt;
	&lt;Result&gt;
		&lt;Title&gt;&lt;/Title&gt;
		&lt;Summary&gt;&lt;/Summary&gt;
		&lt;Url&gt;&lt;/Url&gt;
		&lt;ClickUrl&gt;&lt;/ClickUrl&gt;
		&lt;ModificationDate&gt;&lt;/ModificationDate&gt;
		&lt;MimeType&gt;&lt;/MimeType&gt;
		&lt;Cache&gt;
			&lt;Url&gt;&lt;/Url&gt;
			&lt;Size&gt;&lt;/Size&gt;
		&lt;/Cache&gt;
	&lt;/Result&gt;
&lt;/ResultSet&gt;</pre>

<p>Nagyjából ennyi lenne a dolog. Mint az jól látszik, nem annyira testreszabható, mint a Google által kínált felület, viszont próbára tehetjük vele az XML értelmezési tudásunkat... :)</p>]]></content:encoded>
			<wfw:commentRss>http://deadlime.hu/2006/05/14/yahoo-search-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

