YQL: „select * from internet“

YQL

Využití dat z webové služby znamená nutnost prostudovat její API. Líbilo by se vám místo toho napsat třeba „select * from flickr“? Dnes se podíváme na zajímavou technologii od Yahoo, která umožňuje přistupovat k různým webovým službám a získávat z nich data pomocí jazyka, založeného na syntaxi SQL.

Yahoo je v ČR, trochu neprávem, opomíjené a jeho aktivity stojí ve stínu Googlu. Což je škoda, protože Yahoo má rozhodně co nabídnout. Mnohým webovým vývojářům bude jistě povědomý framework YUI (Yahoo User Interface), který inspiroval vznik ExtJS. Ostatně stačí jeden pohled na stránky vývojářské komunity, aby bylo jasné, že Yahoo to myslí s vývojem a podporou webových technologií a open-source vážně.

V tomto článku se podíváme na novinku od Yahoo, nazvanou YQL (Yahoo Query Language). Pokud vám název připomíná SQL, jste na správné stopě. YQL je dotazovací jazyk se syntaxí podobnou SQL, který umožňuje vyhledávat, filtrovat a spojovat data napříč webovými službami.

V současnosti zpřístupňují poskytovatelé svá data ostatním službám přes rozhraní typu „webová služba“, nejčastěji založených na REST, XML-RPC či SOAP. Pokud chce vývojář k těmto datům přistupovat, neobejde se to bez hledání správných URL, které je třeba volat, a studia formátu volání, a to pro každou službu zvlášť. YQL je pokusem, jak vnést do tohoto chaotického světa řád (může se ovšem snadno stát, že zapadne a jen zvýší existující chaos). Autoři sází pravděpodobně na to, že základní syntaxe SQL je známá velké části programátorů webových aplikací, a proto by mohl být jazyk YQL relativně dobře přijatý. K tomu by mohly jistě přispět i Open Data Tables, o nichž se rovněž zmíníme.

Rovnýma nohama…

Pojďme se rovnou podívat, co YQL umí a jak jej používat. Yahoo nabízí k otestování YQL konzoli. V ní si můžeme zkoušet YQL příkazy a vidíme rovnou výsledky. K dispozici je i sada přednastavených dotazů, na nichž si můžeme ukázat některé základní operace.

YQL console

