yahoo! query language ( web service)
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
- 1 -
Yahoo! Query Language(Web Service)
• Peter Piják
• Róbert Šišaj
• 15.12.2009
- 2 -
Osnova
• Jazyk Yahoo! Query Language– konštrukcie– zdroje dát
• Yahoo! Query Language Web Service– použitie– prístup
- 3 -
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 (…)
- 4 -
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)
- 5 -
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>
- 6 -
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
- 7 -
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
- 8 -
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
- 9 -
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
Názov Preddefinová hodnota
q (povinný) YQL dotaz
format xml formát (xml, json)
callback názov funkcie v Javascripte pre zavolanie
diagnostics true
debug zapisovanie záznamov (logovanie)
- 10 -
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
- 11 -
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);?>
- 12 -
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>
- 13 -
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
- 14 -
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>
- 15 -
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>
- 16 -
Filtrovanie záznamov
• Dotaz– SELECT * FROM flickr.photos.searchWHERE text='Barcelona'
• Typy filtrov– vzdialené– lokálne
- 17 -
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'
- 18 -
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'
- 19 -
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
- 20 -
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 query IN (SELECT title FROM rss WHERE url= "http://rss.news.yahoo.com/rss/topstories" | truncate (count=1) )
- 21 -
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>
- 22 -
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"
- 23 -
Spájanie tabuliek, viac subdotazov
• Vnorenie subdotazov, povolené– SELECT * FROM search.siteexplorer.pages
WHERE 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.search
WHERE 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.
- 24 -
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)
- 25 -
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ť
- 26 -
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>
- 27 -
Triediace a iné funkcie
• Syntax– SELECT columns FROM table (| function)*
Funkcia Argument Príklad
sort field [descending] sort (field="name",
descending="true")
tail count tail (count=4)
truncate count truncate (count=4)
reverse reverse ()
unique field unique (field="foo")
sanitize [field] sanitize (field="foo")
• sanitize - prevedie znaky na HTML entity
- 28 -
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>
- 29 -
Extrahovanie HTML obsahu, XPath
• Extrahovanie pomocou XPath– SELECT * FROM htmlWHERE url="http://www.mff.cuni.cz“AND xpath='//h1[@id="faculty"]'
– <results> <h1 id="faculty"> Faculty of Mathematics and Physics </h1></results>
- 30 -
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>
- 31 -
I/U/D dotazy
• I/U/D –– INSERT, UPDATE, DELETE
• Ale– nie je možné pri každej tabuľke– nutná autentifikácia
- 32 -
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')
- 33 -
DELETE
• Syntax– DELETE FROM table_name WHERE filter
• Príklad– DELETE FROM twittertableWHERE tweetid="12345"AND username="twitter_username" AND password="twitter_password"
- 34 -
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
- 35 -
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ľúčaSELECT 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žbyhttp://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 ODTUSE '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
Zabezpečenie tabuľky (securityLevel)
any app user
Anonymný prístup (bez autorizácie)
áno nie nie
2-legged OAuth
áno áno nie
3-legged OAuth
áno áno áno
Dávkové spracovanie volaní
URI pre profile v rámci Social Directory API
http://social.yahooapis.com/v1/user/{guid}/profile
V YQL prístup cez tabuľku social.profile
SELECT * FROM social.profile WHERE guid IN (SELECT guid FROM social.connections WHERE owner_guid = me)
Sub-select potrebuje niekoľko volaní do Social Directory API (predpoklad – užívateľ má 3 connections)
http://social.yahooapis.com/v1/user/1/profilehttp://social.yahooapis.com/v1/user/2/profilehttp://social.yahooapis.com/v1/user/3/profile
Dávkové spracovanie volaní
Social Directory API umožňuje dávkové spracovanie
http://social.yahooapis.com/v1/users.guid(1,2,3)/profile
Kľúč guid musí byť definovaný ako 'batchable'
<key id="guid" type="xs:string" paramType="path" batchable="true" maxBatchItems="3"/>
ODT definícia musí umožnovať viacnásobnú hodnotu guid
<url env="int">http://social.yahooapis.com/v1/users.guid({-listjoin|,|guid})/profile</url>
Pôvodný SELECT využije dávkové volanie
Debuggovanie ODT a YQL
Debug režim sa vyvolá pridaním parametru debug=true
http://query.yahooapis.com/v1/yql?q=select%20*%20from%20social.profile%20where%20guid%3Dme&format=xml&env=http%3A%2F%2Fdatatables.org%2Falltables.env&debug=true
V debug režime sa nepoužíva cachovanie
Odpoveď obsahuje element <diagnostics> - obsahuje záznam všetkých volaní
Každý záznam má unikátne id platné 5 minút, to je možné použiť na získanie podrobného logu konkrétneho volania
http://query.yahooapis.com/v1/logging/dump?id=5b81e4c4-11eb-43a5-866bb1217498843e
Debuggovanie ODT a YQL
Dotaz pomocou HTTPhttp://query.yahooapis.com/v1/public/yql?env=http://www.ms.mff.cuni.cz/
~sisar4am/my.env&q=SELECT title%2Cprice FROM google_base_table WHERE bq="printer"&format=xml&debug=true
Element diagnostics v odpovedi<diagnostics><url execution-time="130"id="839b341f-9e8c-44a7-b249-f00b00cdd01f" proxy="DEFAULT">
http://www.ms.mff.cuni.cz/~sisar4am/my.env</url><url execution-time="61"id="4368fdc8-34d3-43de-b99c-e65fa3e71f28" proxy="DEFAULT">
http://www.ms.mff.cuni.cz/~sisar4am/google.xml</url>
<url execution-time="314"id="609e6403-d9b2-4c3b-84af-48155c5b3362" proxy="DEFAULT">
http://www.google.com/base/feeds/snippets?bq=printer</url><user-time>513</user-time>...</diagnostics>
Debuggovanie ODT a YQL
Získanie logu z druhého volania YQL
http://query.yahooapis.com/v1/logging/dump?id=4368fdc8-34d3-43de-b99c-e65fa3e71f28
Log volania (request)
GET http://www.ms.mff.cuni.cz/~sisar4am/google.xmlClient-IP: 78.128.172.102X-Forwarded-For: 78.128.172.102User-Agent: Yahoo Pipes 2.0YahooRemoteIPSig: eETIOY9_2R68uOZGKOLPfw--~AYahooRemoteIP: 78.128.172.102X-YQL-Depth: 1Cache-Control: max-age=1
Debuggovanie ODT a YQL
Log volania (response)
HTTP/1.1 200 OKAge: 2ETag: "76ef00ec-275-4b263188"Content-Length: 629Last-Modified: Mon, 14 Dec 2009 12:37:28 GMTX-Cache-Lookup: MISS from yqlcache2.pipes.ch1.yahoo.com:3128X-Cache: MISS from yqlcache2.pipes.ch1.yahoo.comServer: YTS/1.17.22Vary: YahooTransformDate: Mon, 14 Dec 2009 12:51:33 GMTVia: 1.0 yqlcache2.pipes.ch1.yahoo.com:3128
(squid/2.7.STABLE6)Content-Type: text/xmlAccept-Ranges: bytes
Debuggovanie ODT a YQL
Samotný obsah odpovede
<?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 bq =
"digital+camera"</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>
JavaScript v ODT
Použitie JavaScriptu v ODT umožňuje pridať podmienkovú logiku a jemnejšie spracovať dáta
Môže pracovať na úrovni requests - responses ovplyvňovať dotaz posielaný do webovej služby a
spracovať odpoveď Umožňuje špeciálny prístup k WS
niektoré webové služby používajú vlastné bezpečnostné mechanizmy, JavaScriptom je možné pridať autentifikačný header do WS requestu
Lepšia podpora pre vkladanie, úpravu a mazanie dát WS
JavaScript v ODT
JavaScript je vnorený v elemente <execute><execute> <![CDATA[ // JavaScript code goes here // this does exactly the same as original ODT response.object = request.get().response;
y.log("javascript here"); ]]></execute>
logové správy sa zobrazia na výstupe v elemente <diagnostics>
<log>javascript here</log>
YQL neposiela request na endpoint, umožní 'iba' vykonať JavaScriptový kód - ten musí vrátiť dáta odpovedajúce pôvodnému YQL príkazu
JavaScript v ODT
JavaScript objekty Globálne objekty
y - obsahuje metódy YQL: query, use, include, exit, rest, xmlToJson, jsonToXml, log, ...
metóda rest vyšle GET request metóda query vykoná 'klasický' YQL príkaz
(SELECT,...) request - je v podstate objekt, ktorý normálne vzniká
zavolaním metódy y.rest vhod
response - zvyčajne na konci skriptu obsahuje požadovaný výstup vygenerovaný dotazom
JavaScript v ODT
Využívanie existujúcich JS knižníc
y.include("http://oauth.googlecode.com/svn/code/ javascript/oauth.js");
y.include("http://oauth.googlecode.com/svn/code/ javascript/sha1.js");
y.include("http://blog.pipes.yahoo.net/wp-content/ uploads/flickr.js");
y.include("http://v8cgi.googlecode.com/svn/trunk/lib/ util.js");
Obmedzenia JavaScriptu v ODT
Celkový počet jednotiek výpočtu maximálne 50 miliónov jednotiek
jednotka znamená prístup do pamäte alebo operáciu y.query() má cenu 2000 jednotiek y.log(), y.rest() - cena 1000 jednotiek spájanie reťazcov - 1 znak má cenu 1 jednotky operácia s objektom vytvoreným pomocou new - cena
500 jednotiek za operáciu ! pridanie elementu (XML) - cena 50 jednotiek
cena spojenia 2 XML stromov, každý nech obsahuje 10 elementov
(10 elementov + 10 elementov) * 50 jednotiek = 1000 jednotiek
Obmedzenia JavaScriptu v ODT
Celkový čas výpočtu limitovaný na max 30 sekúnd
Veľkosť zásobníku hĺbka zásobníku nesmie presiahnuť 100 úrovní
Počet súčasných YQL dotazov maximálne 5 dotazov súčasne
Počet objektov vytvorených pomocou new 1 milión objektov
Počet elementov v E4X objekte 1 milión elementov v každom E4X objekte
Hosted Storage
YQL poskytuje 2 ODT: yql.storage a yql.storage.admin
práca s dátami pomocou SELECT, INSERT, UPDATE, DELETE dáta sú uložené v Yahoo! Sherpa cloud
distribuované úložište (aj geograficky) - vysoká dostupnosť, nízka latencia
Limity úložišťa každý záznam môže mať veľkosť maximálne 100KB maximálne 1000 záznamov záznamy bez prístupu po dobu 30 dní môžu byť odstránené
SELECT, UPDATE, prípadne execute záznamy musia byť textové
JavaScript kód, XML súbor, ODT, YQL environment súbor (.env)
prístup do yql.storage.admin vyžaduje 2-legged OAuth prístup do yql.storage nevyžaduje autentifikáciu
Hosted Storage
Uloženie nového záznamuINSERT INTO yql.storage.admin (value) VALUES ("example text
content")
Odpoveď vráti 3 prístupové kľúče <results> <inserted> <execute>store://yWblhURrET76rOdAwrRYxB</execute> <select>store://OY4YK9Qbn7OtK5iV5TCvp4</select> <update>store://IvY7M2SbVzYpS0J0FmJO6e</update> </inserted> </results>
<select> - používa sa v príkazoch SELECT <update> - v príkazoch UPDATE, DELETE <execute> - v príkazoch, ktoré obsahujú USE
alebo sa odkazujú na .env súbory
Hosted Storage
Prístup k záznamomSELECT * FROM yql.storage WHERE
name="store://OY4YK9Qbn7OtK5iV5TCvp4"
<results> <result> <value>example text content</value> </result> </results>
Zmazanie záznamu opäť pomocou yql.storage
DELETE FROM yql.storage WHERE name="store://IvY7M2SbVzYpS0J0FmJO6e"
Záver
YQL poskytuje intuitívne rozhranie hlavne k Yahoo! službám (Flickr, Search, ...)
Definovaním ODT je možné rozšíriť YQL, aby pristupoval k akejkoľvek webovej službe, ktorá poskytuje dáta vo vhodnom formáte (XML, JSON, ...)
Webová aplikácia môže s pomocou YQL vyhľadávať, filtrovať a kombinovať dáta z rôznych zdrojov umiestnených na Internete
YQL má určité (väčšinou kapacitné) obmedzenia, ktoré sú ale pochopiteľné a v praxi vadia len vo výnimočných prípadoch
Je treba myslieť na to, že kvalita dát z rôznych zdrojov sa môže líšiť (na rozdiel od SQL nemôžeme spoliehať na obmedzujúce podmienky - constraints)
Použitá literatúra
[1] http://developer.yahoo.com/social/sdk/php/
[2] http://developer.yahoo.com/yql/– Yahoo! Query Language (YQL) Guide
[3] http://en.wikipedia.org/wiki/OAuth