Yahoo! Query Language (Web Service)

Slides:



Advertisements
Similar presentations
Presenter: James Huang Date: Sept. 29,  HTTP and WWW  Bottle Web Framework  Request Routing  Sending Static Files  Handling HTML  HTTP Errors.
Advertisements

1Proprietary and Confidential AirVantage API – Getting started David SCIAMMA – June 13th 2014.
1.  Understanding about How to Working with Server Side Scripting using PHP Framework (CodeIgniter) 2.
UFCEKG-20-2 Data, Schemas & Applications Lecture 6 The Web of Data, API’s & PHP.
L. Grewe. YQL – what is it Yahoo! Query Language.
Hypertext Transport Protocol CS Dick Steflik.
 What is it ? What is it ?  URI,URN,URL URI,URN,URL  HTTP – methods HTTP – methods  HTTP Request Packets HTTP Request Packets  HTTP Request Headers.
Web Services 101 James Payne Managing Director for New Media / Advancement July 30, 2013.
XML pre programátorov 7. víkend s Linuxom 5. – 6. október 2002 Žilina Stanislav Meduna ETM Aktiengesellschaft
Lecture 3 – Data Storage with XML+AJAX and MySQL+socket.io
Beyond the UI Using Tools to Improve Testing Jeremy Traylor
Introduction to InfoSec – Recitation 7 Nir Krakowski (nirkrako at post.tau.ac.il) Itamar Gilad (itamargi at post.tau.ac.il)
PHP Programming with MySQL Slide 8-1 CHAPTER 8 Working with Databases and MySQL.
JavaScript, Fourth Edition Chapter 12 Updating Web Pages with AJAX.
Sistem Jaringan dan Komunikasi Data #9. DNS The Internet Directory Service  the Domain Name Service (DNS) provides mapping between host name & IP address.
REST.  REST is an acronym standing for Representational State Transfer  A software architecture style for building scalable web services  Typically,
Web HTTP Hypertext Transfer Protocol. Web Terminology ◘Message: The basic unit of HTTP communication, consisting of structured sequence of octets matching.
Jason Cortes, GOER Web Programming/Developer
Web Scripting [PHP] CIS166AE Wednesdays 6:00pm – 9:50pm Rob Loy.
Remixing web data for your hacks the easy way YQL – the can opener of the web.
flickr Open API & Mashup HOWTO Yahoo! Korea, Jinho Jung
IS-907 Java EE World Wide Web - Overview. World Wide Web - History Tim Berners-Lee, CERN, 1990 Enable researchers to share information: Remote Access.
1 © Donald F. Ferguson, All rights reserved.Modern Internet Service Oriented Application Development – Lecture 2: REST Details and Patterns Some.
Web Technologies Lecture 1 The Internet and HTTP.
WStore Programmer Guide Offering management integration.
RESTful Web Services What is RESTful?
Computer Networks with Internet Technology William Stallings Chapter 04 Modern Applications 4.1 Web Access - HTTP.
Simple Web Services. Internet Basics The Internet is based on a communication protocol named TCP (Transmission Control Protocol) TCP allows programs running.
What’s Really Happening
Chapter 5 Introduction to SQL.
HTTP – An overview.
The Hypertext Transfer Protocol
HTTP request message: general format
API Security Auditing Be Aware,Be Safe
Syndication For Search Engines
COMP2322 Lab 2 HTTP Steven Lee Feb. 8, 2017.
Node.js Express Web Services
An introduction to REST for SharePoint 2013
Advanced Web-based Systems | Misbhauddin
Hypertext Transfer Protocol
Hypertext Transport Protocol
What is REST API ? A REST (Representational State Transfer) Server simply provides access to resources and the REST client accesses and presents the.
Beautiful REST + JSON APIs
HTTP Protocol.
HTTP, RESTful Web Services, HTTP and REST Tools: Postman, Fiddler
YQL Kevin Murphy CMPS 183.
Tutorial (4): HTTP Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
Yahoo! Social APIs Sophie Major Nagesh Susarla
WEB API.
Chapter 8 Working with Databases and MySQL
Integritné obmedzenia v SQL
Hypertext Transfer Protocol
ROVINNÉ (2D) SYMBOLY DWG
HTTP Request Method URL Protocol Version GET /index.html HTTP/1.1
Hypertext Transfer Protocol
Hypertext Transfer Protocol
Hypertext Transfer Protocol

