yahoo query language web service n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Yahoo! Query Language ( Web Service) PowerPoint Presentation
Download Presentation
Yahoo! Query Language ( Web Service)

Loading in 2 Seconds...

play fullscreen
1 / 68

Yahoo! Query Language ( Web Service) - PowerPoint PPT Presentation


  • 150 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Yahoo! Query Language ( Web Service)' - everly


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
yahoo query language web service
Yahoo! Query Language(Web Service)
  • Peter Piják
  • Róbert Šišaj
  • 15.12.2009
osnova
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
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
Možnosti YQL WS
  • Preddefinované tabuľky
    • Yahoo! osobný účet
    • Yahoo! služby a siete: Search, Flickr, Social, MyBlogLog
  • Tabuľky rozšíriteľné
    • Open Data tables
    • ľubovoľná iná služba
  • Formát
    • vstup: HTML, XML, JSON, RSS, Atom
    • výstup: XML, JSON (JavaScript Object Notation)
uk kov dotaz
Ukážkový dotaz
  • Dotaz
    • SELECT givenName, familyNameFROM social.profile WHERE guid=me
  • Výsledok
    • <results><profile xmlns=…> <givenName>Peter</givenName><familyName>Piják</familyName></profile></results>
pr stup k yql ws
Prístup k YQL WS
  • YQL Console
    • interaktívne prostredie
    • http://developer.yahoo.com/yql/console
  • HTTP dotaz
    • http://query.yahooapis.com/v1/public/yql?q=SELECT * FROM social.profile WHERE guid=me
  • Yahoo! PHP SDK
    • webové aplikácie
pr stup cez yql console
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í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 http1
Prístup cez HTTP
  • Adresy URL podľa potreby autorizácie
    • http://query.yahooapis.com/v1/public/yql?[query]
    • http://query.yahooapis.com/v1/yql?[query]
      • pre tabuľky vyžadujúce autentifikáciu
  • Parametre [query]
    • príklad: q=[yql_query]&format=xml
pr stup cez http2
Prístup cez HTTP
  • HTTP protokol
    • dotaz:
      • GET / HTTP/1.1Host: www.cuni.cz
    • definovaných 8 metód:
      • HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT
  • Pre dotaz v YQL
    • SELECT dotaz používa GET
    • INSERT –– PUT
    • UPDATE –– POST
    • DELETE –– DELETE
yahoo php sdk
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
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
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
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 polia1
SELECT, vstupné polia
  • Prístup k podelementom bodkou
    • z elementu image iba imageUrl
    • SELECT givenName, image.imageUrlFROM social.profile WHERE guid=me
    • <profile ...> <givenName>Peter</givenName> <image> <imageUrl>http:...</imageUrl> </image></profile>
filtrovanie z znamov
Filtrovanie záznamov
  • Dotaz
    • SELECT * FROM flickr.photos.searchWHERE text='Barcelona'
  • Typy filtrov
    • vzdialené
    • lokálne
vzdialen filtrovanie
Vzdialené filtrovanie
  • YQL WS
    • preloží podmienku do tvaru vzdialenej služby
  • Filtrovanie záznamov vo vzdialenej službe
    • dotaz v tvare
      • input_key=literal
      • alebo kombinácia OR
  • Príklad
    • SELECT * FROM flickr.photos.infoWHERE photo_id='2186714153'
    • preklad na:
    • http://api.flickr.com/services/rest/?method=flickr.photos.get-Info&photo_id='2186714153'
vzdialen filtrovanie pr klad
Vzdialené filtrovanie, príklad
  • Vyhľadávanie cez Yahoo! Search
  • Dotaz
    • SELECT url FROM search.webWHERE query='univerzita praha'
    • http://query.yahooapis.com/v1/public/yql?q=select%20url%20from%20search.web%20where%20query%3D'univerzita%20praha'
lok lne filtrovanie
Lokálne filtrovanie
  • YQL WS preberá všetky dáta, filtruje ich
    • Príklad
      • SELECT * FROM search.webWHERE query='univerzita praha'AND title LIKE '%metr%'
      • query –– vzdialene
      • title –– lokálne
  • Syntax:
    • field comp_operator literal
    • operátory: =, !=, >, <, >=, <=,IN (values), [NOT] LIKE (pattern), [NOT] MATCHES (pattern), IS [NOT] NULL
    • alebo kombinácia AND a OR
sp janie tabuliek
Spájanie tabuliek
  • Spojenie rôznych tabuliek / rôznych služieb
  • Pomocou zhodnosti hodnôt
  • Spojenie – operátor IN a sub-dotaz
  • Dotaz
    • SELECT * FROM search.webWHERE queryIN(SELECT title FROM rss WHERE url="http://rss.news.yahoo.com/rss/topstories" | truncate(count=1))
sp janie tabuliek1
Spájanie tabuliek
  • Vnútorný dotaz
    • SELECT title FROM rssWHERE url= "..."| truncate(count=1)
    • <item><title>Senate to vote on $1.1 trillion spending bill</title></item>
  • Celkový výsledok
    • <results> <result xmlns="..."><title> <![CDATA[FOXNews.com - <b>Senate</b> Poised to Advance $1.1T <b>Spending</b> <b>Bill</b>]]> </title></result> <result ... /></results>
