YQL - Christian Heilmann Open Hack London presentation

73
Remixing web data for your hacks the easy way YQL – the can opener of the web

Transcript of YQL - Christian Heilmann Open Hack London presentation

Page 1: YQL - Christian Heilmann Open Hack London presentation

Remixing web data for your hacks the easy wayYQL – the can opener of the web

Page 2: YQL - Christian Heilmann Open Hack London presentation

Hacking together systems in 24 hours is a lot of fun.

Page 3: YQL - Christian Heilmann Open Hack London presentation

But you want to spend that time thinking about the interface.

Page 4: YQL - Christian Heilmann Open Hack London presentation

And not how you get to the right data in the right format.

Page 5: YQL - Christian Heilmann Open Hack London presentation

The web is full of juicy and long lasting data.

http://www.flickr.com/photos/clspeace/162336973/

Page 6: YQL - Christian Heilmann Open Hack London presentation

And there is a lot of it around.

http://www.flickr.com/photos/tudor/2981410947/

Page 7: YQL - Christian Heilmann Open Hack London presentation

However, our attempts to get to it can be clumsy.

http://www.flickr.com/photos/lumachrome/2140368742/

Page 8: YQL - Christian Heilmann Open Hack London presentation

What we need is an easy way to get to that data.

http://www.flickr.com/photos/careytilden/115435226/

Page 9: YQL - Christian Heilmann Open Hack London presentation

We had a way to do that for quite a while now.

Page 10: YQL - Christian Heilmann Open Hack London presentation

http://pipes.yahoo.com/

Page 11: YQL - Christian Heilmann Open Hack London presentation

Pipes, however is high end technology…

http://www.flickr.com/photos/axio/2346342672/

Page 12: YQL - Christian Heilmann Open Hack London presentation

We’re developers, not interface users.

http://www.flickr.com/photos/codepo8/2278641937/

Page 13: YQL - Christian Heilmann Open Hack London presentation

So for a long time people asked Yahoo for a command line version of pipes.

Can we have one?

Page 14: YQL - Christian Heilmann Open Hack London presentation

Yes, we can!

Page 15: YQL - Christian Heilmann Open Hack London presentation

The Yahoo Query Language, or short YQL is a unified interface language to the web.

http://developer.yahoo.com/yql/

Page 16: YQL - Christian Heilmann Open Hack London presentation

Using YQL, accessing the web and its services becomes as easy as SQL:

select {what} from {service} where {condition}

Page 17: YQL - Christian Heilmann Open Hack London presentation

Say you want kittens in your hack (who doesn’t?)

select * from flickr.photos.search where text="kitten"

Page 18: YQL - Christian Heilmann Open Hack London presentation

Say you want kittens in your hack (who doesn’t?)

Page 19: YQL - Christian Heilmann Open Hack London presentation

Say you only want 5 kittens

select * from flickr.photos.search where text="kitten" limit 5

Page 20: YQL - Christian Heilmann Open Hack London presentation

Say you only want 5 kittens

Page 21: YQL - Christian Heilmann Open Hack London presentation

Nice, but where can you get this?

Page 22: YQL - Christian Heilmann Open Hack London presentation

YQL is a REST API in itself, and it has two endpoints.

Page 23: YQL - Christian Heilmann Open Hack London presentation

The public endpoint does not need any authentication.

http://query.yahooapis.com/v1/public/yql?q={query}&format={format}

Page 24: YQL - Christian Heilmann Open Hack London presentation

The private endpoint needs oauth authentication.

http://query.yahooapis.com/v1/yql?q={query}&format={format}

http://developer.yahoo.com/yql/guide/authorization-access.html

Page 25: YQL - Christian Heilmann Open Hack London presentation

Output formats are XML or JSON. JSON also allows for a callback parameter to use the output directly as JSON-P.

Page 26: YQL - Christian Heilmann Open Hack London presentation

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from flickr.photos.search%20where%20text=%22kitten%22limit%205&format=json&callback=meow

Page 27: YQL - Christian Heilmann Open Hack London presentation
Page 28: YQL - Christian Heilmann Open Hack London presentation

You can mix and match several web services using the in() command.

