yahoo! query language ( web service)

68
- 1 - Yahoo! Query Language (Web Service) Peter Piják Róbert Šišaj • 15.12.2009

Upload: everly

Post on 21-Jan-2016

62 views

Category:

Documents


0 download

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

Page 1: Yahoo! Query Language ( Web Service)

- 1 -

Yahoo! Query Language(Web Service)

• Peter Piják

• Róbert Šišaj

• 15.12.2009

Page 2: Yahoo! Query Language ( Web Service)

- 2 -

Osnova

• Jazyk Yahoo! Query Language– konštrukcie– zdroje dát

• Yahoo! Query Language Web Service– použitie– prístup

Page 3: Yahoo! Query Language ( Web Service)

- 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 (…)

Page 4: Yahoo! Query Language ( Web Service)

- 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)

Page 5: Yahoo! Query Language ( Web Service)

- 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>

Page 6: Yahoo! Query Language ( Web Service)

- 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

Page 7: Yahoo! Query Language ( Web Service)

- 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

Page 8: Yahoo! Query Language ( Web Service)

- 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

Page 9: Yahoo! Query Language ( Web Service)

- 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)

Page 10: Yahoo! Query Language ( Web Service)

- 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

Page 11: Yahoo! Query Language ( Web Service)

- 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);?>

Page 12: Yahoo! Query Language ( Web Service)

- 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>

Page 13: Yahoo! Query Language ( Web Service)

- 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

Page 14: Yahoo! Query Language ( Web Service)

- 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>

Page 15: Yahoo! Query Language ( Web Service)

- 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>

Page 16: Yahoo! Query Language ( Web Service)

- 16 -

Filtrovanie záznamov

• Dotaz– SELECT * FROM flickr.photos.searchWHERE text='Barcelona'

• Typy filtrov– vzdialené– lokálne

Page 17: Yahoo! Query Language ( Web Service)

- 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'

Page 18: Yahoo! Query Language ( Web Service)

- 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'

Page 19: Yahoo! Query Language ( Web Service)

- 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

Page 20: Yahoo! Query Language ( Web Service)

- 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) )

Page 21: Yahoo! Query Language ( Web Service)

- 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>

Page 22: Yahoo! Query Language ( Web Service)

- 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"

Page 23: Yahoo! Query Language ( Web Service)

- 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.

Page 24: Yahoo! Query Language ( Web Service)

- 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)

Page 25: Yahoo! Query Language ( Web Service)

- 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ť

Page 26: Yahoo! Query Language ( Web Service)

- 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>

Page 27: Yahoo! Query Language ( Web Service)

- 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

Page 28: Yahoo! Query Language ( Web Service)

- 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>

Page 29: Yahoo! Query Language ( Web Service)

- 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>

Page 30: Yahoo! Query Language ( Web Service)

- 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>

Page 31: Yahoo! Query Language ( Web Service)

- 31 -

I/U/D dotazy

• I/U/D –– INSERT, UPDATE, DELETE

• Ale– nie je možné pri každej tabuľke– nutná autentifikácia

Page 32: Yahoo! Query Language ( Web Service)

- 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')

Page 33: Yahoo! Query Language ( Web Service)

- 33 -

DELETE

• Syntax– DELETE FROM table_name WHERE filter

• Príklad– DELETE FROM twittertableWHERE tweetid="12345"AND username="twitter_username" AND password="twitter_password"

Page 34: Yahoo! Query Language ( Web Service)

- 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

Page 35: Yahoo! Query Language ( Web Service)

- 35 -

Page 36: Yahoo! Query Language ( Web Service)

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

Page 37: Yahoo! Query Language ( Web Service)

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

Page 38: Yahoo! Query Language ( Web Service)

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

Page 39: Yahoo! Query Language ( Web Service)

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>

Page 40: Yahoo! Query Language ( Web Service)

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>

Page 41: Yahoo! Query Language ( Web Service)

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>

Page 42: Yahoo! Query Language ( Web Service)

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>

Page 43: Yahoo! Query Language ( Web Service)

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

Page 44: Yahoo! Query Language ( Web Service)

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"

Page 45: Yahoo! Query Language ( Web Service)

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

Page 46: Yahoo! Query Language ( Web Service)

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;

Page 47: Yahoo! Query Language ( Web Service)

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>

Page 48: Yahoo! Query Language ( Web Service)

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>

Page 49: Yahoo! Query Language ( Web Service)

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>

Page 50: Yahoo! Query Language ( Web Service)

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

Page 51: Yahoo! Query Language ( Web Service)

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

Page 52: Yahoo! Query Language ( Web Service)

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

Page 53: Yahoo! Query Language ( Web Service)

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

Page 54: Yahoo! Query Language ( Web Service)

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>

Page 55: Yahoo! Query Language ( Web Service)

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

Page 56: Yahoo! Query Language ( Web Service)

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

Page 57: Yahoo! Query Language ( Web Service)

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>

Page 58: Yahoo! Query Language ( Web Service)

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

Page 59: Yahoo! Query Language ( Web Service)

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

Page 60: Yahoo! Query Language ( Web Service)

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

Page 61: Yahoo! Query Language ( Web Service)

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");

Page 62: Yahoo! Query Language ( Web Service)

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

Page 63: Yahoo! Query Language ( Web Service)

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

Page 64: Yahoo! Query Language ( Web Service)

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

Page 65: Yahoo! Query Language ( Web Service)

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

Page 66: Yahoo! Query Language ( Web Service)

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"

Page 67: Yahoo! Query Language ( Web Service)

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)

Page 68: Yahoo! Query Language ( Web Service)

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