Přejít k navigační liště

Zdroják » Různé » YQL: „select * from internet“

YQL: „select * from internet“

Články Různé, Webdesign

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.

Komentáře

Subscribe
Upozornit na
guest
23 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Bauer

Zdravím, jen jsem chtěl poděkovat za zajímavý článek, o tomhle jsem
neměl ani ponětí – díky

Ventil

Tak toto vypadá rozhodně zajímavě, jsem zvědav jestli se to chytne a
pokud ano, tak zda se to časem i decentralizuje (tak aby zde Yahoo nehrál
problém úzkého hrdla) pak by to bylo určitě super.

blizz.boz

tak toto určite vyskúšam.

blizz.boz

a inak dík za zaujímavý článok.

Sten

Nezapomeň zapnout pornofiltr, jinak ten výsledek nevydrží tvoje připojení :)

Messa

Tady něco nehraje… Zatímco Google strhává nálepky „beta“ a
ukončuje některé projekty, Yahoo vymýšlí nové věci :-)

Martin Michálek

Díky za představení pro mě nové technologie.

Doporučuji i další práci Yahoo – poslední dny trávím studiem
zajímavého CSS frameworku „YUI CSS Foundation“, pro ladění rychlosti
načítání webu je zase neprostradatelné rozšíření Firebugu
„YSlow“.

S vývojářským přínosem Google bych si Yahoo netroufl srovnávat,
každý je zaměřený trochu jinak. Aktivity Yahoo jsou jen u nás
pochopitelně výrazně méně známé.

Ja.

Si predstavte taký YQL-injection :D

Ruthion

DELETE FROM spam WHERE all=true

SurkovskyM

jo to by bylo super :D, kazdopadne velmi zajmavy clanek.

Ja.

TRUNCATE spam; GRANT USAGE ON spam TO %@%;

blizz.boz

Btw prečo mám na výstupe vždy len 10 výsledkov? dá sa to nejako
zmeniť?

blizz.boz

ďakujem, toto som presne potreboval

Borek Bernard

Hezká technologie, díky za článek!

Michal Blaha

Dik za tip. Dev projektu Yahoo je hooodne a vetsina z nich jsou velmi
zajimave a velmi kvalitni. Ale toto jsem neznal.

YQL je hodne webove. LINQ z .NET 3.0+ umoznuje podobne veci. Je rozsiritelny,
takze zacali hned po uverejneni vznikat providery nejen na jine DB a datove
zdroje, ale i web sluzby (Google Search, Flickr, Picassa, Amazon,
Twitter, …..)

Par vzajemne se prekryvajicich seznamu je k nalezeni zde:

http://www.c-sharpcorner.com/…gDetail.aspx?…

http://www.sheltonblog.com/…oviders.aspx

http://www.codeplex.com/site/search?…

Zvlaste pro .NET programatory je to casto snadnejsi a flexibilnejsi
zpusob tehoz

Michal Blaha

YQL je webove, coz je vyhodou i nevyhodou. Pokud bych chtel neco jako YQL se serveru (z libovolneho duvodu), mam problem. Proto jsem zminil LINQ, ktery muze byt pro nekoho vhodna – funkcne pribuzna – zalezitost.

Borek Bernard

Musíme si počkat na Linq to YQL :)

Michal Augustýn

Porovnávat YQL a LINQ mi přijde jako porovnávat hrušky a ovoce. Mnohem výstižnější by IMHO bylo srovnání YQL a ADO.NET Data Services.

blizz.boz

už som túto technológiu nasadil na http://ipremi­ere.eu/ ako fulltextový vyhľadávač (funguje podobne ako Google Site Search akurát podporuje viac search enginov)

juzna

Vypada to dosti zajimave, napadaji me ale 2 nedostatky zabranujici sirokemu rozsireni:

1/ prilis mnoho top-level tabulek – kdyz si kazda organizace prida vlastni tabulku, tak se v tom uz nikdo nevyzna. Mohlo to byt treba rozdelene jeste podle TLD domen, takze treba „select * from com.google.buz­z…..“ aby vznikla aspon trosku hierarchie a ne anarchie.

2/ decentralizovane vyhledani tabulek, napriklad pres DNS (zaznamy NAPTR nebo TEXT nebo tak neco). U dotazu „select * from cz.mojedomena­.sluzba.neco“ by se mohlo pomoci DNS zjistit odkaz na ten xml definition soubor, aby nemusela existovat centralni databaze.

Jinak to vypada, ze by nemusel byt problem, mit vice poskytovatelu YQL serveru. Pripadne by to mohli uvolnit a kazdy by si pak mohl udelat vlastni YQL server. Bud s vlastni databazi tabulek, nebo by si pomoci DNS vyhledavaly potrebne definice. To by pak bylo dobre pouzitelne!

Pišta

Ahoj, super článok, zaujal ma, ale neviem si rady s tým, že mi to vráti vždy iba 4 výsledky, neviem prečo, napr:
select url from google.search(10) where q=„tvorba www stránek“ and gl=„cs“ and hl=„cs“
no a toto vždy vráti iba 4 výsledky. To je jeden problém a druhý problém je, či by sa nedalo zistiť, koľko výsledkov našlo, napr. na tvorba www stránek mám 3 320 000 výsledkov, dá sa to niekde z toho JSONu vyčítať ?
Díky moc ;-)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.