Page 29: YQL - Christian Heilmann Open Hack London presentation

Guess what this does:

select * from flickr.photos.info where photo_id in (select id from flickr.photos.search where woe_id in (select woeid from geo.places where text='london,uk') and license=4)

Page 30: YQL - Christian Heilmann Open Hack London presentation

Find photos in London, UK with a Creative Commons “By” license and give me all the information you have about them.

Page 31: YQL - Christian Heilmann Open Hack London presentation

select * from flickr.photos.info where photo_id in (select id from flickr.photos.search where woe_id in (select woeid from geo.places where text='london,uk') and license=4)

Page 32: YQL - Christian Heilmann Open Hack London presentation

Using a command like this and some out-of-the-box UI elements like Yahoo Maps and the YUI carousel, you can build something *very* quickly.

Page 33: YQL - Christian Heilmann Open Hack London presentation

http://isithackday.com/hacks/cantine/index.php?loc=covent+garden

Page 34: YQL - Christian Heilmann Open Hack London presentation

Instead of selecting all the information you can also limit the results:

select name,url from upcoming.venue where metro_id in (select id from upcoming.metro where search_text="stokey")

Page 35: YQL - Christian Heilmann Open Hack London presentation

select name,url from upcoming.venue where metro_id in (select id from upcoming.metro where search_text="stokey")

Page 36: YQL - Christian Heilmann Open Hack London presentation

The diagnostics part of the returned data shows you what happened and how long it took

Page 37: YQL - Christian Heilmann Open Hack London presentation

Here’s what Yahoo offers you in this format:

flickr.photos.exifflickr.photos.infoflickr.photos.interestingnessflickr.photos.recentflickr.photos.searchflickr.photos.sizesflickr.placesflickr.places.infogeo.placesgeo.places.ancestorsgeo.places.belongtosgeo.places.childrengeo.places.neighborsgeo.places.parentgeo.places.siblingsgeo.placetypesgnip.activity

local.searchmusic.artist.idmusic.artist.popularmusic.artist.searchmusic.artist.similarmusic.release.artistmusic.release.idmusic.release.popularmusic.release.searchmusic.track.idmusic.track.popularmusic.track.searchmusic.video.categorymusic.video.idmusic.video.popularmusic.video.searchmusic.video.similar

mybloglog.community.findmybloglog.membermybloglog.member.contactsmybloglog.member.newwithcontactsmybloglog.member.newwithmemybloglog.members.findmybloglog.stats.findupcoming.categoryupcoming.countryupcoming.eventsupcoming.events.bestinplaceupcoming.groupsupcoming.metroupcoming.stateupcoming.userupcoming.venue

Page 38: YQL - Christian Heilmann Open Hack London presentation

Here’s what Yahoo offers you in this format:

search.imagessearch.newssearch.siteexplorer.inlinkssearch.siteexplorer.pagessearch.spellingsearch.suggestsearch.termextractsearch.websocial.connectionssocial.contactssocial.presencesocial.profilesocial.updatesweather.forecastyahoo.identityyap.setsmallview

search.imagessearch.newssearch.siteexplorer.inlinkssearch.siteexplorer.pagessearch.spellingsearch.suggestsearch.termextractsearch.websocial.connectionssocial.contactssocial.presencesocial.profilesocial.updatesweather.forecastyahoo.identityyap.setsmallview

search.imagessearch.newssearch.siteexplorer.inlinkssearch.siteexplorer.pagessearch.spellingsearch.suggestsearch.termextractsearch.websocial.connectionssocial.contactssocial.presencesocial.profilesocial.updatesweather.forecastyahoo.identityyap.setsmallview

Page 39: YQL - Christian Heilmann Open Hack London presentation

You want even more?

http://www.flickr.com/photos/verylastexcitingmoment/3123597774/

Page 40: YQL - Christian Heilmann Open Hack London presentation

Alright, how about this?

atomcsvfeedhtml

jsonmicroformatsrssxml

Page 41: YQL - Christian Heilmann Open Hack London presentation

Telegraph’s headlines anyone?select * from html where url='http://www.telegraph.co.uk/' and xpath='//h3/a'

Page 42: YQL - Christian Heilmann Open Hack London presentation

