rubyweather 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/README +4 -4
- data/lib/weather/forecast.rb +36 -32
- data/lib/weather/service.rb +8 -4
- data/test/profiler.rb +52 -0
- data/test/service_test.rb +2 -0
- metadata +50 -49
- data/example/weather_32/WS_FTP.LOG +0 -49
data/README
CHANGED
@@ -14,14 +14,14 @@ or install as a RubyGem:
|
|
14
14
|
|
15
15
|
sudo gem install rubyweather
|
16
16
|
|
17
|
-
You can also check out the latest copy via subversion from
|
18
|
-
If you would like to contribute back your changes to the code, please contact me via the
|
19
|
-
site to obtain a subversion account.
|
17
|
+
You can also check out the latest copy via subversion from http://rubyweather.googlecode.com/svn/trunk/.
|
18
|
+
If you would like to contribute back your changes to the code, please contact me via the RubyForge or
|
19
|
+
Google Code project site to obtain a subversion account.
|
20
20
|
|
21
21
|
RubyWeather can also be installed as a Rails plugin using the following command from your Rails application's
|
22
22
|
directory:
|
23
23
|
|
24
|
-
./script/plugin install -x
|
24
|
+
./script/plugin install -x http://rubyweather.googlecode.com/svn/trunk
|
25
25
|
|
26
26
|
|
27
27
|
=== Examples
|
data/lib/weather/forecast.rb
CHANGED
@@ -5,13 +5,14 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
require 'time'
|
8
|
+
require 'ostruct'
|
8
9
|
require File.dirname(File.expand_path(__FILE__)) + '/util'
|
9
10
|
|
10
11
|
module Weather
|
11
|
-
|
12
|
+
|
12
13
|
# Namespace module for weather data objects.
|
13
14
|
module Forecast
|
14
|
-
|
15
|
+
|
15
16
|
# Contains several days of weather data.
|
16
17
|
# The forecast object includes the Enumerable mixin, so that you can iterate
|
17
18
|
# over all of the days in the forecast using the standard ruby mechanisms as follows:
|
@@ -59,9 +60,9 @@ module Weather
|
|
59
60
|
element = xml.root.elements['dayf'].elements["day[@d='#{num.to_s}']"]
|
60
61
|
if not element
|
61
62
|
case num
|
62
|
-
|
63
|
-
|
64
|
-
|
63
|
+
when 0 then daydisplay = "today"
|
64
|
+
when 1 then daydisplay = "tomorrow"
|
65
|
+
else daydisplay = "#{num} days from now"
|
65
66
|
end
|
66
67
|
raise "Sorry, there is no data available for #{daydisplay}"
|
67
68
|
else
|
@@ -125,6 +126,7 @@ module Weather
|
|
125
126
|
# forecast.current.latest_update
|
126
127
|
#
|
127
128
|
def latest_update
|
129
|
+
puts xml.root.to_s
|
128
130
|
Time.parse(xml.root.elements['dayf'].elements['lsup'].text)
|
129
131
|
end
|
130
132
|
|
@@ -147,7 +149,7 @@ module Weather
|
|
147
149
|
|
148
150
|
# Abstract class that all Forecast entities are based on.
|
149
151
|
class Conditions
|
150
|
-
|
152
|
+
|
151
153
|
# For elements in the forecast that we have not defined an explicit accessor,
|
152
154
|
# this allows accessing the raw underlying data in the forecast xml.
|
153
155
|
def method_missing(symbol)
|
@@ -158,9 +160,10 @@ module Weather
|
|
158
160
|
end
|
159
161
|
end
|
160
162
|
|
161
|
-
# The wind conditions as an anonymous object (i.e. wind.d for
|
162
|
-
# direction, wind.s for wind speed,
|
163
|
-
# weather.com XML data spec for
|
163
|
+
# The wind conditions as an anonymous object (i.e. wind.d or wind.direction for
|
164
|
+
# wind direction, wind.s or wind.speed for wind speed, wind.h or wind.heading for
|
165
|
+
# heading, etc.) See the <wind> element in the weather.com XML data spec for
|
166
|
+
# more info.
|
164
167
|
def wind
|
165
168
|
fix_wind(complex_attribute(@xml.elements['wind']))
|
166
169
|
end
|
@@ -171,14 +174,14 @@ module Weather
|
|
171
174
|
Time.parse(self.lsup)
|
172
175
|
end
|
173
176
|
|
174
|
-
|
177
|
+
|
175
178
|
private
|
176
179
|
# The element specified by name as a cleaned-up temperature value.
|
177
180
|
# That is, if the temperature is "N/A", then nil is returned; otherwise
|
178
181
|
# the value is converted to an integer.
|
179
182
|
def clean_temp(name)
|
180
183
|
temp = @xml.elements[name].text
|
181
|
-
|
184
|
+
|
182
185
|
if (temp == "N/A")
|
183
186
|
return nil
|
184
187
|
else
|
@@ -192,23 +195,20 @@ module Weather
|
|
192
195
|
# as anonymous objects (i.e. wind.d for wind direction, wind.s for wind speed, etc.)
|
193
196
|
def complex_attribute(objxml)
|
194
197
|
obj = {}
|
195
|
-
class << obj
|
196
|
-
def method_missing(name)
|
197
|
-
return self[name.to_s]
|
198
|
-
end
|
199
|
-
end
|
200
198
|
|
201
199
|
objxml.elements.each do |element|
|
202
200
|
obj[element.name] = element.text
|
203
201
|
end
|
204
202
|
|
205
|
-
return obj
|
203
|
+
return OpenStruct.new(obj)
|
206
204
|
end
|
207
205
|
|
206
|
+
# Adds more verbose names for wind properties. For example, "speed" for wind speed
|
207
|
+
# rather than just "s".
|
208
208
|
def fix_wind(obj)
|
209
|
-
obj
|
210
|
-
obj
|
211
|
-
obj
|
209
|
+
obj.heading = obj.t
|
210
|
+
obj.direction = obj.d.to_i
|
211
|
+
obj.speed = obj.s.to_i
|
212
212
|
|
213
213
|
return obj
|
214
214
|
end
|
@@ -227,6 +227,8 @@ module Weather
|
|
227
227
|
@xml = element
|
228
228
|
end
|
229
229
|
|
230
|
+
# The numeric ID for the icon representing current conditions.
|
231
|
+
# You can find the corresponding icons packaged with RubyWeather in the example/weather_32 directory.
|
230
232
|
def icon
|
231
233
|
xml.elements['icon'].text.to_i
|
232
234
|
end
|
@@ -258,9 +260,9 @@ module Weather
|
|
258
260
|
# Abstract class representing either a day or night in the daily forecast (note that "future" can include today).
|
259
261
|
class FutureConditions < Conditions
|
260
262
|
attr_reader :xml
|
261
|
-
|
263
|
+
|
262
264
|
@xml
|
263
|
-
|
265
|
+
|
264
266
|
def initialize(element)
|
265
267
|
if (not element.kind_of? REXML::Element)
|
266
268
|
raise "The xml element given to the Day/Night constructor must be a valid REXML::Element"
|
@@ -292,6 +294,8 @@ module Weather
|
|
292
294
|
Time.local(Time.now.year, mon, day)
|
293
295
|
end
|
294
296
|
|
297
|
+
# The numeric ID for the icon representing these forecast conditions.
|
298
|
+
# You can find the corresponding icons packaged with RubyWeather in the example/weather_32 directory.
|
295
299
|
def icon
|
296
300
|
mypart.elements['icon'].text.to_i
|
297
301
|
end
|
@@ -333,7 +337,7 @@ module Weather
|
|
333
337
|
minute = minute.to_i
|
334
338
|
Time.local(date.year, date.month, date.day, hour, minute)
|
335
339
|
end
|
336
|
-
|
340
|
+
|
337
341
|
end
|
338
342
|
|
339
343
|
# The daytime part of the forecast for a given day.
|
@@ -341,17 +345,17 @@ module Weather
|
|
341
345
|
def initialize(element)
|
342
346
|
super(element)
|
343
347
|
end
|
344
|
-
|
348
|
+
|
345
349
|
def temp
|
346
350
|
high
|
347
351
|
end
|
348
352
|
alias tmp temp
|
349
353
|
alias temperature temp
|
350
|
-
|
354
|
+
|
351
355
|
private
|
352
|
-
|
353
|
-
|
354
|
-
|
356
|
+
def mypart
|
357
|
+
@xml.elements['part[@p="d"]']
|
358
|
+
end
|
355
359
|
end
|
356
360
|
|
357
361
|
# The nighttime part of a forecast for a given day.
|
@@ -365,11 +369,11 @@ module Weather
|
|
365
369
|
end
|
366
370
|
alias tmp temp
|
367
371
|
alias temperature temp
|
368
|
-
|
372
|
+
|
369
373
|
private
|
370
|
-
|
371
|
-
|
372
|
-
|
374
|
+
def mypart
|
375
|
+
@xml.elements['part[@p="n"]']
|
376
|
+
end
|
373
377
|
end
|
374
378
|
end
|
375
379
|
|
data/lib/weather/service.rb
CHANGED
@@ -19,6 +19,8 @@ module Weather
|
|
19
19
|
# Returns the forecast data fetched from the weather.com xoap service for the given location and number of days.
|
20
20
|
def fetch_forecast(location_id, days = 5)
|
21
21
|
|
22
|
+
days = 5 if days.nil? or days.empty?
|
23
|
+
|
22
24
|
# try to pull the partner_id and license_key from the environment if not already set
|
23
25
|
partner_id = ENV['WEATHER_COM_PARTNER_ID'] unless partner_id
|
24
26
|
license_key = ENV['WEATHER_COM_LICENSE_KEY'] unless license_key
|
@@ -42,7 +44,7 @@ module Weather
|
|
42
44
|
|
43
45
|
# default to metric (degrees fahrenheit are just silly :)
|
44
46
|
unit = imperial ? "s" : "m"
|
45
|
-
|
47
|
+
puts "#{location_id} #{partner_id} #{license_key} DAYS: #{days.inspect}"
|
46
48
|
host = "xoap.weather.com"
|
47
49
|
url = "/weather/local/#{location_id}?cc=*&dayf=#{days}&prod=xoap&par=#{partner_id}&key=#{license_key}&unit=#{unit}"
|
48
50
|
|
@@ -53,12 +55,14 @@ module Weather
|
|
53
55
|
xml = Net::HTTP.get(host, url)
|
54
56
|
|
55
57
|
if cache?
|
58
|
+
# TODO: most of the processing time seems to be in parsing xml text to REXML::Document...
|
59
|
+
# maybe we should try caching some other serialized form? YAML?
|
56
60
|
doc = REXML::Document.new(xml)
|
57
61
|
doc.root.attributes['cached_on'] = Time.now
|
58
62
|
cache.set("#{location_id}:#{days}", doc.to_s, cache_expiry)
|
59
63
|
end
|
60
64
|
end
|
61
|
-
|
65
|
+
puts xml
|
62
66
|
doc = REXML::Document.new(xml)
|
63
67
|
|
64
68
|
Forecast::Forecast.new(doc)
|
@@ -105,9 +109,9 @@ module Weather
|
|
105
109
|
end
|
106
110
|
end
|
107
111
|
|
108
|
-
# True if caching is enabled, false otherwise.
|
112
|
+
# True if caching is enabled and at least one memcached server is alive, false otherwise.
|
109
113
|
def cache?
|
110
|
-
@cache and cache.active?
|
114
|
+
@cache and cache.active? and not cache.servers.dup.delete_if{|s| !s.alive?}.empty?
|
111
115
|
end
|
112
116
|
|
113
117
|
# Turns off weather forecast caching.
|
data/test/profiler.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'ruby-prof'
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + '/../lib/weather/service'
|
7
|
+
require File.dirname(__FILE__) + '/../lib/weather/forecast'
|
8
|
+
require File.dirname(__FILE__) + '/../lib/weather/util'
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
@filename = File.expand_path(File.dirname(__FILE__) + "/test_weather.xml")
|
13
|
+
|
14
|
+
|
15
|
+
puts ""
|
16
|
+
puts "Loading forecast..."
|
17
|
+
|
18
|
+
start = Time.now
|
19
|
+
RubyProf.start
|
20
|
+
@forecast = Weather::Service.new.load_forecast(@filename)
|
21
|
+
@forecast2 = Weather::Service.new.load_forecast(@filename)
|
22
|
+
@forecast3 = Weather::Service.new.load_forecast(@filename)
|
23
|
+
@forecast4 = Weather::Service.new.load_forecast(@filename)
|
24
|
+
@forecast5 = Weather::Service.new.load_forecast(@filename)
|
25
|
+
load_result = RubyProf.stop
|
26
|
+
|
27
|
+
puts "#{Time.now - start} seconds!"
|
28
|
+
|
29
|
+
puts ""
|
30
|
+
puts "Examining forecast..."
|
31
|
+
|
32
|
+
start = Time.now
|
33
|
+
RubyProf.start
|
34
|
+
@forecast.location_name
|
35
|
+
@forecast.current.temp
|
36
|
+
@forecast.day(1).date.month
|
37
|
+
@forecast.day(3).wind.speed
|
38
|
+
@forecast.night(2).date.day
|
39
|
+
@forecast.tomorrow.outlook
|
40
|
+
@forecast.current.wind.heading
|
41
|
+
@forecast.tomorrow.temp
|
42
|
+
@forecast.latest_update
|
43
|
+
use_result = RubyProf.stop
|
44
|
+
|
45
|
+
puts "#{Time.now - start} seconds!"
|
46
|
+
puts ""
|
47
|
+
|
48
|
+
printer = RubyProf::FlatPrinter.new(load_result)
|
49
|
+
printer.print(STDOUT, 3.0)
|
50
|
+
|
51
|
+
printer = RubyProf::FlatPrinter.new(use_result)
|
52
|
+
printer.print(STDOUT, 1.0)
|
data/test/service_test.rb
CHANGED
@@ -65,6 +65,8 @@ class ServiceTest < Test::Unit::TestCase
|
|
65
65
|
@service.enable_cache
|
66
66
|
@service.cache.servers = "localhost:11211"
|
67
67
|
|
68
|
+
raise "Memcache server must be up and running at localhost:11211 for this test to run." unless @service.cache?
|
69
|
+
|
68
70
|
@service.cache.delete("#{TEST_LOCATION}:5")
|
69
71
|
|
70
72
|
assert_equal @service.fetch_forecast(TEST_LOCATION, 5).xml.to_s, @service.fetch_forecast(TEST_LOCATION, 5).xml.to_s.gsub(/ cached_on='.*?'/, '')
|
metadata
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: rubyweather
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.1.
|
6
|
+
version: 1.1.1
|
7
7
|
date: 2006-07-28 00:00:00 -04:00
|
8
8
|
summary: Client library for accessing weather.com's xoap weather data.
|
9
9
|
require_paths:
|
@@ -25,80 +25,81 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Matt Zukowski
|
30
31
|
files:
|
31
|
-
- weather.rb
|
32
32
|
- install.rb
|
33
33
|
- init.rb
|
34
|
-
-
|
34
|
+
- weather.rb
|
35
35
|
- lib/weather/forecast.rb
|
36
|
+
- lib/weather/service.rb
|
36
37
|
- lib/weather/util.rb
|
37
|
-
- LICENSE
|
38
38
|
- README
|
39
|
-
-
|
39
|
+
- LICENSE
|
40
40
|
- test/service_test.rb
|
41
|
+
- test/forecast_test.rb
|
42
|
+
- test/profiler.rb
|
41
43
|
- test/test_weather.xml
|
42
|
-
- example/weather_32
|
43
44
|
- example/weather_portlet_controller.rb
|
45
|
+
- example/weather_32
|
44
46
|
- example/forecast.rhtml
|
45
|
-
- example/weather_32/0.png
|
46
|
-
- example/weather_32/1.png
|
47
|
-
- example/weather_32/2.png
|
48
|
-
- example/weather_32/3.png
|
49
|
-
- example/weather_32/4.png
|
50
47
|
- example/weather_32/5.png
|
51
|
-
- example/weather_32/
|
52
|
-
- example/weather_32/
|
53
|
-
- example/weather_32/
|
54
|
-
- example/weather_32/9.png
|
55
|
-
- example/weather_32/WS_FTP.LOG
|
56
|
-
- example/weather_32/Thumbs.db
|
48
|
+
- example/weather_32/41.png
|
49
|
+
- example/weather_32/4.png
|
50
|
+
- example/weather_32/32.png
|
57
51
|
- example/weather_32/na.png
|
58
|
-
- example/weather_32/
|
52
|
+
- example/weather_32/33.png
|
53
|
+
- example/weather_32/40.png
|
54
|
+
- example/weather_32/25.png
|
55
|
+
- example/weather_32/29.png
|
56
|
+
- example/weather_32/16.png
|
57
|
+
- example/weather_32/28.png
|
59
58
|
- example/weather_32/11.png
|
60
|
-
- example/weather_32/
|
59
|
+
- example/weather_32/42.png
|
61
60
|
- example/weather_32/13.png
|
62
|
-
- example/weather_32/
|
63
|
-
- example/weather_32/
|
64
|
-
- example/weather_32/
|
65
|
-
- example/weather_32/17.png
|
61
|
+
- example/weather_32/45.png
|
62
|
+
- example/weather_32/43.png
|
63
|
+
- example/weather_32/26.png
|
66
64
|
- example/weather_32/18.png
|
65
|
+
- example/weather_32/3.png
|
66
|
+
- example/weather_32/35.png
|
67
67
|
- example/weather_32/19.png
|
68
|
+
- example/weather_32/31.png
|
69
|
+
- example/weather_32/24.png
|
70
|
+
- example/weather_32/23.png
|
71
|
+
- example/weather_32/10.png
|
72
|
+
- example/weather_32/46.png
|
73
|
+
- example/weather_32/8.png
|
68
74
|
- example/weather_32/20.png
|
69
|
-
- example/weather_32/
|
75
|
+
- example/weather_32/6.png
|
70
76
|
- example/weather_32/22.png
|
71
|
-
- example/weather_32/
|
72
|
-
- example/weather_32/
|
73
|
-
- example/weather_32/
|
74
|
-
- example/weather_32/
|
75
|
-
- example/weather_32/
|
76
|
-
- example/weather_32/
|
77
|
-
- example/weather_32/
|
77
|
+
- example/weather_32/1.png
|
78
|
+
- example/weather_32/47.png
|
79
|
+
- example/weather_32/17.png
|
80
|
+
- example/weather_32/2.png
|
81
|
+
- example/weather_32/38.png
|
82
|
+
- example/weather_32/44.png
|
83
|
+
- example/weather_32/Thumbs.db
|
84
|
+
- example/weather_32/15.png
|
85
|
+
- example/weather_32/0.png
|
86
|
+
- example/weather_32/7.png
|
87
|
+
- example/weather_32/21.png
|
88
|
+
- example/weather_32/36.png
|
89
|
+
- example/weather_32/39.png
|
78
90
|
- example/weather_32/30.png
|
79
|
-
- example/weather_32/
|
80
|
-
- example/weather_32/32.png
|
81
|
-
- example/weather_32/33.png
|
91
|
+
- example/weather_32/14.png
|
82
92
|
- example/weather_32/34.png
|
83
|
-
- example/weather_32/
|
84
|
-
- example/weather_32/36.png
|
93
|
+
- example/weather_32/9.png
|
85
94
|
- example/weather_32/37.png
|
86
|
-
- example/weather_32/
|
87
|
-
- example/weather_32/
|
88
|
-
- example/weather_32/40.png
|
89
|
-
- example/weather_32/41.png
|
90
|
-
- example/weather_32/42.png
|
91
|
-
- example/weather_32/43.png
|
92
|
-
- example/weather_32/44.png
|
93
|
-
- example/weather_32/45.png
|
94
|
-
- example/weather_32/46.png
|
95
|
-
- example/weather_32/47.png
|
95
|
+
- example/weather_32/12.png
|
96
|
+
- example/weather_32/27.png
|
96
97
|
test_files:
|
97
|
-
- test/forecast_test.rb
|
98
98
|
- test/service_test.rb
|
99
|
+
- test/forecast_test.rb
|
99
100
|
rdoc_options:
|
100
101
|
- --title
|
101
|
-
- RubyWeather 1.1.
|
102
|
+
- RubyWeather 1.1.1 RDocs
|
102
103
|
- --main
|
103
104
|
- README
|
104
105
|
- --line-numbers
|
@@ -1,49 +0,0 @@
|
|
1
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\0.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 0.png
|
2
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\1.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 1.png
|
3
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\10.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 10.png
|
4
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\11.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 11.png
|
5
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\12.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 12.png
|
6
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\13.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 13.png
|
7
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\14.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 14.png
|
8
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\15.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 15.png
|
9
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\16.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 16.png
|
10
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\17.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 17.png
|
11
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\18.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 18.png
|
12
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\19.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 19.png
|
13
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\2.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 2.png
|
14
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\20.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 20.png
|
15
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\21.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 21.png
|
16
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\22.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 22.png
|
17
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\23.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 23.png
|
18
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\24.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 24.png
|
19
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\25.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 25.png
|
20
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\26.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 26.png
|
21
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\27.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 27.png
|
22
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\28.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 28.png
|
23
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\29.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 29.png
|
24
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\3.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 3.png
|
25
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\30.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 30.png
|
26
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\31.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 31.png
|
27
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\32.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 32.png
|
28
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\33.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 33.png
|
29
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\34.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 34.png
|
30
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\35.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 35.png
|
31
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\36.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 36.png
|
32
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\37.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 37.png
|
33
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\38.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 38.png
|
34
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\39.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 39.png
|
35
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\4.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 4.png
|
36
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\40.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 40.png
|
37
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\41.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 41.png
|
38
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\42.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 42.png
|
39
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\43.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 43.png
|
40
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\44.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 44.png
|
41
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\45.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 45.png
|
42
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\46.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 46.png
|
43
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\47.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 47.png
|
44
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\5.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 5.png
|
45
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\6.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 6.png
|
46
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\7.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 7.png
|
47
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\8.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 8.png
|
48
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\9.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 9.png
|
49
|
-
2005.11.14 11:00 B U:\cq's\14773\wx_icons32x32\na.png <-- ftp.twc.weather.com /Server HD/Web Folder/wx_icons_pngs/wx_icons32x32 na.png
|