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