Yahoo Query Language
    select * from internet




          Jonathan Trevor (jtrevor@yahoo-inc.com) @jonathantrevor
Application ?
Application ?
Application ?
Application ?
Application ?
Application =
data manipulation
Application =
data manipulation
Application =           +
                data visualization
data
data
data
data
dev
dev
dev
dev
dev
dev
dev
dev
dev
dev
dev
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
var map = new
          YMap(document.getElementById('map'));
          …
dev       var currentGeoPoint = new
          YG...
var map = new
          YMap(document.getElementById('map'));
          …
dev       var currentGeoPoint = new
          YG...
Yahoo!    My Yahoo!   Mail                                                                                                ...
var map = new
      YMap(document.getElementById('map'));
      …
dev   var currentGeoPoint = new
      YGeoPoint( _c.Lat,...
dev




      YQL
dev




      YQL
dev



       Bindings




      YQL
dev



       Bindings




      YQL
dev



                  Bindings




      YQL stmt
                 YQL
dev



                  Bindings




      YQL stmt
                 YQL
      select
dev



                  Bindings




      YQL stmt
                 YQL
      select
      desc
dev



                  Bindings




      YQL stmt
                 YQL
      select
      desc
      show
Why YQL?
Thousands of Web Services and sources that
provide valuable data
Require Developers to read documentation and for...
YQL
Hosted web service and SQL-Like Language
    Familiar to developers
      Synonymous with Data access
    Expressive e...
YQL Statement Basics
 show: lists the supported tables
 desc: describes the structure of a table
 select: fetches data
 in...
YQL Select Statement

SELECT what
FROM collection
WHERE filter condition
IN (sub-select)
LIMIT n OFFSET n
Demo:
developer.yahoo.com/yql/
Get any data:
open data tables
Open Data Tables



 YQL
Open Data Tables



 YQL
Open Data Tables



 YQL
Open Data Tables



 YQL
Open Data Tables
       Bindings




 YQL
Open Data Tables



 YQL
Open Data Tables



 YQL
Open Data Tables

       Map YQL to Endpoint


 YQL
Open Data Tables

 Brings the power of the table model to new APIs
 Schema defines mapping between YQL and
 Endpoint
 Keys ...
Open Data Tables



 YQL
Open Data Tables



 YQL
Open Data Tables
Open Data Tables
USE Verb
use ‘http://url-to-def.xml’ as tableName;
select * from tableName where key=‘value’...


 Imports the Table defini...
Community:
github/datatables.org
Share your work
leverage the work of others to make access easier by
sharing tables
github repository:
http://github.com/y...
Do it your way:
<execute>
YQL Execute
extends Open Data Tables with server-side code
access APIs that require authentication
  Netflix OAuth, FlickrA...
YQL Execute

augment data:
  city/state to APIs that just return zip code
create APIs from web page
  celebrity birthdays ...
<execute>
Javascript server-side scripting
No DOM, events etc, pure JS scripting
E4X support - XML literals, filtering ...
...
hello world
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
 <meta>
...
Unified web+image
<?xml version="1.0" encoding="UTF-8"?>
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd">
   ...
Search Netflix catalog
<table xmlns="http://query.yahooapis.com/v1/schema/table.xsd" https="true">
  <meta>...</meta>
   <b...
Just released today
INSERT INTO internet
Insert / Update / Delete
With INSERT / UPDATE / DELETE SQL verbs
developers can modify data on the internet, e.g.
create t...
select * from twitter.status where
    id="2108869549" and username="xxx"
    and password="yyy"

	     	      <select ite...
insert into twitter.status
    (status,username,password) values
    ("new tweet from YQL",”xxx”,”yyy”);

	    	     <inse...
delete from twitter.status where
    id="2108869549" and username="xxx"
    and password="yyy"


	    	     <delete itemPa...
Conclusion

 More easily build applications
  fewer lines of code
  data processing done away from app
  consistent and fa...
Conclusion
 build applications that run faster
  service in the cloud does the work
    conversion, filtering, parallel req...
data
YQL
  select * from internet

http://developer.yahoo.com/yql


               Jonathan Trevor
        yql-questions@yahoo-...
YQL: select * from internet (OReilly Webcast slides)
Upcoming SlideShare
Loading in...5
×

YQL: select * from internet (OReilly Webcast slides)

2,725

Published on

YQL deck used during live OReilly Webcast July 8th 2009, includes introduction to new INSERT/UPDATE/DELETE functionality.

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,725
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
124
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

YQL: select * from internet (OReilly Webcast slides)

  1. 1. Yahoo Query Language select * from internet Jonathan Trevor (jtrevor@yahoo-inc.com) @jonathantrevor
  2. 2. Application ?
  3. 3. Application ?
  4. 4. Application ?
  5. 5. Application ?
  6. 6. Application ?
  7. 7. Application =
  8. 8. data manipulation Application =
  9. 9. data manipulation Application = + data visualization
  10. 10. data data
  11. 11. data
  12. 12. data
  13. 13. dev
  14. 14. dev
  15. 15. dev
  16. 16. dev
  17. 17. dev
  18. 18. dev
  19. 19. dev
  20. 20. dev
  21. 21. dev
  22. 22. dev
  23. 23. dev
  24. 24. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); …
  25. 25. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } …
  26. 26. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2
  27. 27. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  28. 28. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  29. 29. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  30. 30. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  31. 31. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  32. 32. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); ? … … if (flickcurl_prepare(fc, ? "flickr.photos.geo.correctLocation", parameters, count)) { … } … ? http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 ? http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  33. 33. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); ? … … if (flickcurl_prepare(fc, ? "flickr.photos.geo.correctLocation", parameters, count)) { … } … ? http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 ? http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  34. 34. Yahoo! My Yahoo! Mail Welcome, guest Sign In Search MY PROJECTS APIs & WEB SERVICES var map = new RESOURCES SUPPORT YDN Maps Suite AJAX Maps YMap(document.getElementById('map')); Yahoo! Maps Web Services - AJAX API Getting … READY TO GET STARTED? You aren't signed in Sign In Help Started Guide var currentGeoPoint = newGet an App ID dev Home The Tour Sign Up Explore Search Learn the fundamentals of the Yahoo! Maps AJAX API and start creating your own maps. This page contains: Introduction and Prerequisites YGeoPoint( _c.Lat, _c.Lon ); Yahoo! Maps Cheatsheets Examples Flickr Services Yahoo! My Yahoo! Mail RECENT BLOG ARTICLES Welcome, guest Sign In API Documentation Feeds Your API Keys map.addMarker(currentGeoPoint); Display a Yahoo! Map ? Apply for a new API Key Add controls to your Yahoo! Map Leonardo da Vinci: Hacker Search Add a logger to a Yahoo! Map Place a marker on a Yahoo! Map … MY PROJECTS January 24, 2009 APIs & WEB SERVICES RESOURCES SUPPORT Draw Polylines on a Yahoo! Map Whaddyathink? & the Yahoo! Application flickr.places.getPlaceTypes Place Smart Markers on a Yahoo! Map Add multiple custom markers on Yahoo! Map YDN Weather RSS Feed Platform January 22, 2009 Traffic information overlay Yahoo! Pipes RSS output information overlay Yahoo! Weather RSS Feed Making the new Yahoo! Currency Converter Yahoo! My Yahoo! Mail Welcome, guest Sign In Local search results overlay Fetches a list of available place types for Flickr. Yahoo! Pipes JSON output information overlay YMap accessible The Weather RSS feed enables you Januaryto get up-to-date weather information for your location. You can save this 21, 2009 Overlay GeoRSS XML data Overlay custom objects at YGeoPoint location … feed in My Yahoo! or your favorite feed aggregator, or incorporate the RSS data into your own web site or client Search application. The Weather RSSRetrievingdynamically-generatedfrom based on zip code or Location ID. feed is a and displaying data feed Authentication Overlay custom objects at YCoordPoint location Overlay polyline on Yahoo! Map if (flickcurl_prepare(fc, Wikipedia with YQL PROJECTS MY APIs & WEB SERVICES RESOURCES This page describes the format of the 18, 2009 URL and the RSS response for developers. It contains these January request SUPPORT ? Export Yahoo! Map in GeoRSS format YDN Image Search Documentation for Yahoo! Search Web Services This method does not require authentication. GeoRSS overlay with polyline "flickr.photos.geo.correctLocation", sections: Get zoom level given radius from center Custom position of controls Arguments RSS Request Image Search Documentation for Yahoo! Search READY TO GET STARTED? Change Marker Images Dynamically Use YMapTypeControl to position map types parameters, count)) { … } Summary Request Parameters By applying for an Application ID for this service, you hereby agree to the Terms of Use Submitting Image Queries Rate Limit api_key (Required) Other Features of the Yahoo! Maps AJAX API … RSS Response YEvent, YGeoRSS, YMarker Your API application key. See here for moreTop-Level Elements details. The Image Search Web Service allows you to search the Internet for images. Get an App ID Terms of Service Channel Elements Support & Community Image Elements ? Example Response Item Elements Download all of the cheatsheets and example code in the Yahoo Request URL Maps API Reference Bundle. Condition Codes YAHOO! GROUPS DISCUSSIONS view all <place_types> Examples http://search.yahooapis.com/ImageSearchService/V1/imageSearch For detailed descriptions of the classes and methods in the API, place_type_id="22">neighbourhood</place_type> <place_type yahoo local search code in php Terms of Use Tue, 27 Jan 2009 check out v3.8 Reference Manual. <place_type place_type_id="7">locality</place_type> <place_type <place_type http://search.yahooapis.com/ place_type_id="9">county</place_type> RSS Request place_type_id="8">region</place_type> Remaining, Supporting Classes Request parameters My Web Search API shut down See information on constructing REST queries announcement Introduction and <place_type Prerequisites <place_type ImageSearchService/V1/imageSearch? place_type_id="12">country</place_type> The Weather RSS feed request follows simple HTTP GET syntax: start with a base URL and then add place_type_id="29">continent</place_type> (?). Multiple parameters are separated by an ampersand (&). parameters and values after a question mark Wed, 21 Jan 2009 Parameter Value Description </place_types> appid=YahooDemo&query=Corvette&results=2 The Yahoo! AJAX Maps API lets developers add maps to their web sites using DHTML and JavaScript®. the Weather RSS feed is The base URL for Maps appid string (required) The application ID. See Application IDs for more information. Re: Site Explorer API returns 999 Rate Limit Exceeded are fully embeddable and scriptable using the JavaScript programming language. Yahoo! Maps AS-Flash API's query string (required) The query to search for. Use + to include terms, - to exclude terms, and ? Wed, 21 Jan 2009 Error Codes built-in geocoder means that you can specify a physical address or latitude/longitude coordinates for your map's http://weather.yahooapis.com/forecastrss put quotes around "exact phrase". location, as you like. type all (default), any, or The kind of search to submit: Reminder: Old obsolete versions of Local In this section, Summary shows how to make an RSS request with different parameters; Request Parameters phrase Search (V1, V2) shutting do In order to create and test applications 100: Yahoo! Maps AJAX API, you'll need to use a supported summarizing those parameters. using Invalid API Key shows a table web all returns results with all query terms. Mon, 19 Jan 2009 The API key passed was not valid or has expired. browser: Firefox 2, Internet Explorer 6 or 7, Opera 9 or Safari 3. Newer versions of these browsers are also any returns results with one or more of the query terms. supported. You can code your JavaScript applications usingcurrently unavailable 105: Service your favorite text editor or IDE. phrase returns results containing the query terms as a phrase. SUMMARY results integer: default 10, The number of results to return. The requested service is temporarily unavailable. An application ID is required to use the Yahoo! Maps AJAX API. You can get an application ID here. max 50 The Weather RSS feed request follows simple HTTP GET syntax: start with a base URL and then add 111: Format "xxx" not found start integer: default 1 parameters and values after a question mark (?). Multiple parameters are separated by an starting result position to return (1-based). The finishing position (start The ampersand (&). For For best results, you should launch your web pagesrequested response format was not found. applications The from a web server. However, it's possible to run + results - 1) cannot exceed 1000. the Weather RSS feed there are two parameters: directly from your hard drive by double-clickingMethod This can be donefound 112: on them. "xxx" not by lowering the security settings in format any (default), bmp, Specifies the kind of image file to search for. the Internet Explorer browser or by setting the The requested method was not found. p for location. UniversalBrowserRead property in Firefox. gif, jpeg, png u for degrees units (Fahrenheit or Celsius). adult_ok 114: Invalid SOAP envelope http://weather.yahooapis.com/ no value or 1 The service filters out adult content by default. Enter a 1 to allow adult content. The SOAP envelope send in the requestlocationnot be parsed. required. Use this parameter to indicate the location for the weather forecast as a The could parameter p is Displaying a Yahoo! Map zip code or Location ID. coloration any (default), color, The service returns only the images of the coloration specified (color or 115: Invalid XML-RPC Method Call forecastrss?p=FRXX0076&u=c All the API classes and methods necessary to interact with Yahoo! Mapsdocument couldyour application when The XML-RPC request are availablehttp://weather.yahooapis.com/forecastrss?p=location to not be parsed. bw black-and-white). site string: default no A domain to restrict your searches to (e.g. www.yahoo.com). You may you include Yahoo! Maps AJAX API library in your web page.This example uses the demonstration application value submit up to 30 values (site=www.yahoo.com&site=www.cnn.com). ID "YD-eQRpTl0_JX2E95l_xAFs5UwZUlNQhhn7lj1H"; you cannot use this Application Forand must requestweather for Yahoo! Headquarters in Sunnyvale, CA, use the zip ID example, to get one code for Sunnyvale here. API Explorer (94089): output string: xml The format for the output. If json is requested, the results will be returned (default), json, php in JSON format. If php is requested, the results will be returned in Serialized PHP format. <html> API Explorer : flickr.places.getPlaceTypes http://weather.yahooapis.com/forecastrss?p=94089 <head> callback string The name of the callback function to wrap around the JSON data. The <b><script type="text/javascript" Or use the Location ID for Sunnyvale (USCA1116): following characters are allowed: A-Z a-z 0-9 . [] and _. If output=json has src="http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=YD- not been requested, this parameter has no effect. More information on the
  35. 35. var map = new YMap(document.getElementById('map')); … dev var currentGeoPoint = new YGeoPoint( _c.Lat, _c.Lon ); map.addMarker(currentGeoPoint); … … if (flickcurl_prepare(fc, "flickr.photos.geo.correctLocation", parameters, count)) { … } … http://search.yahooapis.com/ ImageSearchService/V1/imageSearch? appid=YahooDemo&query=Corvette&results=2 http://weather.yahooapis.com/ forecastrss?p=FRXX0076&u=c
  36. 36. dev YQL
  37. 37. dev YQL
  38. 38. dev Bindings YQL
  39. 39. dev Bindings YQL
  40. 40. dev Bindings YQL stmt YQL
  41. 41. dev Bindings YQL stmt YQL select
  42. 42. dev Bindings YQL stmt YQL select desc
  43. 43. dev Bindings YQL stmt YQL select desc show
  44. 44. Why YQL? Thousands of Web Services and sources that provide valuable data Require Developers to read documentation and form URLs/queries. Data is isolated Needs filtering, combining, tweaking, shaping even after it gets to the developer.
  45. 45. YQL Hosted web service and SQL-Like Language Familiar to developers Synonymous with Data access Expressive enough to get the right data. Self describing - show, desc table Allows you to query, filter and join data across any structured data on the web / web services Real time engine
  46. 46. YQL Statement Basics show: lists the supported tables desc: describes the structure of a table select: fetches data insert/update/delete: modify data new today use: use an Open Data Table show tables desc social.contacts
  47. 47. YQL Select Statement SELECT what FROM collection WHERE filter condition IN (sub-select) LIMIT n OFFSET n
  48. 48. Demo: developer.yahoo.com/yql/
  49. 49. Get any data: open data tables
  50. 50. Open Data Tables YQL
  51. 51. Open Data Tables YQL
  52. 52. Open Data Tables YQL
  53. 53. Open Data Tables YQL
  54. 54. Open Data Tables Bindings YQL
  55. 55. Open Data Tables YQL
  56. 56. Open Data Tables YQL
  57. 57. Open Data Tables Map YQL to Endpoint YQL
  58. 58. Open Data Tables Brings the power of the table model to new APIs Schema defines mapping between YQL and Endpoint Keys can either be query, path or matrix parameters Keys can be marked as required YQL Compiler validates existence of required keys
  59. 59. Open Data Tables YQL
  60. 60. Open Data Tables YQL
  61. 61. Open Data Tables
  62. 62. Open Data Tables
  63. 63. USE Verb use ‘http://url-to-def.xml’ as tableName; select * from tableName where key=‘value’... Imports the Table definition Makes it available to following statements as tableName desc tableName - describes the def Acts like a First Class Data Source just like other YQL Tables.
  64. 64. Community: github/datatables.org
  65. 65. Share your work leverage the work of others to make access easier by sharing tables github repository: http://github.com/yql/yql-tables/tree/master datatables.org mirrors the master and builds a single environment with all tables -> faster serving http://developer.yahoo.com/yql/console/?env=http:// datatables.org/alltables.env
  66. 66. Do it your way: <execute>
  67. 67. YQL Execute extends Open Data Tables with server-side code access APIs that require authentication Netflix OAuth, FlickrAuth, Google AuthSub join data across services grab New York Times article tags and generate find associated flickr photos combine multiple searches into a single result: twitter, web, news and image
  68. 68. YQL Execute augment data: city/state to APIs that just return zip code create APIs from web page celebrity birthdays scraped from imdb, caltrain data transformation convert the result from xml to Google's kml format move business logic of your application to the cloud
  69. 69. <execute> Javascript server-side scripting No DOM, events etc, pure JS scripting E4X support - XML literals, filtering ... YQL no longer performs the GET request to the table binding URL Javascript has additional useful global objects y.rest, y.include, y.query... execute tag must return the data that will be the output of the YQL select
  70. 70. hello world <?xml version="1.0" encoding="UTF-8"?> <table xmlns="http://query.yahooapis.com/v1/schema/table.xsd"> <meta> <sampleQuery>select * from {table} where a='cat' and b='dog';</sampleQuery> </meta> <bindings> <select itemPath="" produces="XML"> <urls> <url>http://fake.url/{a}</url> </urls> <inputs> <key id='a' type='xs:string' paramType='path' required="true" /> <key id='b' type='xs:string' paramType='variable' required="true" /> </inputs> <execute><![CDATA[ // Your javascript goes here. We will run it on our servers response.object = <item> <url>{request.url}</url> <a>{a}</a> <b>{b}</b> </item>; ]]></execute> </select> </bindings> </table>
  71. 71. Unified web+image <?xml version="1.0" encoding="UTF-8"?> <table xmlns="http://query.yahooapis.com/v1/schema/table.xsd"> <meta> <author>Nagesh Susarla</author> <documentationURL>See search.web and search.images for more details</documentationURL> </meta> <bindings> <select itemPath="results.result" produces="XML"> <urls> <url></url> </urls> <inputs> <key id="query" type="xs:string" paramType="query" required="true"/> </inputs> <execute><![CDATA[ var qs = query; var search = y.query('select * from search.web(50) where query=@query', {query: qs}).results; var images = []; default xml namespace='http://www.inktomi.com/'; for each (var result in search.result) { images.push(y.query('select * from search.images(1) where query=@query and url=@url', {url:result.url, query:qs})); } var i = 0; for each (var result in search.result) { var image = images[i++].results.result; if (image) { result.image = <image>{image}</image>; } } response.object = search; ]]> </execute> </select> </bindings> </table>
  72. 72. Search Netflix catalog <table xmlns="http://query.yahooapis.com/v1/schema/table.xsd" https="true"> <meta>...</meta> <bindings> <select itemPath="" produces="XML" > <urls><url env="all">http://api.netflix.com/catalog/titles/</url></urls> <paging model="offset"> <start id="start_index" default="0" /> <pagesize id="max_results" max="100" /> <total default="10" /> </paging> <inputs> <key id="term" type="xs:string" paramType="query" required="true" /> <key id="ck" type="xs:string" paramType="variable" required="true" /> <key id="cks" type="xs:string" paramType="variable" required="true" /> </inputs> <execute><![CDATA[ // Include the OAuth libraries from oauth.net y.include("http://oauth.googlecode.com/svn/code/javascript/oauth.js"); y.include("http://oauth.googlecode.com/svn/code/javascript/sha1.js"); // Collect all the parameters var encodedurl = request.url; var accessor = { consumerSecret: cks, tokenSecret: ""}; var message = { action: encodedurl, method: "GET", parameters: [["oauth_consumer_key",ck],["oauth_version","1.0"]]}; OAuth.setTimestampAndNonce(message); // Sign the request OAuth.SignatureMethod.sign(message, accessor); try { // get the content from service along with the OAuth header, and return the result back out response.object = request.contentType('application/xml').header("Authorization", OAuth.getAuthorizationHeader("netflix.com", message.parameters)).get().response; } catch(err) { response.object = {'result':'failure', 'error': err}; } ]]></execute> </select> </bindings> </table>
  73. 73. Just released today INSERT INTO internet
  74. 74. Insert / Update / Delete With INSERT / UPDATE / DELETE SQL verbs developers can modify data on the internet, e.g. create tweets, add blog entries, update DBs etc Open Data Tables specify what fields are needed and how to bind the SQL to the remote web service Some tables with I/U/D Twitter Status, Bit.ly shortener Yahoo profile status, application update stream Amazon SimpleDB
  75. 75. select * from twitter.status where id="2108869549" and username="xxx" and password="yyy" <select itemPath="" produces="XML"> <urls><url>http://twitter.com/statuses/show/{id}.xml</url></urls> <inputs> <key id="username" type="xs:string" required="false" paramType="variable"/> <key id="password" type="xs:string" required="false" paramType="variable"/> <key id="id" type="xs:integer" required="true" paramType="path"/> </inputs> <execute><![CDATA[ var r = null; if (username && password) { y.include("http://yqlblog.net/samples/base64.js"); var authheader = "Basic "+Base64.encode(username+":"+password); r = request.header("Authorization",authheader).get().response; } else { r = request.get().response; } response.object = r; ]]></execute> </select>
  76. 76. insert into twitter.status (status,username,password) values ("new tweet from YQL",”xxx”,”yyy”); <insert itemPath="" produces="XML"> <urls> <url>http://twitter.com/statuses/update.xml</url> </urls> <inputs> <value id="username" type="xs:string" required="true" paramType="variable"/> <value id="password" type="xs:string" required="true" paramType="variable"/> <value id="status" type="xs:string" required="true" paramType="variable"/> </inputs> <execute><![CDATA[ y.include("http://yqlblog.net/samples/base64.js"); var authheader = "Basic "+Base64.encode(username+":"+password); var content = "status="+status; response.object = request.header("Authorization",authheader).post(content).response; ]]></execute> </insert>
  77. 77. delete from twitter.status where id="2108869549" and username="xxx" and password="yyy" <delete itemPath="" produces="XML"> <urls> <url>http://twitter.com/statuses/destroy/{id}.xml</url> </urls> <inputs> <key id="username" type="xs:string" required="true" paramType="variable"/> <key id="password" type="xs:string" required="true" paramType="variable"/> <key id="id" type="xs:string" required="true" paramType="path"/> </inputs> <execute><![CDATA[ y.include("http://yqlblog.net/samples/base64.js"); var authheader = "Basic "+Base64.encode(username+":"+password); response.object = request.header("Authorization",authheader).del().response; ]]></execute> </delete>
  78. 78. Conclusion More easily build applications fewer lines of code data processing done away from app consistent and familiar syntax for all data access iterative environment for developing the query
  79. 79. Conclusion build applications that run faster service in the cloud does the work conversion, filtering, parallel requests... with smaller network footprint fewer (client) calls smaller data amounts closer to the data, fatter pipes
  80. 80. data
  81. 81. YQL select * from internet http://developer.yahoo.com/yql Jonathan Trevor yql-questions@yahoo-inc.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×