yahoo! query language ( web service)

Post on 21-Jan-2016

75 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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 Presentation

TRANSCRIPT

- 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

top related