rubyweather 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|