Turning a web folder with data into an API using YQL execute
Yesterday “Johan Bouveng”:http://www.foolishpleasure.net/ challenged me on Facebook with another brain teaser. Johan had found a nice resource for weather forecasts for airports. The data came back in “TAF or METAR“:http://www.alaska.faa.gov/fai/afss/metar%20taf/metintro.htm formats and he already had a parser for this (thank f*** – what a mess these formats). Now, what he wanted to have is an API to get the weather forecast data from the following resources:
- “http://weather.noaa.gov/pub/data/forecasts/taf/stations/”:http://weather.noaa.gov/pub/data/forecasts/taf/stations/
- “http://weather.noaa.gov/pub/data/observations/metar/stations/”:http://weather.noaa.gov/pub/data/observations/metar/stations/
Using “YQL”:http://developer.yahoo.com/yql and “YQL execute”:http://developer.yahoo.com/yql/guide/yql-execute-chapter.html this was pretty easy. All I had to do was to write an “open table that reads the correct file”:http://isithackday.com/hacks/airportweather/airportweather.xml.
// check if taf or metar was requested or return an error
if(datatype == 'taf' || datatype == 'metar'){
var returnobj,url;
// get the correct url using the airport ID and format
if(datatype=='metar'){
url = 'http://weather.noaa.gov/pub/data/observations/' +
'metar/stations/' + airportid + '.TXT'
} else {
url = 'http://weather.noaa.gov/pub/data/forecasts/'+
'taf/stations/' + airportid +'.TXT';
}
// do a REST call and get the response back
var out = y.rest(url).get().response;
// if there is no data returned, return an error.
if(out == ''){
returnobj = <error>Airport {airportid} not found.</error>;
// otherwise return the data in the TXT file
} else {
returnobj = <airportweather>{out}</airportweather>;
}
} else{
// error condition for wrong datatype
returnobj = <error>Datatype must be either taf or metar.</error>;
}
// give back the data to YQL
response.object = returnobj;
Having done this you can now use it as a table in YQL:
use "http://isithackday.com/hacks/airportweather/airportweather.xml" as aw;
select * from aw where airportid="AAXX" and datatype="taf";
As you can see, you don’t have to be a genius to build your own API :)


November 30th, 2009 at 1:25 pm
This is so beautiful, and useful. This is example will help many people to API:ify the internets. I will sell my soul to Yahoo. Thanks man!
/J
November 30th, 2009 at 2:12 pm
This guy blows me away RT @codepo8 Turning a web folder full of data files into an API using YQL execute: [link to post]
– Posted using Chat Catcher
November 30th, 2009 at 2:37 pm
RT @codepo8: Turning a web folder full of data files into an API using YQL execute: [link to post]
– Posted using Chat Catcher
November 30th, 2009 at 3:39 pm
RT @jaggeree @codepo8 Turning a web folder full of data files into an API using YQL execute: [link to post] – oh hello awesome potential
– Posted using Chat Catcher
November 30th, 2009 at 4:35 pm
RT @codepo8: Turning a web folder full of data files into an API using YQL execute: [link to post] – oh hello awesome potential
– Posted using Chat Catcher
November 30th, 2009 at 4:37 pm
RT @codepo8 Turning a web folder full of data files into an API using YQL execute: [link to post]
– Posted using Chat Catcher
November 30th, 2009 at 4:37 pm
Wait till I come! » Turning a web folder with data into an API …: Yesterday Johan Bouveng challenged me on Faceb… [link to post]
– Posted using Chat Catcher
November 30th, 2009 at 9:40 pm
RT @codepo8: Turning a web folder full of data files into an API using YQL execute: [link to post] (very cool!)
– Posted using Chat Catcher