Turning a web folder with data into an API using YQL execute
Monday, November 30th, 2009Yesterday Johan Bouveng 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 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/observations/metar/stations/
Using YQL and YQL execute this was pretty easy. All I had to do was to write an open table that reads the correct file.
// 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 = Airport {airportid} not found. ;
// otherwise return the data in the TXT file
} else {
returnobj = {out} ;
}
} else{
// error condition for wrong datatype
returnobj = Datatype must be either taf or metar. ;
}
// 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 :)