weather-underground 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +3 -0
- data/History.txt +3 -0
- data/Manifest.txt +7 -0
- data/Rakefile +1 -1
- data/lib/weather-underground.rb +1 -1
- data/lib/weather-underground/alerts.rb +61 -0
- data/lib/weather-underground/base.rb +120 -0
- data/lib/weather-underground/current_observation.rb +115 -0
- data/lib/weather-underground/forecast.rb +124 -0
- data/lib/weather-underground/geo_lookup.rb +7 -0
- data/lib/weather-underground/utils.rb +5 -0
- metadata +10 -3
data/Gemfile
ADDED
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
+
Gemfile
|
1
2
|
History.txt
|
2
3
|
Manifest.txt
|
3
4
|
PostInstall.txt
|
4
5
|
README.rdoc
|
5
6
|
Rakefile
|
6
7
|
lib/weather-underground.rb
|
8
|
+
lib/weather-underground/alerts.rb
|
9
|
+
lib/weather-underground/base.rb
|
10
|
+
lib/weather-underground/current_observation.rb
|
11
|
+
lib/weather-underground/forecast.rb
|
12
|
+
lib/weather-underground/geo_lookup.rb
|
7
13
|
lib/weather-underground/uploader.rb
|
14
|
+
lib/weather-underground/utils.rb
|
8
15
|
script/console
|
9
16
|
script/destroy
|
10
17
|
script/generate
|
data/Rakefile
CHANGED
@@ -19,7 +19,7 @@ $hoe = Hoe.spec 'weather-underground' do
|
|
19
19
|
self.rubyforge_name = 'sdaguegems' # self.name # TODO this is default value
|
20
20
|
self.extra_rdoc_files = ["README.rdoc"]
|
21
21
|
self.readme_file = "README.rdoc"
|
22
|
-
self.extra_deps = [['temperature', '>= 1.0.0'], 'rest-client', 'happymapper']
|
22
|
+
self.extra_deps = [['temperature', '>= 1.0.0'], ['rest-client', '>=0'], ['happymapper','>=0'] ]
|
23
23
|
# self.extra_deps = [['activesupport','>= 2.0.2']]
|
24
24
|
|
25
25
|
end
|
data/lib/weather-underground.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Weather Underground API subject to TOS at http://www.wunderground.com/members/tos.asp#api
|
2
|
+
|
3
|
+
module WeatherUnderground
|
4
|
+
|
5
|
+
class AlertExpires
|
6
|
+
include HappyMapper
|
7
|
+
|
8
|
+
tag 'expires'
|
9
|
+
|
10
|
+
attribute 'epoch', Integer
|
11
|
+
content 'text'
|
12
|
+
|
13
|
+
def text
|
14
|
+
@text
|
15
|
+
end
|
16
|
+
|
17
|
+
def datetime
|
18
|
+
Time.at( @epoch )
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class AlertDate
|
23
|
+
include HappyMapper
|
24
|
+
|
25
|
+
tag 'date'
|
26
|
+
|
27
|
+
attribute 'epoch', Integer
|
28
|
+
content 'text'
|
29
|
+
|
30
|
+
def text
|
31
|
+
@text
|
32
|
+
end
|
33
|
+
|
34
|
+
def datetime
|
35
|
+
Time.at( @epoch )
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class Alert
|
40
|
+
include HappyMapper
|
41
|
+
|
42
|
+
tag 'AlertItem'
|
43
|
+
|
44
|
+
element :type, String
|
45
|
+
element :description, String
|
46
|
+
has_one :date, AlertDate
|
47
|
+
has_one :expires, AlertExpires
|
48
|
+
element :message, String
|
49
|
+
element :phenomena, String
|
50
|
+
element :significance, String
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
class Alerts
|
55
|
+
include HappyMapper
|
56
|
+
|
57
|
+
tag 'alerts'
|
58
|
+
|
59
|
+
has_many :alerts, Alert
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'happymapper'
|
2
|
+
require 'rest_client'
|
3
|
+
|
4
|
+
module WeatherUnderground
|
5
|
+
|
6
|
+
# This is an data retriever for the weather underground personal weather
|
7
|
+
# station service, as found at http://wunderground.com.
|
8
|
+
#
|
9
|
+
# It is build from the documentation provided at
|
10
|
+
# http://wiki.wunderground.com/index.php/API_-_XML
|
11
|
+
class Base
|
12
|
+
include Utils
|
13
|
+
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
end
|
17
|
+
|
18
|
+
# Return the current observed weather data from location for +loc+
|
19
|
+
#
|
20
|
+
# +loc+ can be:
|
21
|
+
# * zipcode (US or Canadian)
|
22
|
+
# * city state; city, state
|
23
|
+
# * city
|
24
|
+
# * state
|
25
|
+
# * country
|
26
|
+
# * airport code (3-letter or 4-letter)
|
27
|
+
# * lat,lon
|
28
|
+
def CurrentObservations( loc )
|
29
|
+
WXCurrentObXML( loc )
|
30
|
+
end
|
31
|
+
|
32
|
+
# Return the forecast weather data from location for +loc+
|
33
|
+
#
|
34
|
+
# A +SimpleForecast+ contains more detailed data for each day than
|
35
|
+
# a +TextForcase+ of the same location.
|
36
|
+
#
|
37
|
+
# +loc+ can be:
|
38
|
+
# * zipcode (US or Canadian)
|
39
|
+
# * city state; city, state
|
40
|
+
# * city
|
41
|
+
# * state
|
42
|
+
# * country
|
43
|
+
# * airport code (3-letter or 4-letter)
|
44
|
+
# * lat,lon
|
45
|
+
def SimpleForecast( loc )
|
46
|
+
f = ForecastXML( loc )
|
47
|
+
f.simple_forecast
|
48
|
+
end
|
49
|
+
|
50
|
+
# Return the forecast weather data from location for +loc+
|
51
|
+
#
|
52
|
+
# A +TextForecast+ contains basic data in sentence form for the
|
53
|
+
# location queried. If you need more detailed data use
|
54
|
+
# a +SimpleForecast+
|
55
|
+
#
|
56
|
+
# +loc+ can be:
|
57
|
+
# * zipcode (US or Canadian)
|
58
|
+
# * city state; city, state
|
59
|
+
# * city
|
60
|
+
# * state
|
61
|
+
# * country
|
62
|
+
# * airport code (3-letter or 4-letter)
|
63
|
+
# * lat,lon
|
64
|
+
def TextForecast( loc )
|
65
|
+
f = ForecastXML( loc )
|
66
|
+
f.text_forecast
|
67
|
+
end
|
68
|
+
|
69
|
+
#--
|
70
|
+
# TODO: Implement GeoLookup
|
71
|
+
#++
|
72
|
+
def GeoLookup( loc )
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
# Return any active weather alerts for +loc+
|
77
|
+
#
|
78
|
+
# +loc+ can be:
|
79
|
+
# * zipcode (US or Canadian)
|
80
|
+
# * city state; city, state
|
81
|
+
# * city
|
82
|
+
# * state
|
83
|
+
# * country
|
84
|
+
# * airport code (3-letter or 4-letter)
|
85
|
+
# * lat,lon
|
86
|
+
def Alerts( loc )
|
87
|
+
AlertsXML( loc )
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def GeoLookupXML( loc )
|
93
|
+
#TODO: Build Out
|
94
|
+
puts "GeoLookup not yet implemented"
|
95
|
+
|
96
|
+
#base_url = "http://api.wunderground.com/auto/wui/geo/GeoLookupXML/index.xml"
|
97
|
+
#location_xml = RestClient.get base_url, {:params => {:query => loc}}
|
98
|
+
#GeoLookup.parse( location_xml )
|
99
|
+
end
|
100
|
+
|
101
|
+
def AlertsXML( loc )
|
102
|
+
base_url = "http://api.wunderground.com/auto/wui/geo/AlertsXML/index.xml"
|
103
|
+
alert_xml = RestClient.get base_url, {:params => {:query => loc}}
|
104
|
+
Alerts.parse( alert_xml )
|
105
|
+
end
|
106
|
+
|
107
|
+
def WXCurrentObXML( loc )
|
108
|
+
base_url = "http://api.wunderground.com/auto/wui/geo/WXCurrentObXML/index.xml"
|
109
|
+
current_observations_xml = RestClient.get base_url, {:params => {:query => loc}}
|
110
|
+
CurrentObservation::Base.parse( current_observations_xml )
|
111
|
+
end
|
112
|
+
|
113
|
+
def ForecastXML( loc )
|
114
|
+
base_url = "http://api.wunderground.com/auto/wui/geo/ForecastXML/index.xml"
|
115
|
+
|
116
|
+
forecast_xml = RestClient.get base_url, {:params => {:query => loc}}
|
117
|
+
Forecast::Base.parse( forecast_xml )
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module WeatherUnderground
|
2
|
+
module CurrentObservation
|
3
|
+
|
4
|
+
class IconSet
|
5
|
+
include HappyMapper
|
6
|
+
|
7
|
+
tag 'icon_set'
|
8
|
+
|
9
|
+
attribute :name, String
|
10
|
+
element :icon_url, String
|
11
|
+
end
|
12
|
+
|
13
|
+
class Icons
|
14
|
+
include HappyMapper
|
15
|
+
|
16
|
+
tag 'icons'
|
17
|
+
|
18
|
+
has_many :icon_sets, IconSet
|
19
|
+
end
|
20
|
+
|
21
|
+
class ObservationLocation
|
22
|
+
include HappyMapper
|
23
|
+
|
24
|
+
tag 'observation_location'
|
25
|
+
|
26
|
+
element :full, String
|
27
|
+
element :city, String
|
28
|
+
element :state, String
|
29
|
+
element :country, String
|
30
|
+
element :latitude, String
|
31
|
+
element :longitude, String
|
32
|
+
element :elevation, String
|
33
|
+
end
|
34
|
+
|
35
|
+
class DisplayLocation
|
36
|
+
include HappyMapper
|
37
|
+
|
38
|
+
tag 'display_location'
|
39
|
+
|
40
|
+
element :full, String
|
41
|
+
element :city, String
|
42
|
+
element :state, String
|
43
|
+
element :state_name, String
|
44
|
+
element :country, String
|
45
|
+
element :zip, String
|
46
|
+
element :latitude, String
|
47
|
+
element :longitude, String
|
48
|
+
element :elevation, String
|
49
|
+
end
|
50
|
+
|
51
|
+
class Image
|
52
|
+
include HappyMapper
|
53
|
+
|
54
|
+
tag 'image'
|
55
|
+
|
56
|
+
element :url, String
|
57
|
+
element :title, String
|
58
|
+
element :link, String
|
59
|
+
end
|
60
|
+
|
61
|
+
class Base
|
62
|
+
include HappyMapper
|
63
|
+
|
64
|
+
tag 'current_observation'
|
65
|
+
|
66
|
+
element :credit, String
|
67
|
+
element :credit_URL, String
|
68
|
+
element :station_id, String
|
69
|
+
element :image, Image
|
70
|
+
element :display_location, DisplayLocation
|
71
|
+
element :observation_location, ObservationLocation
|
72
|
+
|
73
|
+
element :station_id, String
|
74
|
+
element :observation_time, String
|
75
|
+
element :observation_time_rfc822, String
|
76
|
+
element :observation_epoch, String
|
77
|
+
element :local_time, String
|
78
|
+
element :local_time_rfc822, String
|
79
|
+
element :local_epoch, String
|
80
|
+
element :weather, String
|
81
|
+
element :temperature_string, String
|
82
|
+
element :temp_f, String
|
83
|
+
element :temp_c, String
|
84
|
+
element :relative_humidity, String
|
85
|
+
element :wind_string, String
|
86
|
+
element :wind_dir, String
|
87
|
+
element :wind_degrees, String
|
88
|
+
element :wind_mph, String
|
89
|
+
element :wind_gust_mph, String
|
90
|
+
element :pressure_string, String
|
91
|
+
element :pressure_mb, String
|
92
|
+
element :pressure_in, String
|
93
|
+
element :dewpoint_string, String
|
94
|
+
element :dewpoint_f, String
|
95
|
+
element :dewpoint_c, String
|
96
|
+
element :heat_index_string, String
|
97
|
+
element :heat_index_f, String
|
98
|
+
element :heat_index_c, String
|
99
|
+
element :windchill_string, String
|
100
|
+
element :windchill_f, String
|
101
|
+
element :windchill_c, String
|
102
|
+
element :visibility_mi, String
|
103
|
+
element :visibility_km, String
|
104
|
+
|
105
|
+
element :icons, Icons
|
106
|
+
|
107
|
+
element :icon_url_base, String
|
108
|
+
element :icon_url_name, String
|
109
|
+
element :icon, String
|
110
|
+
element :forecast_url, String
|
111
|
+
element :history_url, String
|
112
|
+
element :ob_url, String
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# Weather Underground API subject to TOS at http://www.wunderground.com/members/tos.asp#api
|
2
|
+
module WeatherUnderground
|
3
|
+
module Forecast
|
4
|
+
class High
|
5
|
+
include HappyMapper
|
6
|
+
|
7
|
+
tag 'high'
|
8
|
+
|
9
|
+
element :fahrenheit, Float
|
10
|
+
element :celsius, Float
|
11
|
+
|
12
|
+
def f
|
13
|
+
@fahrenheit
|
14
|
+
end
|
15
|
+
|
16
|
+
def c
|
17
|
+
@celsius
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Low
|
22
|
+
include HappyMapper
|
23
|
+
|
24
|
+
tag 'low'
|
25
|
+
|
26
|
+
element :fahrenheit, Float
|
27
|
+
element :celsius, Float
|
28
|
+
|
29
|
+
def f
|
30
|
+
@fahrenheit
|
31
|
+
end
|
32
|
+
|
33
|
+
def c
|
34
|
+
@celsius
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Date
|
39
|
+
include HappyMapper
|
40
|
+
|
41
|
+
tag 'date'
|
42
|
+
|
43
|
+
element :epoch, Integer
|
44
|
+
element :pretty_short, String
|
45
|
+
element :pretty, String
|
46
|
+
element :day, Integer
|
47
|
+
element :month, Integer
|
48
|
+
element :year, Integer
|
49
|
+
element :yday, Integer
|
50
|
+
element :hour, Integer
|
51
|
+
element :min, Integer
|
52
|
+
element :sec, Integer
|
53
|
+
element :isdst, Boolean
|
54
|
+
element :monthname, String
|
55
|
+
element :weekday_short, String
|
56
|
+
element :weekday, String
|
57
|
+
element :ampm, String
|
58
|
+
element :tz_short, String
|
59
|
+
element :tz_long, String
|
60
|
+
end
|
61
|
+
|
62
|
+
class SimpleForecastDay
|
63
|
+
include HappyMapper
|
64
|
+
|
65
|
+
tag 'forecastday'
|
66
|
+
|
67
|
+
element :period, Integer
|
68
|
+
element :icon, String
|
69
|
+
element :conditions, String
|
70
|
+
element :icon, String
|
71
|
+
element :skyicon, String
|
72
|
+
has_one :date_info, Date
|
73
|
+
has_one :high, High
|
74
|
+
has_one :low, Low
|
75
|
+
|
76
|
+
attr_accessor :datetime
|
77
|
+
|
78
|
+
after_parse { |o|
|
79
|
+
o.datetime = Time.at( o.date_info.epoch ) if o.date_info
|
80
|
+
o.date_info = nil
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
class TextForecastDay
|
85
|
+
include HappyMapper
|
86
|
+
|
87
|
+
tag 'forecastday'
|
88
|
+
|
89
|
+
element :period, Integer
|
90
|
+
element :icon, String
|
91
|
+
element :title, String
|
92
|
+
element :text, String, :tag => 'fcttext'
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
class TextForecast
|
97
|
+
include HappyMapper
|
98
|
+
|
99
|
+
tag 'txt_forecast'
|
100
|
+
element :date, Time
|
101
|
+
element :number, Integer
|
102
|
+
has_many :days, TextForecastDay
|
103
|
+
end
|
104
|
+
|
105
|
+
class SimpleForecast
|
106
|
+
include HappyMapper
|
107
|
+
|
108
|
+
tag 'simpleforecast'
|
109
|
+
|
110
|
+
has_many :days, SimpleForecastDay
|
111
|
+
end
|
112
|
+
|
113
|
+
class Base
|
114
|
+
include HappyMapper
|
115
|
+
|
116
|
+
tag 'forecast'
|
117
|
+
|
118
|
+
has_one :simple_forecast, SimpleForecast
|
119
|
+
has_one :text_forecast, TextForecast
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weather-underground
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 1.1.
|
9
|
+
- 1
|
10
|
+
version: 1.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sean Dague
|
@@ -125,13 +125,20 @@ extra_rdoc_files:
|
|
125
125
|
- PostInstall.txt
|
126
126
|
- README.rdoc
|
127
127
|
files:
|
128
|
+
- Gemfile
|
128
129
|
- History.txt
|
129
130
|
- Manifest.txt
|
130
131
|
- PostInstall.txt
|
131
132
|
- README.rdoc
|
132
133
|
- Rakefile
|
133
134
|
- lib/weather-underground.rb
|
135
|
+
- lib/weather-underground/alerts.rb
|
136
|
+
- lib/weather-underground/base.rb
|
137
|
+
- lib/weather-underground/current_observation.rb
|
138
|
+
- lib/weather-underground/forecast.rb
|
139
|
+
- lib/weather-underground/geo_lookup.rb
|
134
140
|
- lib/weather-underground/uploader.rb
|
141
|
+
- lib/weather-underground/utils.rb
|
135
142
|
- script/console
|
136
143
|
- script/destroy
|
137
144
|
- script/generate
|