diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2010-03-14 01:55:33 +0100 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2010-03-14 01:55:33 +0100 |
commit | 237470c8f45190b213e3a173ce6ae1a74b3e11fe (patch) | |
tree | 7f53c8144761947d4bde20715bcad34f4be0d6c0 /weather.lua | |
parent | 9a82d4113a8271b7dfc7506f2b07379e3ede89a8 (diff) | |
download | vicious-legacy-237470c8f45190b213e3a173ce6ae1a74b3e11fe.tar.xz |
API: transform widgets namespace table to a directory
Diffstat (limited to 'weather.lua')
-rw-r--r-- | weather.lua | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/weather.lua b/weather.lua deleted file mode 100644 index 8e78e8b..0000000 --- a/weather.lua +++ /dev/null @@ -1,83 +0,0 @@ ---------------------------------------------------- --- Licensed under the GNU General Public License v2 --- * (c) 2010, Adrian C. <anrxc@sysphere.org> ---------------------------------------------------- - --- {{{ Grab environment -local tonumber = tonumber -local io = { popen = io.popen } -local setmetatable = setmetatable -local math = { ceil = math.ceil } -local string = { match = string.match } -local helpers = require("vicious.helpers") --- }}} - - --- Weather: provides weather information for a requested station -module("vicious.weather") - - --- {{{ Weather widget type -local function worker(format, station) - -- Default values - local weather = { - ["{city}"] = "N/A", - ["{wind}"] = "N/A", - ["{windmph}"] = "N/A", - ["{windkmh}"] = "N/A", - ["{sky}"] = "N/A", - ["{weather}"] = "N/A", - ["{tempf}"] = "N/A", - ["{tempc}"] = "N/A", - ["{humid}"] = "N/A", - ["{press}"] = "N/A" - } - - -- Get weather forceast by the station ICAO code, from: - -- * US National Oceanic and Atmospheric Administration - local noaa = "http://weather.noaa.gov/pub/data/observations/metar/decoded/" - local f = io.popen("curl --connect-timeout 1 -fsm 3 "..noaa..station..".TXT") - local ws = f:read("*all") - f:close() - - -- Check if there was a timeout or a problem with the station - if ws == nil then return weather end - - weather["{city}"] = -- City and/or area - string.match(ws, "^(.+)%,.*%([%u]+%)") or weather["{city}"] - weather["{wind}"] = -- Wind direction and degrees if available - string.match(ws, "Wind:[%s][%a]+[%s][%a]+[%s](.+)[%s]at.+$") or weather["{wind}"] - weather["{windmph}"] = -- Wind speed in MPH if available - string.match(ws, "Wind:[%s].+[%s]at[%s]([%d]+)[%s]MPH") or weather["{windmph}"] - weather["{sky}"] = -- Sky conditions if available - string.match(ws, "Sky[%s]conditions:[%s](.-)[%c]") or weather["{sky}"] - weather["{weather}"] = -- Weather conditions if available - string.match(ws, "Weather:[%s](.-)[%c]") or weather["{weather}"] - weather["{tempf}"] = -- Temperature in fahrenheit - string.match(ws, "Temperature:[%s]([%-]?[%d%.]+).*[%c]") or weather["{tempf}"] - weather["{humid}"] = -- Relative humidity in percent - string.match(ws, "Relative[%s]Humidity:[%s]([%d]+)%%") or weather["{humid}"] - weather["{press}"] = -- Pressure in hPa - string.match(ws, "Pressure[%s].+%((.+)[%s]hPa%)") or weather["{press}"] - - -- Wind speed in km/h if MPH was available - if weather["{windmph}"] ~= "N/A" then - weather["{windmph}"] = tonumber(weather["{windmph}"]) - weather["{windkmh}"] = math.ceil(weather["{windmph}"] * 1.6) - end -- Temperature in °C if °F was available - if weather["{tempf}"] ~= "N/A" then - weather["{tempf}"] = tonumber(weather["{tempf}"]) - weather["{tempc}"] = math.ceil((weather["{tempf}"] - 32) * 5/9) - end -- Capitalize some stats so they don't look so out of place - if weather["{sky}"] ~= "N/A" then - weather["{sky}"] = helpers.capitalize(weather["{sky}"]) - end - if weather["{weather}"] ~= "N/A" then - weather["{weather}"] = helpers.capitalize(weather["{weather}"]) - end - - return weather -end --- }}} - -setmetatable(_M, { __call = function(_, ...) return worker(...) end }) |