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.

Először is, vadásznunk kell magunknak 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 file_get_contents() függvényt, ha engedélyezve van a php.ini-ben az allow_url_fopen vagy pedig használhatjuk az fsockopen() függvényt is, ha lehetőségünk van rá.

No, csapjunk a lecsóba, nézzünk egy kis kódot, amivel megkaphatjuk egy keresés eredményét XML formátumban:

header('Content-Type: text/xml');

$app_id = 'ide jön az application id';

$service = array(
	'image' => 'http://api.search.yahoo.com/ImageSearchService/V1/imageSearch',
	'local' => 'http://api.local.yahoo.com/LocalSearchService/V1/localSearch',
	'news' => 'http://api.search.yahoo.com/NewsSearchService/V1/newsSearch',
	'video' => 'http://api.search.yahoo.com/VideoSearchService/V1/videoSearch',
	'web' => 'http://api.search.yahoo.com/WebSearchService/V1/webSearch'
);

$conn = curl_init($service['web'].'?appid='.$app_id.'&query=deadlime');
curl_setopt($conn, CURLOPT_HEADER, false);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($conn);
curl_close($conn);
 
echo $xml;

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:

appid
Az application id, amit kaptál.
query
A lekérés szövege, érdemes lefuttatni rajta egy urlencode() vagy rawurlencode() függvényt.
zip
Zipcode, csak a Local Search szolgáltatásnál használható.
start
Ezzel lehet megadni, hogy hányadik elemtől mutassa a találatokat.

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ő:

<ResultSet xsi:schemaLocation="urn:yahoo:srch http://api.search.yahoo.com/WebSearchService/V1/WebSearchResponse.xsd" totalResultsAvailable="" totalResultsReturned="" firstResultPosition="">
	<Result>
		<Title></Title>
		<Summary></Summary>
		<Url></Url>
		<ClickUrl></ClickUrl>
		<ModificationDate></ModificationDate>
		<MimeType></MimeType>
		<Cache>
			<Url></Url>
			<Size></Size>
		</Cache>
	</Result>
</ResultSet>

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... :)