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 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 svn://rubyforge.org//var/svn/rubyweather/trunk.
18
- If you would like to contribute back your changes to the code, please contact me via the rubyforge project
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 svn://rubyforge.org//var/svn/rubyweather/trunk
24
+ ./script/plugin install -x http://rubyweather.googlecode.com/svn/trunk
25
25
 
26
26
 
27
27
  === Examples
@@ -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
- when 0 then daydisplay = "today"
63
- when 1 then daydisplay = "tomorrow"
64
- else daydisplay = "#{num} days from now"
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 wind
162
- # direction, wind.s for wind speed, etc.) See the <wind> element in the
163
- # weather.com XML data spec for more info.
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['heading'] = obj.t
210
- obj['direction'] = obj.d.to_i
211
- obj['speed'] = obj.s.to_i
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
- def mypart
353
- @xml.elements['part[@p="d"]']
354
- end
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
- def mypart
371
- @xml.elements['part[@p="n"]']
372
- end
374
+ def mypart
375
+ @xml.elements['part[@p="n"]']
376
+ end
373
377
  end
374
378
  end
375
379
 
@@ -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.8.11
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.0
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
- - lib/weather/service.rb
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
- - test/forecast_test.rb
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/6.png
52
- - example/weather_32/7.png
53
- - example/weather_32/8.png
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/10.png
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/12.png
59
+ - example/weather_32/42.png
61
60
  - example/weather_32/13.png
62
- - example/weather_32/14.png
63
- - example/weather_32/15.png
64
- - example/weather_32/16.png
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/21.png
75
+ - example/weather_32/6.png
70
76
  - example/weather_32/22.png
71
- - example/weather_32/23.png
72
- - example/weather_32/24.png
73
- - example/weather_32/25.png
74
- - example/weather_32/26.png
75
- - example/weather_32/27.png
76
- - example/weather_32/28.png
77
- - example/weather_32/29.png
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/31.png
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/35.png
84
- - example/weather_32/36.png
93
+ - example/weather_32/9.png
85
94
  - example/weather_32/37.png
86
- - example/weather_32/38.png
87
- - example/weather_32/39.png
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.0 RDocs
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