V horním levém rohu je prostor na dotaz (na screenshotu je vidět hledání posledních deseti obrázků koček na Flickru). Vedle něho je URL, které je potřeba zavolat (je ve tvaru http://query.yahooapis.com/v1/public/yql?q=YQL-dotaz). Pod tím je v levém dolním rohu prostor pro výsledky. Konzole je umí zobrazit buď jako surová data, nebo jako formátovaný strom. Při volání dotazu je rovněž možné určit, zda chceme výsledek jako XML data, nebo předpřipravené coby serializovaný objekt pro JavaScript (JSON).

Vpravo pak máme k dispozici selectboxy s posledními a předpřipravenými dotazy, a pod nimi seznam dostupných databází a tabulek. Kromě interních tabulek a již zmiňovaného Flickru je mezi nimi mnoho dalších služeb, jako jsou Yahoo Search, Weather, Music, Geo, MyBlogLog a další. Na dalším screenshotu uvidíte, jak vypadá takový výsledek pro hledání v databázi Music.

YQL - hledání v databázi Music

U Yahoo to nekončí

Snad každý vývojář se v tomto okamžiku zarazí a řekne si: „To je sice hezké, ale je to omezené na Yahoo, a to je docela nanic“. Naštěstí to není tak úplně pravda. Yahoo je jasné, že kdyby bylo YQL omezeno pouze na jejich služby, nemělo by šanci uspět. Proto otevřelo přístup i dalším službám. Technologie, která to umožňuje, se nazývá Open Data Tables.

Pomocí Open Data Tables je možné nadefinovat „vazbu“ mezi obecným poskytovatelem dat a YQL. Open Datatable je XML soubor, který je možno „přidat“ do YQL a který popisuje „mapování“ YQL dotazu na volání API webové služby. Tyto „datatable soubory“ lze poskytnout k dispozici ostatním uživatelům, kteří je mohou využít při volání YQL.

Seznam Open Data Tables uvidíte v konzoli po kliknutí na „Show Community Tables“ nad seznamem databází. V tuto chvíli obsahuje 151 tabulek, mezi nimiž jsou služby jako třeba WordPress, Microsoft Bing, Open Social, Facebook, Delicious, Google search, IMDB, Last.fm, Google Reader či Twitter. Všechny jsou k dispozici na jednom místě, ke všem lze přistupovat jednotně a k přístupu lze použít jazyk se syntaxí, která je vývojářům důvěrně známá. To zní už líp, ne?

Pomocí YQL můžeme snadno položit např. dotaz na určitou IP adresu – select * from ip.location where ip='212.158.147.136' . Můžeme se zeptat, co ví Google o Zdrojáku – select * from google.search where q='zdrojak'. Můžeme se podívat na data o kanálu Zdrojáku na Twitteru: select * from twitter.user.profile where id="zdrojak".

Ke zjištění možností konkrétní tabulky slouží příkaz desc – např. desc twitter.user.timeline. Výsledkem je popis jednotlivých sloupců tabulky, obdobně jako u standardního SQL.

Spojování a filtrování dat

Filtrovat lze data, jak jsme si už ukázali, pomocí klauzule WHERE, stejně jako v SQL. Podmínky v klauzuli WHERE lze spojovat pomocí AND a OR, lze použít operátory LIKE, MATCHES či IN. Lze tedy psát dotazy jakoselect * from flickr.photos.interestingness where title like
'Chinese%'
či select * from flickr.photos.interestingness where title matches '.*blue.*' .

Ve filtru můžeme použít poddotaz (subquery) – jako například v dotazu select * from social.profile where guid in (select guid from social.connections where owner_guid=me) či poněkud spektakulárněji, jako v dotazu select * from local.search where (latitude,longitude) in (select centroid.latitude, centroid.longitude from geo.places where text="north beach, san francisco") and radius=100 and query="pizza" (aneb najděte mi pizzerii poblíž North Beach v SF – můžete se přesvědčit, že to funguje). Subquery může obsahovat další subqueries a hledání tak může být opravdu komplexní (s jistými omezeními, např. nelze použít dva subquery na jedné úrovni dotazu).

YQL nabízí možnost omezit počet vrácených záznamů a určit číslo prvního záznamu (tedy obdobu známé klauzule LIMIT z MySQL). Programátor může pomocí syntaxe odlišit, zda má YQL engine rovnou žádat o omezené množství dat, nebo zda má načíst všechna a ta pak vyfiltrovat.

Ke každému správnému dotazovacímu jazyku patří možnost řadit data či z nich vybírat jen určitou část. YQL k tomu nabízí několik funkcí, jako je sort() či reverse(). Milá je funkce sanitize(), která ošetří data tak, aby bylo možné je přímo zapsat do HTML.

Jen SELECT?

Kdyby YQL uměl jen SELECT a DESC, byl by možná užitečný, ale jeho přirovnání k SQL by kulhalo na obě nohy. Naštěstí je v YQL k dispozici i trojice standardních příkazů INSERT, UPDATE a DELETE (YQL je nazývá I/U/D příkazy). Tyto příkazy umožňují pracovat s daty v tabulkách, vkládat záznamy, měnit je a mazat. Podobné operace však vyžadují autorizaci (založena na protokolu OAuth), jejíž popis už překračuje rámec tohoto seznamovacího článku. Zájemce proto odkážu na YQL Guide, v němž naleznou všechny potřebné informace. I/U/D příkazy lze samosebou volat odpovídajícími HTTP metodami PUT, POST a DELETE. YQL tak podporuje rozhraní typu REST.

Kompletní seznam příkazů je k dispozici v YQL Guide. Zmínili jsme všechny, kromě SHOW TABLES a USE. YQL nabízí rovněž další vlastnosti, které weboví vývojáři jistě ocení, například podporu JavaScriptu, která jde tak daleko, že umožňuje spouštět funkce napsané v JavaScriptu v rámci Open Data Tables.

Jak to lze použít?

Použití YQL je opravdu jednoduché. Jak již bylo zmíněno, používá YQL metody známé z protokolu REST, takže k získání dat stačí provést HTTP GET požadavek na určité URL. K požadavku lze přidat několik parametrů, které určují formát výsledku.

Zájemcům o YQL doporučuji pročíst si průvodce YQL (YQL Guide). YQL není nijak složité a člověku, který zná syntaxi SQL, stačí k pochopení zběžné pročtení. Programátoři si mohou pročíst návod, kde se seznámí s tím, jak volat YQL z PHP či jak pokládat dotazy z JavaScriptu. Můžete se rovněž podívat na webcast o YQL od vydavatelství O’Reilly.

Závěrem

YQL je rozhodně zajímavým počinem na poli webových služeb. Slogan, pod nímž ho Yahoo propaguje, tedy „ select * from internet“, rozhodně není daleko od reality, a to především díky tomu, že je YQL otevřené, a datové zdroje pro další služby tak mohou přidávat vývojáři třetích stran. Na druhou stranu přináší YQL do komunikace server – poskytovatel dat další mezivrstvu, což představuje možné úzké místo (např. při výpadku služeb Yahoo).

Zatím je příliš brzo na to, abychom mohli říct, zda se YQL uchytí nebo ne. Vývoj se sice ubírá podobným směrem, ale to, jestli se YQL stane novým standardem, slepou uličkou nebo milníkem, se teprve ukáže.

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 23

Přehled komentářů

Bauer děkuji
Ventil Wow...
blizz.boz Re: YQL: "select * from internet"
blizz.boz Re: YQL: "select * from internet"
Sten Re: YQL: "select * from internet"
Messa Google a Yahoo
Martin Michálek Yahoo pro vývojáře
Ja. nápad
Ruthion Re: YQL: "select * from internet"
SurkovskyM Re: YQL: "select * from internet"
Ja. Re: YQL: "select * from internet"
blizz.boz len 10 výsledkov
Martin Malý Re: len 10 výsledkov
blizz.boz Re: len 10 výsledkov
Borek Bernard Hezké
Michal Blaha LINQ
Martin Malý Re: LINQ
Michal Blaha Re: LINQ
Borek Bernard Re: LINQ
Michal Augustýn Re: LINQ
blizz.boz fulltextový vyhľadávač
juzna vetsi rozsiritelnost
Pišta google.search
Zdroj: https://www.zdrojak.cz/?p=3054