MySQL Database System Installation Overview SQL summary
access to everything over the web
Traditional Internet Applications
HTTP Hypertext Transfer Protocol
Uniform Resource Locators (URLs)
Hypertext Transfer Protocol
TN19-TCI: Integration and API management using TIBCO Cloud™ Integration
Web Server Design Week 6 Old Dominion University
CSCI-351 Data communication and Networks
Web Server Design Week 7 Old Dominion University
Web Programming Week 1 Old Dominion University
Web Server Design Week 7 Old Dominion University
Presentation transcript:

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

Osnova Jazyk Yahoo! Query Language Yahoo! Query Language Web Service 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 Tabuľky rozšíriteľné Formát 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 Výsledok SELECT givenName, familyName FROM 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 HTTP dotaz Yahoo! PHP SDK 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 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)

Prístup cez HTTP HTTP protokol Pre dotaz v YQL dotaz: GET / HTTP/1.1 Host: 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.imageUrl FROM social.profile WHERE guid=me <profile ...> <givenName>Peter</givenName> <image> <imageUrl>http:...</imageUrl> </image> </profile>

Filtrovanie záznamov Dotaz Typy filtrov SELECT * FROM flickr.photos.search WHERE 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.info WHERE 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.web WHERE query='univerzita praha' http://query.yahooapis.com/v1/public/yql?q=selec t%20url%20from%20search.web%20where%20query%3D'u niverzita%20praha'

Lokálne filtrovanie YQL WS preberá všetky dáta, filtruje ich Syntax: Príklad SELECT * FROM search.web WHERE 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.web WHERE query IN (SELECT title FROM rss WHERE url= "http://rss.news.yahoo.com/rss/topstories" | truncate (count=1) )

Spájanie tabuliek Vnútorný dotaz Celkový výsledok SELECT title FROM rss WHERE 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.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.

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 table WHERE 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.latitude FROM geo.places WHERE 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)* Funkcia Argument Príklad sort field [descending] sort (field="name", descending="true") tail count tail (count=4) truncate truncate (count=4) reverse reverse () unique field unique (field="foo") sanitize [field] sanitize (field="foo") sanitize - prevedie znaky na HTML entity

Extrahovanie HTML obsahu Obsah web. stránky SELECT * FROM html WHERE 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 html WHERE url="http://www.mff.cuni.cz“ AND xpath='//h1[@id="faculty"]' <results> <h1 id="faculty"> Faculty of Mathematics and Physics </h1> </results>

Nápoveda k tabuľke Dotaz Príklad DESC table_name 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 Príklad DELETE FROM table_name WHERE filter DELETE FROM twittertable WHERE tweetid="12345" AND username="twitter_username" AND password="twitter_password"

UPDATE Syntax Príklad UPDATE table SET field = value WHERE filter UPDATE social.profile.status SET 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://da tatables.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 Výsledok http://query.yahooapis.com/v1/public/yql?env=http://www.ms.mff.cuni.cz/~sisar4am/my.en v&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 Výsledok 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> ... 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>

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 2-legged OAuth 3-legged OAuth

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/profile http://social.yahooapis.com/v1/user/2/profile http://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)/prof ile 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&en v=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=5b81e4c 4-11eb-43a5-866bb1217498843e

Debuggovanie ODT a YQL Dotaz pomocou HTTP http://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.xml Client-IP: 78.128.172.102 X-Forwarded-For: 78.128.172.102 User-Agent: Yahoo Pipes 2.0 YahooRemoteIPSig: eETIOY9_2R68uOZGKOLPfw--~A YahooRemoteIP: 78.128.172.102 X-YQL-Depth: 1 Cache-Control: max-age=1

Debuggovanie ODT a YQL Log volania (response) HTTP/1.1 200 OK Age: 2 ETag: "76ef00ec-275-4b263188" Content-Length: 629 Last-Modified: Mon, 14 Dec 2009 12:37:28 GMT X-Cache-Lookup: MISS from yqlcache2.pipes.ch1.yahoo.com:3128 X-Cache: MISS from yqlcache2.pipes.ch1.yahoo.com Server: YTS/1.17.22 Vary: YahooTransform Date: Mon, 14 Dec 2009 12:51:33 GMT Via: 1.0 yqlcache2.pipes.ch1.yahoo.com:3128 (squid/2.7.STABLE6) Content-Type: text/xml Accept-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> <![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áznamu INSERT 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áznamom Zmazanie záznamu SELECT * 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/ [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