sp janie tabuliek viacn sobn k
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
Spájanie tabuliek, viac subdotazov
  • Vnorenie subdotazov, povolené
    • SELECT * FROM search.siteexplorer.pagesWHERE query IN (SELECT url FROM search.web WHERE query IN (SELECT Artist.name FROM music.release.popular LIMIT 1) LIMIT 1)
  • Viacnásobné subdotazy s operátorom IN nepovolené
    • SELECT * FROM flickr.photos.searchWHERE lat IN (SELECT centroid.latitude FROM geo.places WHERE text="sfo") AND lon IN (SELECT centroid.longitude FROM geo.places WHERE text="sfo")
    • Only a single subselect with a key field is allowed in a branch.
select obmedzenie kapacity d t
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 t1
SELECT, obmedzenie kapacity dát
  • Obmedzenia YQL WS služby
    • SELECT columns FROM tableWHERE condition[LIMIT limit [OFFSET offset]]
    • predvolené LIMIT 10, OFFSET 0
  • Obmedzenia vzdialenej služby a lokálnej služby je možné kombinovať
triediace a in funkcie
Triediace a iné funkcie
  • Syntax
    • SELECT columns FROM table (| function)*
  • Príklad:
    • SELECT name, centroid.latitudeFROM geo.placesWHERE text="victoria"| SORT (field='centroid.latitude')
    • <place><name>Victoria</name><centroid><latitude>36.558651</...></...></place><place><name>Vitoria</name><centroid><latitude>20.294210</...></...></place>
triediace a in funkcie1
Triediace a iné funkcie
  • Syntax
    • SELECT columns FROM table (| function)*
  • sanitize - prevedie znaky na HTML entity
extrahovanie html obsahu
Extrahovanie HTML obsahu
  • Obsah web. stránky
    • SELECT * FROM htmlWHERE url="http://www.mff.cuni.cz“
    • <results><body lang="en"><div id="outer"><a id="top" name="top"/><div id="contain-all"> <div id="logo"><img alt=““ src="..."/> ...</body></results>
extrahovanie html obsahu xpath
Extrahovanie HTML obsahu, XPath
  • Extrahovanie pomocou XPath
    • SELECT * FROM htmlWHERE url="http://www.mff.cuni.cz“ANDxpath='//h1[@id="faculty"]'
    • <results><h1 id="faculty">Faculty of Mathematics and Physics</h1></results>
n poveda k tabu ke
Nápoveda k tabuľke
  • Dotaz
    • DESC table_name
  • Príklad
    • DESC html
    • <table name="html" security="ANY"> <meta> <sampleQuery>select * from html where url="http://finance.yahoo.com/q?s=yhoo" and xpath='//div[@id="yfi_headlines"]/div[2]/ul/li/a' </sampleQuery> </meta> <request> <select> <key name="browser" type="xs:boolean"/> <key name="charset" type="xs:string"/> <key name="url" required="true" type="xs:string"/> <key default="/html/body" name="xpath" type="xs:string"/> </select> </request></table>
i u d dotazy
I/U/D dotazy
  • I/U/D –– INSERT, UPDATE, DELETE
  • Ale
    • nie je možné pri každej tabuľke
    • nutná autentifikácia
insert
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
DELETE
  • Syntax
    • DELETE FROM table_name WHERE filter
  • Príklad
    • DELETE FROM twittertableWHERE tweetid="12345"AND username="twitter_username" AND password="twitter_password"
update
UPDATE
  • Syntax
    • UPDATE table SET field = value WHERE filter
  • Príklad
    • UPDATE social.profile.statusSET status="Prednáška"WHERE guid=me
    • http://profiles.yahoo.com
open data tables
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
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 odt1
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
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 klad1
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 klad2
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 klad3
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
Sprístupnenie ODT v YQL
  • Príkaz USE importuje definíciu ODT

USE 'http://myserver.com/mytables.xml' AS mytable;

    • Ak vynecháme kľúčové slovo AS, YQL použije názov súboru (bez .xml prípony) na pomenovanie tabuľky
    • Definícia tabuľky musí odpovedať schéme
    • http://query.yahooapis.com/v1/schema/table.xsd
  • Následne sa môžeme dotazovať

SELECT * FROM mytable WHERE...

  • Vhodné sprístupniť potrebné ODT v súbore s príponou .env

http://developer.yahoo.com/yql/console/?env=http://datatables.org/alltables.env

    • typicky obsahuje príkazy USE a SET
nastavenie k ov ch hodn t pre odt
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 odt1
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 odt2
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
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
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 ii1
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
Zabezpečenie ODT a kontrola prístupu
  • Využíva sa otvorený

protokol OAuth

d vkov spracovanie volan
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 volan1
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
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 yql1
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 yql2
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 yql3
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 yql4
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
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 odt1
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 odt2
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 odt3
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
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 odt1
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
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 storage1
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 storage2
Hosted Storage
  • Prístup k záznamom

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