Telegraph’s headlines anyone?

Page 43: YQL - Christian Heilmann Open Hack London presentation

You can dynamically create YQL queries to collate several sources…

Page 44: YQL - Christian Heilmann Open Hack London presentation

Then use cURL to pull them off the web with one single http request!

Page 45: YQL - Christian Heilmann Open Hack London presentation

YQL caches and compresses the results for you.

Pretty easy, isn’t it?

Page 46: YQL - Christian Heilmann Open Hack London presentation

Here’s another fun part:Anyone can be part of the YQL interface.

Page 47: YQL - Christian Heilmann Open Hack London presentation

All we need the data provider to do is to create a schema that explains their data structure.

http://developer.yahoo.com/yql/guide/yql-opentables-chapter.html

Page 48: YQL - Christian Heilmann Open Hack London presentation

And people do…amazonbitlydeliciousdopplretsyfriendfeedgithubGreaderguardianimdbiplocationlastfmnestorianetflix

nmmnytopensocialsearchshoppingsocialtwitterupdate.groovyweatherwesabewhitepagesyahooyelpzillow

http://github.com/spullara/yql-tables/tree/master

Page 49: YQL - Christian Heilmann Open Hack London presentation

For example the national maritime museum:

select * from nmm.archive.search where searchterm=‘horatio nelson'

Page 50: YQL - Christian Heilmann Open Hack London presentation

select * from nmm.archive.search where searchterm=‘horatio nelson'

Page 51: YQL - Christian Heilmann Open Hack London presentation

That’s pretty cool – allowing anyone to be part of this interface.

Page 52: YQL - Christian Heilmann Open Hack London presentation

The only shame is that you can’t do all the things in YQL that you can do in Pipes – for example string manipulation.

Page 53: YQL - Christian Heilmann Open Hack London presentation

We wondered how to make this possible.

One thing we didn’t want to sacrifice is the simplicity of the language itself.

Page 54: YQL - Christian Heilmann Open Hack London presentation

So instead of inventing an own language, we decided to piggy-back on one you already know.

Page 55: YQL - Christian Heilmann Open Hack London presentation

YQL execute allows you to embed JavaScript in the open table schema that runs on the YQL server and converts the data for you.

http://developer.yahoo.com/yql/guide/yql-execute-chapter.html

Page 56: YQL - Christian Heilmann Open Hack London presentation

For example you can augment an existing service to do something different.

The following example adds a rank to search results.

http://www.yqlblog.net/samples/searchrank.xml

Page 57: YQL - Christian Heilmann Open Hack London presentation
Page 58: YQL - Christian Heilmann Open Hack London presentation
Page 59: YQL - Christian Heilmann Open Hack London presentation

Stored as XML this can be used in a YQL query:

use 'http://yqlblog.net/samples/searchrank.xml' as searchrank; select * from searchrank where query='pizza' and dispurl like '%pizzahut%'

Page 60: YQL - Christian Heilmann Open Hack London presentation
Page 61: YQL - Christian Heilmann Open Hack London presentation

Anyways, the *easiest* way to start with YQL is to use the console.

http://developer.yahoo.com/yql/console/

Page 62: YQL - Christian Heilmann Open Hack London presentation
Page 63: YQL - Christian Heilmann Open Hack London presentation
Page 64: YQL - Christian Heilmann Open Hack London presentation
Page 65: YQL - Christian Heilmann Open Hack London presentation
Page 66: YQL - Christian Heilmann Open Hack London presentation
Page 67: YQL - Christian Heilmann Open Hack London presentation
Page 68: YQL - Christian Heilmann Open Hack London presentation
Page 69: YQL - Christian Heilmann Open Hack London presentation
Page 70: YQL - Christian Heilmann Open Hack London presentation
Page 71: YQL - Christian Heilmann Open Hack London presentation

Of course, you can also spend half the hack day reading API docs

Page 72: YQL - Christian Heilmann Open Hack London presentation

Check out some code examples on.

http://isithackday.com/hacks/ohd-london

Page 73: YQL - Christian Heilmann Open Hack London presentation

THANKS!

Chris Heilmannhttp://twitter.com/codepo8