Turning a web folder with data into an API using YQL execute
Monday, November 30th, 2009 at 1:00 pmYesterday 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.
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:
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 :)
Tags: [api](/tag/api/), [execute](/tag/execute/), [noaa](/tag/noaa/), [table](/tag/table/), [weather](/tag/weather/), [yql](/tag/yql/)