<?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; API</title>
	<atom:link href="http://deadlime.hu/tag/api/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>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>
		<item>
		<title>Google Web API</title>
		<link>http://deadlime.hu/2006/05/14/google-web-api/</link>
		<comments>http://deadlime.hu/2006/05/14/google-web-api/#comments</comments>
		<pubDate>Sun, 14 May 2006 10:43:04 +0000</pubDate>
		<dc:creator>Polaa</dc:creator>
				<category><![CDATA[nincs kategória]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SOAP]]></category>

		<guid isPermaLink="false">http://deadlime.hu/2006/05/14/google-web-api/</guid>
		<description><![CDATA[Az egyik legegyszerűbb a google által kínált api-k közül a web api. Ebbe a felületbe három szolgáltatás tartozik bele. Ezek a keresés, a cache-elt oldalak elérése, illetve a helyesírás ellenőrző (google.com -ról ismert Did you mean dolog). Ahhoz, hogy igénybe vehessük az api-t, először regisztrálnunk kell magunknak egy google accountot, majd igényelni kell egy licence [...]]]></description>
			<content:encoded><![CDATA[<p>Az egyik legegyszerűbb a google által kínált api-k közül a web api. Ebbe a felületbe három szolgáltatás tartozik bele. Ezek a keresés, a cache-elt oldalak elérése, illetve a helyesírás ellenőrző (google.com -ról ismert Did you mean dolog). Ahhoz, hogy igénybe vehessük az api-t, először regisztrálnunk kell magunknak egy google accountot, majd igényelni kell egy licence key-t. Ezzel a kulccsal napi 1000 kérést hajthatunk végre. </p>
<span id="more-45"></span>
<p>A szolgáltatások elérése SOAP-al történik. Java illetve .NET nyelvekhez példaprogramokat is letölthetünk, illetve az osztálykönyvtárakat is a könnyebb eléréshez.
Php-ben a beépített SOAP kiterjesztés áll a rendelkezésünkre. Ahhoz, hogy el is érjük ezt a kiterjesztést, linuxon az --enable-soap kapcsolót kell használni, illetve a php.ini-ben szerepeltetni kell az extension-oknál.
Első dolgunk, hogy példányosítunk egy SOAP klienst.</p>
<pre class="code prettyprint lang-php">
$client = new SoapClient('http://api.google.com/GoogleSearch.wsdl');

</pre>
<p>A kliensnek kezdésként meg kell adnunk a web szolgáltatást leíró fájl címét. Ebből fogja "tudni", hogy milyen szolgáltatások, milyen függvények hívhatók meg és azokra mit kell visszakapnia.</p>
<p>A példányosítás után már elég könnyű dolgunk van, csak a megfelelő függvényeket kell meghívnunk a kliensen keresztül. A visszatérési érték mindhárom esetben más típusú.<br/>
A helyesírás ellenőrző:</p>
<pre class="code prettyprint lang-php">try
{
	$params = array(
		'key' 		=&gt; '',		# licence key					
		'phrase' 	=&gt; 'deadlime'	# kifejezés
	);
	$response = $client-&gt;__soapCall('doSpellingSuggestion', $params);

	# mivel wsdl módban vagyunk, ezért akár közvetlenül is meghívhatnánk a függvényt
	//$response = $client-&gt;doSpellingSuggestion(...);
}
catch(Exception $e)
{
	die($e-&gt;getMessage());
}
</pre>
<p>A <code>$response</code> string típusú, ami vagy üres vagy a felajánlott szót tartalmazza. Magyar szavakra sajnos nem működik. Közvetlen hívás esetén a <code>$params</code> tömb helyett "normál" paraméterezéssel kell megadnunk az adatokat.<br/>
A cache-elt oldal:</p>
<pre class="code prettyprint lang-php">try
{
	$params = array(
		'key' =&gt; '', 				# licence key
		'url' =&gt; 'http://www.deadlime.hu'	# az oldal címe, amiről a google által tároltat szeretnénk megkapni
	);
	$response = $client-&gt;__soapCall('doGetCachedPage', $params);
	$response = base64_decode($response);
}
catch(Exception $e)
{
	die($e-&gt;getMessage());
}
</pre>
<p>A cache-elt oldalt base64-ben kódolt szövegként kapjuk meg.<br/>
A keresés:</p>
<pre class="code prettyprint lang-php">try
{
	$params = array(
		'key' 		=&gt; '',  	# licence key
		'q' 		=&gt; 'deadlime',	# keresési kifejezés
		'start' 	=&gt; 0,		# melyik elemtől kezdve adja vissza a találatokat
		'maxResults' 	=&gt; 10,		# mennyi találatot adjon vissza
		'filter' 	=&gt; true,	# eredmény szűrése
		'restrict' 	=&gt; 'countryHU',	# megkötések
		'safeSearch' 	=&gt; false,	# felnőtt tartalmak szűrése
		'lr' 		=&gt; 'lang_hu',	# nyelvi megszorítások
		'ie'		=&gt; '',		# bemeneti karakterkódolás (alapértelmezett: UTF-8)
		'oe'		=&gt; ''		# kimeneti karakterkódolás (alapértelmezett: UTF-8)
	); 
	$response = $client-&gt;__soapCall('doGoogleSearch', $params);
}
catch(Exception $e)
{
	die($e-&gt;getMessage());
}
</pre>
<p>A <code>$response</code> ebben az esetben egy objektum, benne minden fontos adattal. A "filter" illetve a "restrict" sor elsőre valószínűleg nem egyértelmü. A "filter" bekapcsolásával a duplikált találatokat lehet kiszürni. A "restrict" értékéül egy kifejezést adhatunk. Ebben a kifejezésben megadhatjuk, hogy mely oszrágokra, illetve mely témakörökre korlátozzuk a keresést.</p>

<h3>Kapcsolódó linkek:</h3>
<ul>
	<li><a href="https://www.google.com/accounts/NewAccount">Google Account</a></li>
	<li><a href="http://www.google.com/apis/">Google Licence Key</a></li>
	<li><a href="http://php.net/soap">php.net/SOAP</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://deadlime.hu/2006/05/14/google-web-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

