690 likes | 870 Views
Yahoo! Query Language ( Web Service). Peter Pij ák Róbert Šišaj 15.12.2009. Osnova. Jazyk Yahoo! Query Language konštrukcie zdroje dát Yahoo! Query Language Web Service použitie prístup. Motivácia - Čo je YQL WS?. Internet mnoho služieb rôzne rozhrania
E N D
Yahoo! Query Language(Web Service) • Peter Piják • Róbert Šišaj • 15.12.2009
Osnova • Jazyk Yahoo! Query Language • konštrukcie • zdroje dát • Yahoo! Query Language Web Service • použitie • prístup
Motivácia - Čo je YQL WS? • Internet • mnoho služieb • rôzne rozhrania • Yahoo! Query Language Web Service (YQL WS) • sprístupniť dáta služieb Yahoo! a iných z Internetu • jedno rozhranie • Jazyk YQL • jednoduchá syntax SQL • Demonštratívny dotaz • SELECT * FROM internet (…)
Možnosti YQL WS • Preddefinované tabuľky • Yahoo! osobný účet • Yahoo! služby a siete: Search, Flickr, Social, MyBlogLog • Tabuľky rozšíriteľné • Open Data tables • ľubovoľná iná služba • Formát • vstup: HTML, XML, JSON, RSS, Atom • výstup: XML, JSON (JavaScript Object Notation)
Ukážkový dotaz • Dotaz • SELECT givenName, familyNameFROM social.profile WHERE guid=me • Výsledok • <results><profile xmlns=…> <givenName>Peter</givenName><familyName>Piják</familyName></profile></results>
Prístup k YQL WS • YQL Console • interaktívne prostredie • http://developer.yahoo.com/yql/console • HTTP dotaz • http://query.yahooapis.com/v1/public/yql?q=SELECT * FROM social.profile WHERE guid=me • Yahoo! PHP SDK • webové aplikácie
Prístup cez YQL Console • http://developer.yahoo.com/yql/console • Dotazy • vloženie, výsledok, predchádzajúce dotazy • prevod na http dotaz • Zoznam tabuliek • Príklady dotazov
Prístup cez HTTP • Príklad • SELECT * FROM geo.places WHERE text=“prague“ • http://query.yahooapis.com/v1/ public/yql?q=select * from geo.places where text=%22prague%22
Prístup cez HTTP • Adresy URL podľa potreby autorizácie • http://query.yahooapis.com/v1/public/yql?[query] • http://query.yahooapis.com/v1/yql?[query] • pre tabuľky vyžadujúce autentifikáciu • Parametre [query] • príklad: q=[yql_query]&format=xml
Prístup cez HTTP • HTTP protokol • dotaz: • GET / HTTP/1.1Host: www.cuni.cz • definovaných 8 metód: • HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT • Pre dotaz v YQL • SELECT dotaz používa GET • INSERT –– PUT • UPDATE –– POST • DELETE –– DELETE
Yahoo! PHP SDK • Knižnica PHP od Yahoo! • trieda YahooSession, pre YQL dotaz metóda query <?php require("Yahoo.inc"); $session = YahooSession::requireSession (USER_KEY, USER_SECRET, APPLICATION_ID);$query = sprintf(“SELECT * FROM geo.places WHERE text='ballard';“);$response = $session->query($query);print_r($response);?>
Nesprávny dotaz • Syntakticky alebo sémanticky nesprávny dotaz • SELECT * FROMm social.profile WHERE guid=me • <error xmlns:yahoo=... > <description>Syntax error(s) [line 1:9 missing FROM at 'FROMm'] </description></error> • SELECT * FROM abc • <error xmlns:yahoo=... ><description>No definition found for Table abc</description></error>
SELECT • Dáta z YQL tabuliek alebo web. služieb • Syntax • SELECT cols FROM table WHERE filter [| function] • cols –– polia / stĺpce na výstup • table –– YQL tabuľka • filter –– filtrovanie záznamov • function –– funkcia upravujúca poradie (sort) • Pozn.: nezáleží na veľkosti písmen • Vracia dáta v XML alebo JSON formáte • riadok –– XML element / JSON objekt • stĺpec –– podelement / podobjekt
SELECT, vstupné polia • Čiarkou oddelené polia (stĺpce) alebo hviezdička • SELECT * FROM social.profile WHERE guid=me • <profile ...>... <birthdate>...</birthdate>... <givenName>Peter</givenName>... <image> <imageUrl>...</imageUrl><size>...</size> </image>... <location>Zilina, Zilinsky</location>... <status>...</status></profile>
SELECT, vstupné polia • Prístup k podelementom bodkou • z elementu image iba imageUrl • SELECT givenName, image.imageUrlFROM social.profile WHERE guid=me • <profile ...> <givenName>Peter</givenName> <image> <imageUrl>http:...</imageUrl> </image></profile>
Filtrovanie záznamov • Dotaz • SELECT * FROM flickr.photos.searchWHERE text='Barcelona' • Typy filtrov • vzdialené • lokálne
Vzdialené filtrovanie • YQL WS • preloží podmienku do tvaru vzdialenej služby • Filtrovanie záznamov vo vzdialenej službe • dotaz v tvare • input_key=literal • alebo kombinácia OR • Príklad • SELECT * FROM flickr.photos.infoWHERE photo_id='2186714153' • preklad na: • http://api.flickr.com/services/rest/?method=flickr.photos.get-Info&photo_id='2186714153'
Vzdialené filtrovanie, príklad • Vyhľadávanie cez Yahoo! Search • Dotaz • SELECT url FROM search.webWHERE query='univerzita praha' • http://query.yahooapis.com/v1/public/yql?q=select%20url%20from%20search.web%20where%20query%3D'univerzita%20praha'
Lokálne filtrovanie • YQL WS preberá všetky dáta, filtruje ich • Príklad • SELECT * FROM search.webWHERE query='univerzita praha'AND title LIKE '%metr%' • query –– vzdialene • title –– lokálne • Syntax: • field comp_operator literal • operátory: =, !=, >, <, >=, <=,IN (values), [NOT] LIKE (pattern), [NOT] MATCHES (pattern), IS [NOT] NULL • alebo kombinácia AND a OR
Spájanie tabuliek • Spojenie rôznych tabuliek / rôznych služieb • Pomocou zhodnosti hodnôt • Spojenie – operátor IN a sub-dotaz • Dotaz • SELECT * FROM search.webWHERE queryIN(SELECT title FROM rss WHERE url="http://rss.news.yahoo.com/rss/topstories" | truncate(count=1))
Spájanie tabuliek • Vnútorný dotaz • SELECT title FROM rssWHERE url= "..."| truncate(count=1) • <item><title>Senate to vote on $1.1 trillion spending bill</title></item> • Celkový výsledok • <results> <result xmlns="..."><title> <![CDATA[FOXNews.com - <b>Senate</b> Poised to Advance $1.1T <b>Spending</b> <b>Bill</b>]]> </title></result> <result ... /></results>
Spájanie tabuliek, viacnásobný kľúč • Vnútorný dotaz • SELECT * FROM local.search WHERE (latitude,longitude) IN (SELECT centroid.latitude, centroid.longitude FROM geo.places WHERE text="north beach, san francisco" ) AND radius=1 AND query="pizza"
Spájanie tabuliek, viac subdotazov • Vnorenie subdotazov, povolené • SELECT * FROM search.siteexplorer.pagesWHERE query IN (SELECT url FROM search.web WHERE query IN (SELECT Artist.name FROM music.release.popular LIMIT 1) LIMIT 1) • Viacnásobné subdotazy s operátorom IN nepovolené • SELECT * FROM flickr.photos.searchWHERE lat IN (SELECT centroid.latitude FROM geo.places WHERE text="sfo") AND lon IN (SELECT centroid.longitude FROM geo.places WHERE text="sfo") • Only a single subselect with a key field is allowed in a branch.
SELECT, obmedzenie kapacity dát • Obmedzenia • Maximálny počet vrátených riadkov 5000 • Maximálny výpočtový čas 30 sekúnd • Obmedzenia vzdialenej služby • obmedzenia za tabuľkou:SELECT columns FROM table [([offset, ]count)] • count – počet, offset – začiatočný záznam • SELECT title FROM search.web (10, 30)WHERE query="pizza" • predvolené (0, 10) • bez obmedzenia (0)
SELECT, obmedzenie kapacity dát • Obmedzenia YQL WS služby • SELECT columns FROM tableWHERE condition[LIMIT limit [OFFSET offset]] • predvolené LIMIT 10, OFFSET 0 • Obmedzenia vzdialenej služby a lokálnej služby je možné kombinovať
Triediace a iné funkcie • Syntax • SELECT columns FROM table (| function)* • Príklad: • SELECT name, centroid.latitudeFROM geo.placesWHERE text="victoria"| SORT (field='centroid.latitude') • <place><name>Victoria</name><centroid><latitude>36.558651</...></...></place><place><name>Vitoria</name><centroid><latitude>20.294210</...></...></place>
Triediace a iné funkcie • Syntax • SELECT columns FROM table (| function)* • sanitize - prevedie znaky na HTML entity
Extrahovanie HTML obsahu • Obsah web. stránky • SELECT * FROM htmlWHERE url="http://www.mff.cuni.cz“ • <results><body lang="en"><div id="outer"><a id="top" name="top"/><div id="contain-all"> <div id="logo"><img alt=““ src="..."/> ...</body></results>
Extrahovanie HTML obsahu, XPath • Extrahovanie pomocou XPath • SELECT * FROM htmlWHERE url="http://www.mff.cuni.cz“ANDxpath='//h1[@id="faculty"]' • <results><h1 id="faculty">Faculty of Mathematics and Physics</h1></results>
Nápoveda k tabuľke • Dotaz • DESC table_name • Príklad • DESC html • <table name="html" security="ANY"> <meta> <sampleQuery>select * from html where url="http://finance.yahoo.com/q?s=yhoo" and xpath='//div[@id="yfi_headlines"]/div[2]/ul/li/a' </sampleQuery> </meta> <request> <select> <key name="browser" type="xs:boolean"/> <key name="charset" type="xs:string"/> <key name="url" required="true" type="xs:string"/> <key default="/html/body" name="xpath" type="xs:string"/> </select> </request></table>
I/U/D dotazy • I/U/D –– INSERT, UPDATE, DELETE • Ale • nie je možné pri každej tabuľke • nutná autentifikácia
INSERT • Syntax • INSERT INTO (table) (list_of_columns)VALUES (list_of_values) • Príklad • ... (vysvetlené neskôr)INSERT INTO bitly.shorten(login, apiKey, longUrl)VALUES('YOUR_LOGIN', 'YOUR_API_KEY','http://yahoo.com')
DELETE • Syntax • DELETE FROM table_name WHERE filter • Príklad • DELETE FROM twittertableWHERE tweetid="12345"AND username="twitter_username" AND password="twitter_password"
UPDATE • Syntax • UPDATE table SET field = value WHERE filter • Príklad • UPDATE social.profile.statusSET status="Prednáška"WHERE guid=me • http://profiles.yahoo.com
Open Data Tables • Definícia ODT • Sprístupnenie ODT v YQL • Nastavenie kľúčových hodnôt pre ODT • Zabezpečenie ODT a kontrola prístupu • Dávkové spracovanie volaní • Debuggovanie ODT a YQL
Definícia ODT • ODT je definovaná pomocou XML súboru • root element <table> obsahuje atribúty • xmlns - odkaz na XML schému • securityLevel - určuje autorizáciu potrebnú pre prístup • východzia hodnota 'any' - anonymný prístup (bez obmedzenia) • https - ak je true, tabuľka je prístupná len cez HTTPS, v opačnom prípade je prístupná cez HTTP i HTTPS • ak tabuľka vyžaduje citlivé údaje (heslo, autentifikačný kľúč, ...), je HTTPS nutnosťou • <meta> element poskytuje doplňujúce informácie k tabuľke • sampleQuery - vzorový dotaz (1 alebo viac) • description • author
Definícia ODT • element select (insert, update, delete) • nachádzajú sa v elemente <bindings>, definujú prístup k zdrojom z externých webových služieb • element <select> definuje, ako má YQL čítať dáta z WS • itemPath - definuje 'riadok' tabuľky, opakujúci sa element v odpovedi z API, používa sa '.' notácia • feed.entry, root.station • JSON na rozdiel od XML nemá root element, preto YQL vytvorí 'pseudo' root element nazvaný 'json' • produces - typ dát z WS • <url> element označuje zdroj, odkiaľ YQL čerpá dáta pre tabuľku • <key> element - označuje pomenovaný kľúč, ktorý YQL berie z klauzule WHERE (pri SELECTe) a doplní ho do URL - až potom odošle požiadavok do WS
Definícia ODT - príklad • <?xml version="1.0" encoding="UTF-8"?> • <table xmlns="http://query.yahooapis.com/v1/schema/table.xsd"> • <meta> • <author>You</author> • <documentationURL>None</documentationURL> • <description>Uses the Google Base feed search</description> • <sampleQuery>SELECT * FROM {table} WHERE brand = "Canon"</sampleQuery> • </meta> • <bindings> • <select itemPath="feed.entry" produces="XML"> • <urls> • <url>http://www.google.com/base/feeds/snippets</url> • </urls> • <inputs> • <key id="bq" type="xs:string" paramType="query"/> • </inputs> • </select> • </bindings> • </table>
Definícia ODT - príklad • odkaz na popis schémy tabuľky <?xml version="1.0" encoding="UTF-8"?> <table xmlns="http://query.yahooapis.com/v1/schema/table.xsd"> • meta informácie <meta> <author>You</author> <documentationURL>None</documentationURL> <description>Uses the Google Base feed search</description> • vzorový dotaz • {table} zastupuje názov tabuľky, vzorový odkaz bude fungovať aj keď si užívateľ tabuľku premenuje <sampleQuery>SELECT * FROM {table} WHERE brand = "Canon" </sampleQuery> </meta>
Definícia ODT - príklad • definícia zdrojových dát pre tabuľku <bindings> <select itemPath="feed.entry" produces="XML"> • zdrojová webová služba <urls> <url>http://www.google.com/base/feeds/snippets</url> </urls> • definícia kľúča, ktorým možno preniesť hodnotu z WHERE klauzule SELECTu až do zdrojovej URL <inputs> <key id="bq" type="xs:string" paramType="query"/> </inputs> </select> </bindings> </table>
Definícia ODT - príklad • Dotaz s použitím kľúča SELECT title,price,brand FROM {table} WHERE bq = "digital+camera" AND brand LIKE "%Canon%" • YQL použije kľúč pri získavaní dát z webovej služby http://www.google.com/base/feeds/snippets?bq=digital+camera • Výsledné dáta spracuje a vráti len výsledky, kde element brand obsahuje podslovo Canon <entry> <title type="text">Canon EOS 5D Mark II Digital Camera (Body only)</title> <g:price type="floatUnit">2699.95 usd</g:price> <g:brand type="text">Canon</g:brand> </entry>
Sprístupnenie ODT v YQL • Príkaz USE importuje definíciu ODT USE 'http://myserver.com/mytables.xml' AS mytable; • Ak vynecháme kľúčové slovo AS, YQL použije názov súboru (bez .xml prípony) na pomenovanie tabuľky • Definícia tabuľky musí odpovedať schéme • http://query.yahooapis.com/v1/schema/table.xsd • Následne sa môžeme dotazovať SELECT * FROM mytable WHERE... • Vhodné sprístupniť potrebné ODT v súbore s príponou .env http://developer.yahoo.com/yql/console/?env=http://datatables.org/alltables.env • typicky obsahuje príkazy USE a SET
Nastavenie kľúčových hodnôt pre ODT • Dôležité kľúče (password, API kľúč, ...) je možné nastaviť nezávisle od YQL príkazov (tieto kľúče musí ODT definovať) SELECT * FROM guardian.content.search WHERE api_key="1234567890" AND q='environment' • Nastavenie kľúča api_key: SET api_key="1234567890" ON guardian; SELECT * FROM guardian.content.search WHERE query="environment"
Nastavenie kľúčových hodnôt pre ODT • Explicitne uvedená kľúčová hodnota v YQL príkaze má prednosť pred hodnotou nastavenou pomocou SET • Ak je hodnota nastavená viackrát, prednosť má najviac upresňujúca definícia – merané dĺžkou prefixu tabuľky • Ak je hodnota nastavená viackrát rovnako upresňujúcou definíciou, použije sa posledná definícia
Nastavenie kľúčových hodnôt pre ODT • Príklad súboru .env USE "http://www.ms.mff.cuni.cz/~sisar4am/bart.xml" AS bart_table; USE "http://www.ms.mff.cuni.cz/~sisar4am/google.xml" AS google_base_table; SET bq="digital+camera" ON google_base_table;
Príklad I • Dotaz s využitím prednastaveného kľúča pomocou SET http://query.yahooapis.com/v1/public/yql?env=http://www.ms.mff.cuni.cz/~sisar4am/my.env&q=SELECT title,brand,target_country,price FROM google_base_table&format=xml • Výsledok <diagnostics> ... <url execution-time="235" proxy="DEFAULT"> http://www.google.com/base/feeds/snippets?bq=digital%2bcamera</url> ... </diagnostics> <results> <entry> <title type="text">Canon EOS 5D Mark II Digital Camera (Body only)</title> <g:price type="floatUnit">2699.95 usd</g:price> <g:target_country type="text">US</g:target_country> <g:brand type="text">Canon</g:brand> </entry>
Príklad II • Dotaz http://query.yahooapis.com/v1/public/yql?env=http://www.ms.mff.cuni.cz/~sisar4am/my.env&q=SELECT title,brand,target_country,price FROM google_base_table WHERE bq = "digital+camera+europe"&format=xml • Výsledok <entry> <title type="text"> Hewlett Packard C8452-60002 C315 Digital Camera (Europe Only)</title> <g:price type="floatUnit">656.95 usd</g:price> <g:target_country type="text">US</g:target_country> <g:brand type="text">Hewlett Packard</g:brand> </entry>
Príklad II • <entry> • <title type="text"> • Hewlett Packard Q2154-69001 EXCH120 Digital Camera-Europe Order Only</title> • <g:price type="floatUnit">501.95 usd</g:price> • <g:target_country type="text">US</g:target_country> • <g:brand type="text">Hewlett Packard</g:brand> • </entry> • ... • <entry> • <title type="text"> • HP Hewlett Packard Q2154-60100 New Q215460100 PhotoSmart 120 Digital Camera - Europe only</title> • <g:price type="floatUnit">222.52 gbp</g:price> • <g:target_country type="text">GB</g:target_country> • <g:brand type="text">HP Hewlett Packard</g:brand> • </entry>
Zabezpečenie ODT a kontrola prístupu • Využíva sa otvorený protokol OAuth