barometer 0.8.0 → 0.9.0

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.
Files changed (321) hide show
  1. data/.gitignore +2 -0
  2. data/.pelusa.yml +7 -0
  3. data/.travis.yml +6 -3
  4. data/Gemfile +11 -1
  5. data/README.md +89 -244
  6. data/Rakefile +1 -1
  7. data/barometer.gemspec +22 -24
  8. data/lib/barometer.rb +14 -65
  9. data/lib/barometer/base.rb +35 -65
  10. data/lib/barometer/data.rb +15 -20
  11. data/lib/barometer/data/attribute.rb +19 -0
  12. data/lib/barometer/data/attributes/distance.rb +11 -0
  13. data/lib/barometer/data/attributes/float.rb +11 -0
  14. data/lib/barometer/data/attributes/integer.rb +11 -0
  15. data/lib/barometer/data/attributes/location.rb +11 -0
  16. data/lib/barometer/data/attributes/pressure.rb +11 -0
  17. data/lib/barometer/data/attributes/sun.rb +15 -0
  18. data/lib/barometer/data/attributes/temperature.rb +11 -0
  19. data/lib/barometer/data/attributes/time.rb +11 -0
  20. data/lib/barometer/data/attributes/vector.rb +11 -0
  21. data/lib/barometer/data/attributes/zone.rb +11 -0
  22. data/lib/barometer/data/convertable_units.rb +145 -0
  23. data/lib/barometer/data/coordinates.rb +16 -0
  24. data/lib/barometer/data/distance.rb +14 -133
  25. data/lib/barometer/data/geo.rb +22 -59
  26. data/lib/barometer/data/location.rb +14 -20
  27. data/lib/barometer/data/pressure.rb +14 -135
  28. data/lib/barometer/data/sun.rb +24 -24
  29. data/lib/barometer/data/temperature.rb +14 -169
  30. data/lib/barometer/data/vector.rb +44 -0
  31. data/lib/barometer/data/zone.rb +109 -112
  32. data/lib/barometer/query.rb +23 -161
  33. data/lib/barometer/query/base.rb +88 -0
  34. data/lib/barometer/query/converter.rb +64 -0
  35. data/lib/barometer/query/converters/from_coordinates_to_noaa_station_id.rb +30 -0
  36. data/lib/barometer/query/converters/from_geocode_to_coordinates.rb +28 -0
  37. data/lib/barometer/query/converters/from_short_zipcode_to_zipcode.rb +28 -0
  38. data/lib/barometer/query/converters/from_weather_id_to_geocode.rb +30 -0
  39. data/lib/barometer/query/converters/from_woe_id_or_ipv4_to_geocode.rb +32 -0
  40. data/lib/barometer/query/converters/to_geocode.rb +30 -0
  41. data/lib/barometer/query/converters/to_weather_id.rb +30 -0
  42. data/lib/barometer/query/converters/to_woe_id.rb +30 -0
  43. data/lib/barometer/query/format.rb +59 -0
  44. data/lib/barometer/query/formats/base.rb +22 -0
  45. data/lib/barometer/query/formats/coordinates.rb +14 -0
  46. data/lib/barometer/query/formats/geocode.rb +15 -0
  47. data/lib/barometer/query/formats/icao.rb +35 -0
  48. data/lib/barometer/query/formats/ipv4_address.rb +19 -0
  49. data/lib/barometer/query/formats/noaa_station_id.rb +15 -0
  50. data/lib/barometer/query/formats/postalcode.rb +20 -0
  51. data/lib/barometer/query/formats/short_zipcode.rb +15 -0
  52. data/lib/barometer/{translations → query/formats/translations}/icao_country_codes.yml +0 -0
  53. data/lib/barometer/{translations → query/formats/translations}/weather_country_codes.yml +0 -0
  54. data/lib/barometer/query/formats/unknown.rb +14 -0
  55. data/lib/barometer/query/formats/weather_id.rb +33 -0
  56. data/lib/barometer/query/formats/woe_id.rb +28 -0
  57. data/lib/barometer/query/formats/zipcode.rb +15 -0
  58. data/lib/barometer/query/service.rb +13 -0
  59. data/lib/barometer/query/services/apis/geonames_timezone.rb +26 -0
  60. data/lib/barometer/query/services/apis/google_geocode.rb +35 -0
  61. data/lib/barometer/query/services/apis/noaa_station.rb +31 -0
  62. data/lib/barometer/query/services/apis/weather_id.rb +35 -0
  63. data/lib/barometer/query/services/apis/wunderground_timezone.rb +26 -0
  64. data/lib/barometer/query/services/apis/yahoo_placefinder.rb +35 -0
  65. data/lib/barometer/query/services/apis/yahoo_weather.rb +31 -0
  66. data/lib/barometer/query/services/from_weather_id.rb +64 -0
  67. data/lib/barometer/query/services/geonames_timezone.rb +18 -0
  68. data/lib/barometer/query/services/google_geocode.rb +106 -0
  69. data/lib/barometer/query/services/noaa_station_id.rb +28 -0
  70. data/lib/barometer/query/services/to_weather_id.rb +25 -0
  71. data/lib/barometer/query/services/to_woe_id.rb +29 -0
  72. data/lib/barometer/query/services/wunderground_timezone.rb +18 -0
  73. data/lib/barometer/query/services/yahoo_geocode.rb +69 -0
  74. data/lib/barometer/response.rb +12 -0
  75. data/lib/barometer/response/base.rb +57 -0
  76. data/lib/barometer/response/current.rb +27 -0
  77. data/lib/barometer/response/prediction.rb +41 -0
  78. data/lib/barometer/response/prediction_collection.rb +48 -0
  79. data/lib/barometer/utils.rb +17 -0
  80. data/lib/barometer/utils/address.rb +33 -0
  81. data/lib/barometer/utils/api.rb +30 -0
  82. data/lib/barometer/utils/config_reader.rb +40 -0
  83. data/lib/barometer/utils/get.rb +17 -0
  84. data/lib/barometer/utils/json_reader.rb +22 -0
  85. data/lib/barometer/utils/payload.rb +100 -0
  86. data/lib/barometer/utils/payload_request.rb +37 -0
  87. data/lib/barometer/utils/post.rb +24 -0
  88. data/lib/barometer/utils/time.rb +78 -0
  89. data/lib/barometer/{translations → utils/translations}/zone_codes.yml +0 -0
  90. data/lib/barometer/utils/versioned_registration.rb +70 -0
  91. data/lib/barometer/utils/xml_reader.rb +27 -0
  92. data/lib/barometer/utils/zone_code_lookup.rb +30 -0
  93. data/lib/barometer/version.rb +1 -1
  94. data/lib/barometer/weather.rb +44 -173
  95. data/lib/barometer/weather_service.rb +41 -0
  96. data/lib/barometer/weather_services/base.rb +50 -0
  97. data/lib/barometer/weather_services/forecast_io.rb +36 -0
  98. data/lib/barometer/weather_services/forecast_io/api.rb +22 -0
  99. data/lib/barometer/weather_services/forecast_io/query.rb +38 -0
  100. data/lib/barometer/weather_services/forecast_io/response.rb +31 -0
  101. data/lib/barometer/weather_services/forecast_io/response/current_weather.rb +78 -0
  102. data/lib/barometer/weather_services/forecast_io/response/forecasted_weather.rb +74 -0
  103. data/lib/barometer/weather_services/forecast_io/response/location.rb +19 -0
  104. data/lib/barometer/weather_services/forecast_io/response/timezone.rb +25 -0
  105. data/lib/barometer/weather_services/noaa.rb +21 -305
  106. data/lib/barometer/weather_services/noaa/current_api.rb +25 -0
  107. data/lib/barometer/weather_services/noaa/current_query.rb +30 -0
  108. data/lib/barometer/weather_services/noaa/current_response.rb +29 -0
  109. data/lib/barometer/weather_services/noaa/forecast_api.rb +25 -0
  110. data/lib/barometer/weather_services/noaa/forecast_query.rb +39 -0
  111. data/lib/barometer/weather_services/noaa/forecast_response.rb +28 -0
  112. data/lib/barometer/weather_services/noaa/response/current_location.rb +42 -0
  113. data/lib/barometer/weather_services/noaa/response/current_station.rb +46 -0
  114. data/lib/barometer/weather_services/noaa/response/current_weather.rb +82 -0
  115. data/lib/barometer/weather_services/noaa/response/forecasted_weather.rb +90 -0
  116. data/lib/barometer/weather_services/noaa/response/location.rb +19 -0
  117. data/lib/barometer/weather_services/noaa/response/timezone.rb +15 -0
  118. data/lib/barometer/weather_services/response.rb +9 -0
  119. data/lib/barometer/weather_services/response/location.rb +42 -0
  120. data/lib/barometer/weather_services/response/time_zone.rb +19 -0
  121. data/lib/barometer/weather_services/weather_bug.rb +24 -280
  122. data/lib/barometer/weather_services/weather_bug/current_api.rb +26 -0
  123. data/lib/barometer/weather_services/weather_bug/current_response.rb +33 -0
  124. data/lib/barometer/weather_services/weather_bug/forecast_api.rb +26 -0
  125. data/lib/barometer/weather_services/weather_bug/forecast_response.rb +29 -0
  126. data/lib/barometer/weather_services/weather_bug/query.rb +42 -0
  127. data/lib/barometer/weather_services/weather_bug/response/current_weather.rb +82 -0
  128. data/lib/barometer/weather_services/weather_bug/response/forecasted_weather.rb +67 -0
  129. data/lib/barometer/weather_services/weather_bug/response/location.rb +23 -0
  130. data/lib/barometer/weather_services/weather_bug/response/station.rb +43 -0
  131. data/lib/barometer/weather_services/weather_bug/response/sun.rb +32 -0
  132. data/lib/barometer/weather_services/weather_bug/response/time_helper.rb +52 -0
  133. data/lib/barometer/weather_services/weather_bug/response/timezone.rb +15 -0
  134. data/lib/barometer/weather_services/wunderground_v1.rb +32 -0
  135. data/lib/barometer/weather_services/wunderground_v1/current_api.rb +21 -0
  136. data/lib/barometer/weather_services/wunderground_v1/current_response.rb +31 -0
  137. data/lib/barometer/weather_services/wunderground_v1/forecast_api.rb +21 -0
  138. data/lib/barometer/weather_services/wunderground_v1/forecast_response.rb +33 -0
  139. data/lib/barometer/weather_services/wunderground_v1/query.rb +30 -0
  140. data/lib/barometer/weather_services/wunderground_v1/response/current_weather.rb +92 -0
  141. data/lib/barometer/weather_services/wunderground_v1/response/forecasted_weather.rb +87 -0
  142. data/lib/barometer/weather_services/wunderground_v1/response/full_timezone.rb +22 -0
  143. data/lib/barometer/weather_services/wunderground_v1/response/location.rb +43 -0
  144. data/lib/barometer/weather_services/wunderground_v1/response/station.rb +39 -0
  145. data/lib/barometer/weather_services/wunderground_v1/response/sun.rb +53 -0
  146. data/lib/barometer/weather_services/wunderground_v1/response/timezone.rb +15 -0
  147. data/lib/barometer/weather_services/yahoo.rb +16 -198
  148. data/lib/barometer/weather_services/yahoo/api.rb +21 -0
  149. data/lib/barometer/weather_services/yahoo/query.rb +42 -0
  150. data/lib/barometer/weather_services/yahoo/response.rb +39 -0
  151. data/lib/barometer/weather_services/yahoo/response/current_weather.rb +86 -0
  152. data/lib/barometer/weather_services/yahoo/response/forecasted_weather.rb +71 -0
  153. data/lib/barometer/weather_services/yahoo/response/location.rb +47 -0
  154. data/lib/barometer/weather_services/yahoo/response/sun.rb +43 -0
  155. data/lib/barometer/weather_services/yahoo/response/timezone.rb +15 -0
  156. data/spec/barometer_spec.rb +18 -120
  157. data/spec/base_spec.rb +114 -0
  158. data/spec/cassettes/Converter_FromCoordinatesToNoaaStationId.json +1 -0
  159. data/spec/cassettes/Converter_FromWeatherIdToGeocode.json +1 -0
  160. data/spec/cassettes/Converter_FromWoeIdOrIpv4ToGeocode.json +1 -0
  161. data/spec/cassettes/Converter_ToGeocode.json +1 -0
  162. data/spec/cassettes/Converter_ToWeatherId.json +1 -0
  163. data/spec/cassettes/Converter_ToWoeId.json +1 -0
  164. data/spec/cassettes/Service_FromWeatherId.json +1 -0
  165. data/spec/cassettes/Service_GoogleGeocode.json +1 -0
  166. data/spec/cassettes/Service_NoaaStation.json +1 -0
  167. data/spec/cassettes/Service_ToWeatherId.json +1 -0
  168. data/spec/cassettes/Service_ToWoeId.json +1 -0
  169. data/spec/cassettes/Service_YahooGeocode.json +1 -0
  170. data/spec/cassettes/WeatherService_ForecastIo.json +1 -0
  171. data/spec/cassettes/WeatherService_Noaa.json +1 -1
  172. data/spec/cassettes/WeatherService_WeatherBug.json +1 -1
  173. data/spec/cassettes/WeatherService_WundergroundV1.json +1 -0
  174. data/spec/cassettes/WeatherService_Yahoo.json +1 -1
  175. data/spec/data/attributes/distance_spec.rb +60 -0
  176. data/spec/data/attributes/location_spec.rb +41 -0
  177. data/spec/data/attributes/pressure_spec.rb +60 -0
  178. data/spec/data/attributes/sun_spec.rb +33 -0
  179. data/spec/data/attributes/temperature_spec.rb +60 -0
  180. data/spec/data/attributes/time_spec.rb +58 -0
  181. data/spec/data/attributes/vector_spec.rb +43 -0
  182. data/spec/data/attributes/zone_spec.rb +34 -0
  183. data/spec/data/convertable_units_spec.rb +299 -0
  184. data/spec/data/coordinates_spec.rb +15 -0
  185. data/spec/data/distance_spec.rb +49 -333
  186. data/spec/data/geo_spec.rb +72 -71
  187. data/spec/data/location_spec.rb +70 -65
  188. data/spec/data/pressure_spec.rb +49 -333
  189. data/spec/data/sun_spec.rb +57 -81
  190. data/spec/data/temperature_spec.rb +49 -393
  191. data/spec/data/vector_spec.rb +100 -0
  192. data/spec/data/zone_spec.rb +199 -266
  193. data/spec/query/base_spec.rb +296 -0
  194. data/spec/query/converter_spec.rb +98 -0
  195. data/spec/query/converters/from_coordinates_to_noaa_station_id_spec.rb +35 -0
  196. data/spec/query/converters/from_geocode_to_coordinates_spec.rb +25 -0
  197. data/spec/query/converters/from_short_zipcode_to_zipcode_spec.rb +31 -0
  198. data/spec/query/converters/from_weather_id_to_geocode_spec.rb +40 -0
  199. data/spec/query/converters/from_woe_id_or_ipv4_to_geocode_spec.rb +51 -0
  200. data/spec/query/converters/to_geocode_spec.rb +99 -0
  201. data/spec/query/converters/to_weather_id_spec.rb +35 -0
  202. data/spec/query/converters/to_woe_id_spec.rb +74 -0
  203. data/spec/query/formats/base_spec.rb +15 -0
  204. data/spec/query/formats/coordinates_spec.rb +13 -0
  205. data/spec/query/formats/geocode_spec.rb +9 -0
  206. data/spec/query/formats/icao_spec.rb +20 -0
  207. data/spec/query/formats/ipv4_address_spec.rb +33 -0
  208. data/spec/query/formats/noaa_station_id_spec.rb +9 -0
  209. data/spec/query/formats/postalcode_spec.rb +18 -0
  210. data/spec/query/formats/short_zipcode_spec.rb +18 -0
  211. data/spec/query/formats/unknown_spec.rb +9 -0
  212. data/spec/query/formats/weather_id_spec.rb +31 -0
  213. data/spec/query/formats/woe_id_spec.rb +45 -0
  214. data/spec/query/formats/zipcode_spec.rb +18 -0
  215. data/spec/query/formats_spec.rb +55 -0
  216. data/spec/query/services/from_weather_id_spec.rb +54 -0
  217. data/spec/query/services/google_geocode_spec.rb +60 -0
  218. data/spec/query/services/noaa_station_id_spec.rb +23 -0
  219. data/spec/query/services/to_weather_id_spec.rb +23 -0
  220. data/spec/query/services/to_woe_id_spec.rb +51 -0
  221. data/spec/query/services/yahoo_geocode_spec.rb +72 -0
  222. data/spec/response/base_spec.rb +103 -0
  223. data/spec/response/current_spec.rb +33 -0
  224. data/spec/response/predicition_spec.rb +65 -0
  225. data/spec/response/prediction_collection_spec.rb +97 -0
  226. data/spec/spec_helper.rb +14 -12
  227. data/spec/support/key_file_parser.rb +22 -0
  228. data/spec/support/matchers/formats.rb +36 -0
  229. data/spec/support/matchers/have_data.rb +46 -0
  230. data/spec/support/matchers/have_field.rb +128 -0
  231. data/spec/support/matchers/have_forecast.rb +46 -0
  232. data/spec/support/matchers/path.rb +23 -0
  233. data/spec/support/query_factory.rb +20 -0
  234. data/spec/utils/address_spec.rb +67 -0
  235. data/spec/utils/config_reader_spec.rb +157 -0
  236. data/spec/utils/get_spec.rb +22 -0
  237. data/spec/utils/payload_request_spec.rb +69 -0
  238. data/spec/utils/payload_spec.rb +168 -0
  239. data/spec/utils/post_spec.rb +20 -0
  240. data/spec/utils/time_spec.rb +93 -0
  241. data/spec/utils/versioned_registration_spec.rb +105 -0
  242. data/spec/weather_services/base_spec.rb +116 -0
  243. data/spec/weather_services/forecast_io_spec.rb +71 -0
  244. data/spec/weather_services/noaa/current_response_spec.rb +22 -0
  245. data/spec/weather_services/noaa/forecast_response_spec.rb +33 -0
  246. data/spec/weather_services/noaa_spec.rb +68 -166
  247. data/spec/weather_services/weather_bug/current_response_spec.rb +64 -0
  248. data/spec/weather_services/weather_bug/forecast_response_spec.rb +23 -0
  249. data/spec/weather_services/weather_bug_spec.rb +62 -202
  250. data/spec/weather_services/wunderground_v1/current_response_spec.rb +19 -0
  251. data/spec/weather_services/wunderground_v1/forecast_response_spec.rb +62 -0
  252. data/spec/weather_services/wunderground_v1_spec.rb +78 -0
  253. data/spec/weather_services/yahoo/response_spec.rb +73 -0
  254. data/spec/weather_services/yahoo_spec.rb +52 -135
  255. data/spec/weather_services_spec.rb +103 -0
  256. data/spec/weather_spec.rb +167 -347
  257. metadata +342 -123
  258. data/.document +0 -5
  259. data/TODO +0 -60
  260. data/bin/barometer +0 -441
  261. data/lib/barometer/data/local_datetime.rb +0 -145
  262. data/lib/barometer/data/local_time.rb +0 -134
  263. data/lib/barometer/data/speed.rb +0 -158
  264. data/lib/barometer/data/units.rb +0 -49
  265. data/lib/barometer/formats.rb +0 -13
  266. data/lib/barometer/formats/coordinates.rb +0 -57
  267. data/lib/barometer/formats/format.rb +0 -64
  268. data/lib/barometer/formats/geocode.rb +0 -60
  269. data/lib/barometer/formats/icao.rb +0 -37
  270. data/lib/barometer/formats/postalcode.rb +0 -22
  271. data/lib/barometer/formats/short_zipcode.rb +0 -17
  272. data/lib/barometer/formats/weather_id.rb +0 -92
  273. data/lib/barometer/formats/woe_id.rb +0 -150
  274. data/lib/barometer/formats/zipcode.rb +0 -31
  275. data/lib/barometer/key_file_parser.rb +0 -20
  276. data/lib/barometer/measurements/measurement.rb +0 -202
  277. data/lib/barometer/measurements/result.rb +0 -207
  278. data/lib/barometer/measurements/result_array.rb +0 -75
  279. data/lib/barometer/services.rb +0 -19
  280. data/lib/barometer/weather_services/service.rb +0 -189
  281. data/lib/barometer/weather_services/wunderground.rb +0 -264
  282. data/lib/barometer/web_services/geocode.rb +0 -34
  283. data/lib/barometer/web_services/noaa_station_id.rb +0 -53
  284. data/lib/barometer/web_services/placemaker.rb +0 -95
  285. data/lib/barometer/web_services/timezone.rb +0 -38
  286. data/lib/barometer/web_services/weather_id.rb +0 -50
  287. data/lib/barometer/web_services/web_service.rb +0 -29
  288. data/spec/cassettes/Barometer.json +0 -1
  289. data/spec/cassettes/Query.json +0 -1
  290. data/spec/cassettes/Query_Format_Coordinates.json +0 -1
  291. data/spec/cassettes/Query_Format_Geocode.json +0 -1
  292. data/spec/cassettes/Query_Format_WeatherID.json +0 -1
  293. data/spec/cassettes/Query_Format_WoeID.json +0 -1
  294. data/spec/cassettes/WeatherService.json +0 -1
  295. data/spec/cassettes/WeatherService_Wunderground.json +0 -1
  296. data/spec/cassettes/WebService_Geocode.json +0 -1
  297. data/spec/cassettes/WebService_NoaaStation.json +0 -1
  298. data/spec/data/local_datetime_spec.rb +0 -274
  299. data/spec/data/local_time_spec.rb +0 -239
  300. data/spec/data/speed_spec.rb +0 -374
  301. data/spec/data/units_spec.rb +0 -101
  302. data/spec/formats/coordinates_spec.rb +0 -166
  303. data/spec/formats/format_spec.rb +0 -74
  304. data/spec/formats/geocode_spec.rb +0 -163
  305. data/spec/formats/icao_spec.rb +0 -55
  306. data/spec/formats/postalcode_spec.rb +0 -53
  307. data/spec/formats/short_zipcode_spec.rb +0 -47
  308. data/spec/formats/weather_id_spec.rb +0 -182
  309. data/spec/formats/woe_id_spec.rb +0 -211
  310. data/spec/formats/zipcode_spec.rb +0 -103
  311. data/spec/key_file_parser_spec.rb +0 -28
  312. data/spec/measurements/measurement_spec.rb +0 -381
  313. data/spec/measurements/result_array_spec.rb +0 -150
  314. data/spec/measurements/result_spec.rb +0 -632
  315. data/spec/query_spec.rb +0 -498
  316. data/spec/weather_services/services_spec.rb +0 -135
  317. data/spec/weather_services/wunderground_spec.rb +0 -179
  318. data/spec/web_services/geocode_spec.rb +0 -31
  319. data/spec/web_services/noaa_station_id_spec.rb +0 -33
  320. data/spec/web_services/placemaker_spec.rb +0 -41
  321. data/spec/web_services/web_services_spec.rb +0 -20
@@ -0,0 +1,71 @@
1
+ module Barometer
2
+ module WeatherService
3
+ class Yahoo
4
+ class Response
5
+ class ForecastedWeather
6
+ def initialize(payload, timezone, current_sun)
7
+ @payload = payload
8
+ @timezone = timezone
9
+ @current_sun = current_sun
10
+ @predictions = Barometer::Response::PredictionCollection.new
11
+ end
12
+
13
+ def parse
14
+ each_prediction do |prediction, forecast_payload|
15
+ prediction.date = date(forecast_payload), timezone
16
+ prediction.icon = icon(forecast_payload)
17
+ prediction.condition = condition(forecast_payload)
18
+ prediction.high = high(forecast_payload)
19
+ prediction.low = low(forecast_payload)
20
+ prediction.sun = sun(forecast_payload, prediction.starts_at, prediction.ends_at)
21
+ end
22
+
23
+ predictions
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :payload, :timezone, :predictions, :current_sun
29
+
30
+ def units
31
+ payload.units
32
+ end
33
+
34
+ def each_prediction
35
+ payload.fetch_each('item', 'forecast') do |forecast_payload|
36
+ predictions.build do |prediction|
37
+ yield prediction, forecast_payload
38
+ end
39
+ end
40
+ end
41
+
42
+ def date(forecast_payload)
43
+ forecast_payload.fetch('@date')
44
+ end
45
+
46
+ def icon(forecast_payload)
47
+ forecast_payload.fetch('@code')
48
+ end
49
+
50
+ def condition(forecast_payload)
51
+ forecast_payload.fetch('@text')
52
+ end
53
+
54
+ def high(forecast_payload)
55
+ [units, forecast_payload.fetch('@high')]
56
+ end
57
+
58
+ def low(forecast_payload)
59
+ [units, forecast_payload.fetch('@low')]
60
+ end
61
+
62
+ def sun(forecast_payload, starts_at, ends_at)
63
+ utc_rise_time = Utils::Time.utc_merge_base_plus_time(starts_at, current_sun.rise)
64
+ utc_set_time = Utils::Time.utc_merge_base_plus_time(ends_at, current_sun.set)
65
+ Data::Sun.new(rise: utc_rise_time, set: utc_set_time)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,47 @@
1
+ module Barometer
2
+ module WeatherService
3
+ class Yahoo
4
+ class Response
5
+ class Location
6
+ def initialize(payload)
7
+ @payload = payload
8
+ end
9
+
10
+ def parse
11
+ Data::Location.new(
12
+ city: city,
13
+ state_code: state_code,
14
+ country_code: country_code,
15
+ latitude: latitude,
16
+ longitude: longitude
17
+ )
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :payload
23
+
24
+ def city
25
+ payload.fetch('location', '@city')
26
+ end
27
+
28
+ def state_code
29
+ payload.fetch('location', '@region')
30
+ end
31
+
32
+ def country_code
33
+ payload.fetch('location', '@country')
34
+ end
35
+
36
+ def latitude
37
+ payload.fetch('item', 'lat')
38
+ end
39
+
40
+ def longitude
41
+ payload.fetch('item', 'long')
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,43 @@
1
+ module Barometer
2
+ module WeatherService
3
+ class Yahoo
4
+ class Response
5
+ class Sun
6
+ def initialize(payload, base_time)
7
+ @payload = payload
8
+ @base_time = base_time
9
+ end
10
+
11
+ def parse
12
+ return if local_rise_time.nil? || local_set_time.nil?
13
+ Data::Sun.new(rise: utc_rise_time, set: utc_set_time)
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :payload, :base_time
19
+
20
+ def local_rise_time
21
+ @local_rise_time ||= Utils::Time.parse(payload.fetch('astronomy', '@sunrise'))
22
+ end
23
+
24
+ def local_set_time
25
+ @local_set_time ||= Utils::Time.parse(payload.fetch('astronomy', '@sunset'))
26
+ end
27
+
28
+ def utc_rise_time
29
+ Utils::Time.utc_from_base_plus_local_time(
30
+ base_time.timezone, base_time.base, local_rise_time.hour, local_rise_time.min
31
+ )
32
+ end
33
+
34
+ def utc_set_time
35
+ Utils::Time.utc_from_base_plus_local_time(
36
+ base_time.timezone, base_time.base, local_set_time.hour, local_set_time.min
37
+ )
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,15 @@
1
+ module Barometer
2
+ module WeatherService
3
+ class Yahoo
4
+ class Response
5
+ class TimeZone < WeatherService::Response::TimeZone
6
+ private
7
+
8
+ def time_zone
9
+ payload.using(/ ([A-Z]+)$/).fetch('item', 'pubDate')
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,133 +1,31 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
- describe Barometer, :vcr => {
4
- :cassette_name => "Barometer"
5
- } do
6
- before(:each) do
7
- @config_hash = { 1 => [:wunderground] }
8
- @yahoo_key = YAHOO_KEY
9
- end
10
-
11
- describe "and class methods" do
12
- it "defines selection" do
13
- Barometer::Base.respond_to?("config").should be_true
14
- Barometer::Base.config.should == { 1 => [:wunderground] }
15
- Barometer::Base.config = { 1 => [:yahoo] }
16
- Barometer::Base.config.should == { 1 => [:yahoo] }
17
- Barometer.config = @config_hash
18
- end
19
-
20
- it "returns a Weather Service driver" do
21
- Barometer.source(:wunderground).should == Barometer::WeatherService::Wunderground
22
- end
23
-
24
- it "deprecates the Google geocoding API key reader" do
25
- Barometer.should_receive(:warn)
26
- Barometer.respond_to?("google_geocode_key").should be_true
27
- Barometer.google_geocode_key
28
- end
29
-
30
- it "deprecates the Google geocoding API key writer" do
31
- Barometer.should_receive(:warn)
32
- Barometer.respond_to?("google_geocode_key=").should be_true
33
- Barometer.google_geocode_key= 'KEY'
34
- end
35
-
36
- it "sets the Placemaker Yahoo! app ID" do
37
- cache_key = Barometer.yahoo_placemaker_app_id
38
-
39
- Barometer.respond_to?("yahoo_placemaker_app_id").should be_true
40
- Barometer.yahoo_placemaker_app_id = nil
41
- Barometer.yahoo_placemaker_app_id.should be_nil
42
- Barometer.yahoo_placemaker_app_id = @yahoo_key
43
- Barometer.yahoo_placemaker_app_id.should == @yahoo_key
44
-
45
- Barometer.yahoo_placemaker_app_id = cache_key
46
- end
47
-
48
- it "forces the geocoding of queries" do
49
- Barometer.respond_to?("force_geocode").should be_true
50
- Barometer.force_geocode.should be_false
51
- Barometer.force_geocode = true
52
- Barometer.force_geocode.should be_true
53
- end
54
-
55
- it "forces the geocoding of queries" do
56
- Barometer.respond_to?("force_geocode!").should be_true
57
- Barometer.force_geocode = false
58
- Barometer.force_geocode.should be_false
59
- Barometer.force_geocode!
60
- Barometer.force_geocode.should be_true
61
- end
62
-
63
- it "set the global service timeout" do
64
- Barometer.respond_to?("timeout").should be_true
65
- Barometer.timeout.should == 15
66
- Barometer.timeout = 5
67
- Barometer.timeout.should == 5
3
+ describe Barometer do
4
+ describe ".config" do
5
+ around do |example|
6
+ cached_config = Barometer.config
7
+ example.run
8
+ Barometer.config = cached_config
68
9
  end
69
- end
70
10
 
71
- describe "when initialized" do
72
- before(:each) do
73
- @barometer_direct = Barometer.new
74
- @barometer = Barometer::Base.new
11
+ it "has a default value" do
12
+ expect( Barometer.config ).to eq({ 1 => {wunderground: {version: :v1}} })
75
13
  end
76
14
 
77
- it "responds to query" do
78
- @barometer_direct.respond_to?("query").should be_true
79
- @barometer.respond_to?("query").should be_true
80
- end
81
-
82
- it "sets the query" do
83
- query = "query"
84
- barometer = Barometer.new(query)
85
- barometer.query.is_a?(Barometer::Query)
86
- barometer.query.q.should == query
87
-
88
- barometer = Barometer::Base.new(query)
89
- barometer.query.is_a?(Barometer::Query)
90
- barometer.query.q.should == query
91
- end
92
-
93
- it "responds to weather" do
94
- @barometer.weather.is_a?(Barometer::Weather).should be_true
95
- @barometer_direct.weather.is_a?(Barometer::Weather).should be_true
96
- end
97
-
98
- it "responds to success" do
99
- @barometer.success.should be_false
100
- @barometer_direct.success.should be_false
101
- @barometer_direct.success?.should be_false
102
- @barometer_direct.success = true
103
- @barometer_direct.success?.should be_true
15
+ it "sets the value" do
16
+ Barometer.config = { 1 => [:yahoo] }
17
+ expect( Barometer.config ).to eq({ 1 => [:yahoo] })
104
18
  end
105
19
  end
106
20
 
107
- describe "when measuring" do
108
- before(:each) do
109
- query_term = "Calgary,AB"
110
- @barometer = Barometer::Base.new(query_term)
111
- @time = Time.now
112
- end
113
-
114
- it "responds to measure" do
115
- @barometer.respond_to?("measure").should be_true
116
- end
117
-
118
- it "returns a Barometer::Weather object" do
119
- @barometer.measure.is_a?(Barometer::Weather).should be_true
120
- end
121
-
122
- it "raises OutOfSources if no services successful" do
123
- Barometer::Base.config = { 1 => [] }
124
- lambda { @barometer.measure }.should raise_error(Barometer::OutOfSources)
21
+ describe ".timeout" do
22
+ it "has a default value" do
23
+ expect( Barometer.timeout ).to eq 15
125
24
  end
126
25
 
127
- it "sets the weight" do
128
- Barometer::Base.config = { 1 => {:wunderground => {:weight => 2}} }
129
- @barometer.measure
130
- @barometer.weather.measurements.first.weight.should == 2
26
+ it "sets the value" do
27
+ Barometer.timeout = 5
28
+ expect( Barometer.timeout ).to eq 5
131
29
  end
132
30
  end
133
31
  end
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+
3
+ module Barometer
4
+ describe Base do
5
+ let(:query) { build_query }
6
+ let(:barometer) { Base.new(query) }
7
+
8
+ describe "#measure" do
9
+ let(:keys) { {fake_secret: 'ABC123'} }
10
+ let(:response_foo) { Response.new.tap{|r| r.stub(complete?: true)} }
11
+ let(:response_bar) { Response.new.tap{|r| r.stub(complete?: true)} }
12
+ let(:foo_weather_service) { double(:weather_service, call: response_foo) }
13
+ let(:bar_weather_service) { double(:weather_service, call: response_bar) }
14
+
15
+ around do |example|
16
+ services_cache = WeatherService.services
17
+ cached_config = Barometer.config
18
+ WeatherService.services = Utils::VersionedRegistration.new
19
+
20
+ example.run
21
+
22
+ WeatherService.services = services_cache
23
+ Barometer.config = cached_config
24
+ end
25
+
26
+ before do
27
+ Barometer.config = {1 => {foo: {keys: keys}}}
28
+ WeatherService.register(:foo, foo_weather_service)
29
+ WeatherService.register(:bar, bar_weather_service)
30
+ end
31
+
32
+ it "returns a Weather object" do
33
+ expect( barometer.measure ).to be_a Weather
34
+ end
35
+
36
+ it "records starting and ending timestamps" do
37
+ weather = barometer.measure
38
+ expect( weather.start_at ).to be
39
+ expect( weather.end_at ).to be
40
+ end
41
+
42
+ context "when the first weather service is successful" do
43
+ before { response_foo.stub(success?: true) }
44
+
45
+ it "measures the weather" do
46
+ barometer.measure
47
+ expect( foo_weather_service ).to have_received(:call).
48
+ with(an_instance_of(Query::Base), {keys: keys})
49
+ end
50
+
51
+ it "adds the result to weather.responses" do
52
+ weather = barometer.measure
53
+ expect( weather.responses ).to include response_foo
54
+ end
55
+
56
+ context "and another weather service is configured for the same service_level" do
57
+ before { Barometer.config = {1 => [:foo, :bar]} }
58
+
59
+ it "measures the weather again" do
60
+ barometer.measure
61
+ expect( bar_weather_service ).to have_received(:call).
62
+ with(an_instance_of(Query::Base), {})
63
+ end
64
+
65
+ it "adds the result to weather.responses" do
66
+ weather = barometer.measure
67
+ expect( weather.responses ).to include response_bar
68
+ end
69
+ end
70
+
71
+ context "and another weather service is configured for the next service_level" do
72
+ before { Barometer.config = {1 => :foo, 2 => :bar} }
73
+
74
+ it "does not measure the weather again" do
75
+ barometer.measure
76
+ expect( bar_weather_service ).not_to have_received(:call)
77
+ end
78
+ end
79
+ end
80
+
81
+ context "when the first weather service is not successful" do
82
+ before { response_foo.stub(success?: false) }
83
+
84
+ context "and there are no other weather services configured" do
85
+ before { Barometer.config = {1 => :foo} }
86
+
87
+ it "raises an error" do
88
+ expect {
89
+ barometer.measure
90
+ }.to raise_error(OutOfSources)
91
+ end
92
+ end
93
+
94
+ context "and another weather service is configured for the next service_level" do
95
+ before do
96
+ Barometer.config = {1 => [:foo, :bar], 2 => :bar}
97
+ response_bar.stub(success?: true)
98
+ end
99
+
100
+ it "measures the weather using the next service_level" do
101
+ barometer.measure
102
+ expect( bar_weather_service ).to have_received(:call).
103
+ with(an_instance_of(Query::Base), {})
104
+ end
105
+
106
+ it "adds the result to weather.responses" do
107
+ weather = barometer.measure
108
+ expect( weather.responses ).to include response_bar
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1 @@
1
+ {"http_interactions":[{"request":{"method":"get","uri":"http://forecast.weather.gov/MapClick.php?textField1=34.10&textField2=-118.41","body":{"encoding":"UTF-8","string":""},"headers":{}},"response":{"status":{"code":200,"message":"OK"},"headers":{"Server":["Apache/2.2.15 (Red Hat)"],"Content-Type":["text/html; charset=UTF-8"],"Expires":["Sat, 26 Oct 2013 15:09:39 GMT"],"Cache-Control":["max-age=0, no-cache, no-store"],"Pragma":["no-cache"],"Date":["Sat, 26 Oct 2013 15:09:39 GMT"],"Transfer-Encoding":["chunked"],"Connection":["Transfer-Encoding","keep-alive"],"Set-Cookie":["PHPSESSID=hhgt0t8qg3mf2e0fsusat1bs41; path=/"]},"body":{"encoding":"UTF-8","string":"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n<head>\r\n<link rel=\"schema.DC\" href=\"http://purl.org/dc/elements/1.1/\" /><title>NOAA National Weather Service</title><meta name=\"DC.title\" content=\"NOAA National Weather Service\" /><meta name=\"DC.description\" content=\"NOAA National Weather Service National Weather Service\" /><meta name=\"DC.creator\" content=\"US Department of Commerce, NOAA, National Weather Service\" /><meta name=\"DC.date.created\" scheme=\"ISO8601\" content=\"\" /><meta name=\"DC.language\" scheme=\"DCTERMS.RFC1766\" content=\"EN-US\" /><meta name=\"DC.keywords\" content=\"weather, National Weather Service\" /><meta name=\"DC.publisher\" content=\"NOAA's National Weather Service\" /><meta name=\"DC.contributor\" content=\"National Weather Service\" /><meta name=\"DC.rights\" content=\"http://www.weather.gov/disclaimer.php\" /><meta name=\"rating\" content=\"General\" /><meta name=\"robots\" content=\"index,follow\" />\r\n\r\n<link href=\"/css/weatherstyle.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n<link href=\"/css/template.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n<link href=\"/css/myfcst.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/css/ForecastSearch.css\" />\r\n<link href=\"/css/pointforecast.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n<script type=\"text/javascript\" src=\"/js/jquery-1.6.4.min.js\"></script>\r\n<script type=\"text/javascript\" src=\"/js/jquery.hoverIntent.minified.js\"></script>\r\n<script type=\"text/javascript\" src=\"http://maps.googleapis.com/maps/api/js?v=3&client=gme-noaa&channel=NWS...PointClick&sensor=false\"></script>\r\n<script type=\"text/javascript\" src=\"/js/ForecastSearch.js\"></script>\r\n<script type=\"text/javascript\" src=\"/js/federated-analytics.js\"></script>\r\n<script type=\"text/javascript\">\r\nfunction MM_jumpMenu(targ,selObj,restore)\r\n{ \r\n\t//v3.0\r\n\teval(targ+\".location='\"+selObj.options[selObj.selectedIndex].value+\"'\");\r\n\tif (restore) selObj.selectedIndex=0;\r\n}\r\n\r\n</script>\r\n<script type=\"text/javascript\" src=\"/js/topNavMenu.js\"></script>\r\n\r\n</head>\r\n\r\n<body>\r\n\r\n\t\t<div class=\"header\">\r\n\t\t\t<div class=\"header-content\">\r\n\t\t\t<a href=\"http://www.weather.gov\" class=\"header-nws\"><img src=\"/css/images/header.png\" alt=\"National Weather Service\"/></a>\r\n\t\t\t<a href=\"http://www.commerce.gov\" class=\"header-doc\"><img src=\"/css/images/header_doc.png\" alt=\"United States Department of Commerce\"/></a>\r\n <a href=\"http://www.noaa.gov\" class=\"header-noaa\" title=\"National Oceanic and Atmospheric Administration\"></a>\r\n </div>\r\n\t\t</div>\r\n\r\n\t\t<div class=\"header-shadow\">\r\n\t\t\t<div class=\"header-shadow-content\"></div>\r\n\t\t</div>\r\n\t\r\n\r\n<div class=\"center\">\r\n\r\n\t <div class=\"content\">\r\n <div class=\"topnav\">\r\n <ul id=\"topnav\">\r\n <li>\r\n <script type=\"text/javascript\">\r\n function goBack()\r\n {\r\n if (document.referrer.toLowerCase().indexOf(\"weather.gov\") != -1)\r\n {\r\n history.back();\r\n }\r\n else\r\n {\r\n document.location.href = \"http://www.weather.gov\";\r\n }\r\n }\r\n </script>\r\n <div class=\"topMenuNavList home\">\r\n <a href=\"#\" onclick=\"goBack();\">HOME</a>\r\n </div>\r\n </li>\r\n <li>\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.weather.gov/forecastmaps\">FORECAST</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul> <li> <a href=\"/\">Local</a> </li> <li> <a href=\"http://graphical.weather.gov\">Graphical</a> </li> <li> <a href=\"http://www.aviationweather.gov/\">Aviation</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/marine/home.htm\">Marine</a> </li> <li> <a href=\"http://water.weather.gov/ahps/\">Rivers and Lakes</a> </li> <li> <a href=\"http://www.nhc.noaa.gov/\">Hurricanes</a> </li> <li> <a href=\"http://www.spc.noaa.gov/\">Severe Weather</a> </li> <li> <a href=\"http://www.srh.noaa.gov/ridge2/fire/\">Fire Weather</a> </li> <li> <a href=\"http://aa.usno.navy.mil/data/docs/RS_OneDay.php\">Sun/Moon</a> </li> <li> <a href=\"http://www.nws.noaa.gov/climate/\">Long Range Forecasts</a> </li> <li> <a href=\"http://www.cpc.ncep.noaa.gov\">Climate Prediction</a> </li></ul> </div>\r\n </li>\r\n <li>\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.nws.noaa.gov/climate\">PAST WEATHER</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul> <li> <a href=\"http://www.nws.noaa.gov/climate/\">Past Weather</a> </li> <li> <a href=\"http://www.nws.noaa.gov/climate/\">Heating/Cooling Days</a> </li> <li> <a href=\"http://www.nws.noaa.gov/climate/\">Monthly Temperatures</a> </li> <li> <a href=\"http://www.nws.noaa.gov/climate/\">Records</a> </li> <li> <a href=\"http://aa.usno.navy.mil/\">Astronomical Data</a> </li></ul> </div>\r\n </li>\r\n <li>\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.weather.gov/safety\">WEATHER SAFETY</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul> <li> <a href=\"http://www.nws.noaa.gov/com/weatherreadynation\">Weather-Ready Nation</a> </li> <li> <a href=\"http://www.nws.noaa.gov/nwr/\">NOAA Weather Radio</a> </li> <li> <a href=\"http://www.nws.noaa.gov/stormready/\">StormReady</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/heat/index.shtml\">Heat</a> </li> <li> <a href=\"http://www.lightningsafety.noaa.gov/\">Lightning</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/hurricane/index.shtml\">Hurricanes</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/severeweather/index.shtml\">Thunderstorms, Tornadoes, Floods</a> </li> <li> <a href=\"http://www.ripcurrents.noaa.gov/\">Rip Currents</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/winter/index.shtml\">Winter Weather</a> </li> <li> <a href=\"http://www.nws.noaa.gov/os/uv/\">Ultra Violet Radiation</a> </li> <li> <a href=\"http://www.nws.noaa.gov/airquality/\">Air Quality</a> </li> <li> <a href=\"http://www.nws.noaa.gov/os/water/tadd/\">Turn Around, Don't Drown</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/hazstats.shtml\">Damage/Fatality/Injury Statistics</a> </li> <li> <a href=\"http://www.redcross.org/\">Red Cross</a> </li> <li> <a href=\"http://www.fema.gov\">Federal Emergency Management Agency (FEMA)</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/brochures.shtml\">Brochures</a> </li></ul> </div>\r\n </li>\r\n <li>\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.weather.gov/informationcenter\">INFORMATION CENTER</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul> <li> <a href=\"http://www.noaawatch.gov/briefing.php\">Daily Briefing </a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/marine/home.htm\">Marine</a> </li> <li> <a href=\"http://www.nws.noaa.gov/climate/\">Climate </a> </li> <li> <a href=\"http://www.spaceweather.gov\">Space Weather</a> </li> <li> <a href=\"http://radar.srh.noaa.gov/fire/\">Fire Weather</a> </li> <li> <a href=\"http://www.aviationweather.gov/\">Aviation</a> </li> <li> <a href=\"http://www.tsunami.gov\">Tsunami</a> </li> <li> <a href=\"http://mag.ncep.noaa.gov/NCOMAGWEB/appcontroller\">Forecast Models</a> </li> <li> <a href=\"http://water.weather.gov/ahps/\">Water</a> </li> <li> <a href=\"http://www.nws.noaa.gov/gis\">GIS</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/coop/\">Cooperative Observers</a> </li> <li> <a href=\"http://www.nws.noaa.gov/skywarn/\">Storm Spotters</a> </li> <li> <a href=\"http://economics.noaa.gov\">Facts and Figures</a> </li></ul> </div>\r\n </li>\r\n <li>\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.weather.gov/news\">NEWS</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul> <li> <a href=\"/news\">NWS News</a> </li> <li> <a href=\"http://www.nws.noaa.gov/com/weatherreadynation/calendar.html\">Events</a> </li> <li> <a href=\"http://www.weather.gov/socialmedia\">Social Media</a> </li> <li> <a href=\"http://www.nws.noaa.gov/om/brochures.shtml\">Pubs/Brochures/Booklets </a> </li> <li> <a href=\"http://www.nws.noaa.gov/pa/nws_contacts.php\">NWS Media Contacts</a> </li></ul> </div>\r\n </li>\r\n <li>\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.weather.gov/search\">SEARCH</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul class=\"no-links\">\r\n <li><!-- Begin search code -->\r\n <div id=\"site-search\">\r\n <form method=\"get\" action=\"http://search.usa.gov/search\" style=\"margin-bottom: 0; margin-top: 0;\">\r\n <input type=\"hidden\" name=\"v:project\" value=\"firstgov\" /> \r\n <label for=\"query\">Search For</label> \r\n <input type=\"text\" name=\"query\" id=\"query\" size=\"12\" /> \r\n <input type=\"submit\" value=\"Go\" />\r\n <p>\r\n <input type=\"radio\" name=\"affiliate\" checked=\"checked\" value=\"nws.noaa.gov\" id=\"nws\" /> \r\n <label for=\"nws\" class=\"search-scope\">NWS</label> \r\n <input type=\"radio\" name=\"affiliate\" value=\"noaa.gov\" id=\"noaa\" /> \r\n <label for=\"noaa\" class=\"search-scope\">All NOAA</label>\r\n </p>\r\n </form>\r\n </div>\r\n </li>\r\n </ul> </div>\r\n </li>\r\n <li class=\"last\">\t\r\n <div class=\"topMenuNavList section-link\">\r\n \t<a href=\"http://www.weather.gov/about\">ABOUT</a> </div>\r\n <div style=\"opacity: 0;\" class=\"sub\">\r\n <ul> <li> <a href=\"http://www.weather.gov/about\">About NWS</a> </li> <li> <a href=\"http://www.weather.gov/organization\">Organization</a> </li> <li> <a href=\"http://www.nws.noaa.gov/sp\">Strategic Plan</a> </li> <li> <a href=\"https://sites.google.com/a/noaa.gov/nws-best-practices/\">For NWS Employees</a> </li> <li> <a href=\"http://www.nws.noaa.gov/ia/home.htm\">International</a> </li> <li> <a href=\"http://www.weather.gov/organization\">National Centers</a> </li> <li> <a href=\"http://www.nws.noaa.gov/tg\">Products and Services</a> </li> <li> <a href=\"http://www.weather.gov/contact\">Contact Us</a> </li> <li> <a href=\"http://www.nws.noaa.gov/glossary\">Glossary</a> </li></ul> </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n \r\n\t\r\n\t<div class=\"center-content\">\r\n\t\t\r\n\t\t\t\t<div class=\"one-sixth-first\">\r\n\t\t\t<div id=\"forecast-lookup\">\r\n\t\t\t\t<form name=\"getForecast\" id=\"getForecast\" action=\"http://forecast.weather.gov/zipcity.php\" method=\"get\">\r\n <label for=\"inputstring\">Local forecast by <br>\"City, St\" or ZIP code</label>\r\n <input id=\"inputstring\" name=\"inputstring\" type=\"text\" value=\"Enter location ...\" onclick=\"this.value=''\" />\r\n <input name=\"btnSearch\" id=\"btnSearch\" type=\"submit\" value=\"Go\" />\r\n <div id=\"txtError\">\r\n <div id=\"errorNoResults\" style=\"display:none;\">Sorry, the location you searched for was not found. Please try another search.</div>\r\n <div id=\"errorMultipleResults\" style=\"display:none\">Multiple locations were found. Please select one of the following:</div>\r\n <div id=\"errorChoices\" style=\"display:none\"></div>\r\n <input id=\"btnCloseError\" type=\"button\" value=\"Close\" style=\"display:none\" />\r\n </div>\r\n <div id=\"txtHelp\"><a style=\"text-decoration: underline;\" href=\"javascript:void(window.open('http://weather.gov/ForecastSearchHelp.html','locsearchhelp','status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=1,scrollbars=1,height=500,width=530').focus());\">Location Help</a></div>\r\n </form>\r\n\r\n\t\t\t</div><!-- <div id=\"forecast-lookup\"> -->\r\n\t\t</div><!-- <div class=\"one-sixth-first\"> -->\r\n\t\r\n\t\t<div class=\"five-sixth-last\"><div id=\"topnews\"><h1 style='font-size:11pt;'>Cold Continues Across Eastern U.S., Rain Forecast from Four Corners to Southern Plains</h1><p>Unseasonably cold conditions will continue through the weekend across the central and eastern U.S., with temperatures 10-20 degrees below normal for many locations east of the Mississippi. Meanwhile, rain is forecast into the weekend from the Four Corners region to the southern Plains. <br /><a href='http://go.usa.gov/RRX' target='_blank'>Read More...</a></p></div></div>\r\n\t\t\r\n \t<script type=\"text/javascript\">$.get(\"siteNews.php\", {a:\"lox\"},function(response){ if (response !== \"false\") $(\"#topnews\").html($(response).find(\"#topnews\").html()); });</script><script language=javascript>document.title =' 7-Day Forecast for Latitude 34.1&deg;N and Longitude 118.42&deg;W (Elev. 774 ft)';</script><script type=\"text/javascript\" src=\"JavaScript/json.js\"></script><script type=\"text/javascript\" src=\"JavaScript/google_map.js\"></script><div class=\"div-full hazardous-conditions\"><h1>Hazardous Weather Conditions</h1><ul><li><a href=\"showsigwx.php?warnzone=CAZ041&warncounty=CAC037&firewxzone=CAZ241&local_place1=&product1=Dense+Fog+Advisory\">Dense Fog Advisory is in effect until October 26, 09:00 AM PDT</a></li><li><a href=\"showsigwx.php?warnzone=CAZ041&warncounty=CAC037&firewxzone=CAZ241&local_place1=&product1=Special+Weather+Statement\">Special Weather Statement is in effect </a></li></ul></div><div class=\"div-full forecast-section current-conditions\" ><div class=\"three-fifth-first\"><h1>Current Conditions</h1></div><!-- end of div class three-fifth-first --><div class=\"two-fifth-last forecast-section-options\"><p><a href=\"http://forecast-md.weather.gov/MapClick.php?lat=34.10&lon=-118.41&FcstType=textr&unit=0&lg=sp\"><b>En Espa&ntilde;ol</b></a></p><!-- AddThis Button BEGIN -->\r\n\t<div class=\"addthis_toolbox addthis_default_style \">\r\n\t<a href=\"http://www.addthis.com/bookmark.php?v=250&amp;pubid=ra-5127a6364d551d04\" class=\"addthis_button_compact\">Share</a> \r\n\t<span class=\"addthis_separator\">|</span>\r\n\t<a class=\"addthis_button_preferred_1\"></a>\r\n\t<a class=\"addthis_button_preferred_2\"></a>\r\n\t<a class=\"addthis_button_preferred_3\"></a>\r\n\t<a class=\"addthis_button_preferred_4\"></a>\r\n\t<a class=\"addthis_button_preferred_5\"></a>\r\n\t</div>\r\n\t<script type=\"text/javascript\">var addthis_config = {\"data_track_addressbar\":true};</script>\r\n\t<script type=\"text/javascript\" src=\"http://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5127a6364d551d04\"></script>\r\n\t<!-- AddThis Button END --></div><!-- end of div class two-fifth-last forecast-section-options --></div><!-- end of div class div-full forecast-section current-conditions --><div class=\"div-full current-conditions\"><div class=\"one-third-first\"><div class=\"div-half\"><p class=\"feature\"><img src=\"/images/wtf/large/fg.png\" alt=\"\" width=\"134\" height=\"134\" /></p></div><div class=\"div-half-right\"><p class=\"myforecast-current\">Fog</p><p class=\"myforecast-current-lrg\">57&deg;F</p><p><span class=\"myforecast-current-sm\">14&deg;C</span></p></div></div><div class=\"one-third-first\"><ul class=\"current-conditions-detail\"><li><span class=\"label\">Humidity</span>96%</li><li><span class=\"label\">Wind Speed</span>N 3 MPH</li><li><span class=\"label\">Barometer</span>30.09 in (1018.8 mb)</li><li><span class=\"label\">Dewpoint</span>56&deg;F (13&deg;C)</li><li><span class=\"label\">Visibility</span>0.00 mi</li></ul><p class=\"current-conditions-timestamp\">Last Update on 26 Oct 7:51 am PDT </p><br></div><div class=\"one-third-last\"><p style=\"font-size: 8pt;\">Current conditions at</p><p class=\"current-conditions-location\">Santa Monica, Santa Monica Municipal Airport (KSMO)</p><p> Lat: 34.01583 Lon: -118.45139 Elev: 174ft.<br /></p><div class=\"current-conditions-extra\"><p><a href=\"http://www.wrh.noaa.gov/total_forecast/other_obs.php?wfo=lox&zone=CAZ041\">More Local Wx</a> | <a href=\"http://www.wrh.noaa.gov/mesowest/getobext.php?wfo=lox&sid=KSMO&num=72&raw=0\">3 Day History</a> | <a href=http://mobile.weather.gov/index.php?lat=34.01583&lon=-118.45139>Mobile Weather</a></p></div></div></div><div class=\"forecast-separator\"></div><div class=\"div-full forecast-section\"><div class=\"three-fifth-first\"><h1>4 Miles W Hollywood CA</h1><h2>7 Day Forecast</h2></div><div class=\"two-fifth-last sitename\"><p class=\"sitename-name\"><a href=\"http://www.wrh.noaa.gov/lox\">Los Angeles/Oxnard, CA</a></p><p class=\"sitename-class\">NWS Weather Forecast Office</p></div><!-- end of div class two-fifth-last sitename --></div><!-- end of div class div-full forecast-section --><div class=\"div-full point-forecast-icons\"> <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Today<br><br></p>\n <p><img src=\"/images/wtf/medium/few.png\" width=\"86\" height=\"86\" alt=\"Sunny\" title=\"Sunny\" /></p>\n <p>Sunny<br><br></p>\n <p class=\"point-forecast-icons-high\">High: 80 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Tonight<br><br></p>\n <p><img src=\"/images/wtf/medium/nfew.png\" width=\"86\" height=\"86\" alt=\"Mostly Clear\" title=\"Mostly Clear\" /></p>\n <p>Mostly<br>Clear<br></p>\n <p class=\"point-forecast-icons-low\">Low: 59 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Sunday<br><br></p>\n <p><img src=\"/images/wtf/medium/few.png\" width=\"86\" height=\"86\" alt=\"Sunny\" title=\"Sunny\" /></p>\n <p>Sunny<br><br></p>\n <p class=\"point-forecast-icons-high\">High: 75 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Sunday<br>Night</p>\n <p><img src=\"/images/wtf/medium/nbkn.png\" width=\"86\" height=\"86\" alt=\"Increasing Clouds\" title=\"Increasing Clouds\" /></p>\n <p>Increasing<br>Clouds<br></p>\n <p class=\"point-forecast-icons-low\">Low: 56 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Monday<br><br></p>\n <p><img src=\"/images/wtf/medium/shra40.png\" width=\"86\" height=\"86\" alt=\"Chance Showers Chance for Measurable Precipitation 40%\" title=\"Chance Showers Chance for Measurable Precipitation 40%\" /></p>\n <p>Chance<br>Showers<br></p>\n <p class=\"point-forecast-icons-high\">High: 63 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Monday<br>Night</p>\n <p><img src=\"/images/wtf/medium/nshra50.png\" width=\"86\" height=\"86\" alt=\"Chance Showers Chance for Measurable Precipitation 50%\" title=\"Chance Showers Chance for Measurable Precipitation 50%\" /></p>\n <p>Chance<br>Showers<br></p>\n <p class=\"point-forecast-icons-low\">Low: 52 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Tuesday<br><br></p>\n <p><img src=\"/images/wtf/medium/hi_shwrs20.png\" width=\"86\" height=\"86\" alt=\"Slight Chance Showers Chance for Measurable Precipitation 20%\" title=\"Slight Chance Showers Chance for Measurable Precipitation 20%\" /></p>\n <p>Slight Chc<br>Showers<br></p>\n <p class=\"point-forecast-icons-high\">High: 63 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Tuesday<br>Night</p>\n <p><img src=\"/images/wtf/medium/nfew.png\" width=\"86\" height=\"86\" alt=\"Mostly Clear\" title=\"Mostly Clear\" /></p>\n <p>Mostly<br>Clear<br></p>\n <p class=\"point-forecast-icons-low\">Low: 53 &deg;F</p>\n </div>\n <div class=\"one-ninth-first\">\n <p class=\"txt-ctr-caps\">Wednesday<br><br></p>\n <p><img src=\"/images/wtf/medium/few.png\" width=\"86\" height=\"86\" alt=\"Sunny\" title=\"Sunny\" /></p>\n <p>Sunny<br><br></p>\n <p class=\"point-forecast-icons-high\">High: 69 &deg;F</p>\n </div>\n</div><div class=\"partial-width-borderbottom\"><div class=\"two-third-first point-forecast-7-day\"> <ul class=\"point-forecast-7-day\">\n <li class=\"row-odd\"><span class=\"label\">Today</span> Sunny, with a high near 80. Northwest wind around 5 mph becoming calm in the afternoon. </li>\n <li class=\"row-even\"><span class=\"label\">Tonight</span> Mostly clear, with a low around 59. West southwest wind 5 to 10 mph becoming light and variable in the evening. </li>\n <li class=\"row-odd\"><span class=\"label\">Sunday</span> Sunny, with a high near 75. Light and variable wind becoming south southwest 5 to 10 mph in the afternoon. </li>\n <li class=\"row-even\"><span class=\"label\">Sunday Night</span> Increasing clouds, with a low around 56. South wind 5 to 10 mph becoming light southeast in the evening. Winds could gust as high as 15 mph. </li>\n <li class=\"row-odd\"><span class=\"label\">Monday</span> A 40 percent chance of showers, mainly after 11am. Mostly cloudy, with a high near 63. Southwest wind 5 to 15 mph becoming south southeast in the morning. Winds could gust as high as 20 mph. </li>\n <li class=\"row-even\"><span class=\"label\">Monday Night</span> A 50 percent chance of showers. Mostly cloudy, with a low around 52.</li>\n <li class=\"row-odd\"><span class=\"label\">Tuesday</span> A 20 percent chance of showers before 11am. Mostly sunny, with a high near 63.</li>\n <li class=\"row-even\"><span class=\"label\">Tuesday Night</span> Mostly clear, with a low around 53.</li>\n <li class=\"row-odd\"><span class=\"label\">Wednesday</span> Sunny, with a high near 69.</li>\n <li class=\"row-even\"><span class=\"label\">Wednesday Night</span> Mostly clear, with a low around 54.</li>\n <li class=\"row-odd\"><span class=\"label\">Thursday</span> Sunny, with a high near 73.</li>\n <li class=\"row-even\"><span class=\"label\">Thursday Night</span> Mostly clear, with a low around 56.</li>\n <li class=\"row-odd\"><span class=\"label\">Friday</span> Sunny, with a high near 78.</li>\n </ul>\n<p>&nbsp;</p><h1>Additional Forecasts and Information</h1><p class=\"myforecast-location\"><a href=\"MapClick.php?zoneid=CAZ041\">Zone Area Forecast for Los Angeles County Coast including Downtown Los Angeles, CA</a></p><div class=\"div-full\"><p>&nbsp;</p><div class=\"div-third\"><a href=\"http://forecast.weather.gov/product.php?site=NWS&issuedby=LOX&product=AFD&format=CI&version=1&glossary=1\">Forecast Discussion</a><br /><a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=text&TextType=2\">Printable Forecast</a><br /><a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=text&TextType=1\">Text Only Forecast</a></div><div class=\"div-third\"><a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=graphical\">Hourly Weather Graph</a><br /><a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=digital\">Tabular Forecast</a><br /><a href=\"afm/PointClick.php?lat=34.10000&lon=-118.41000\">Quick Forecast</a></div><div class=\"div-third\"><a href=\"http://weather.gov/aq/probe_aq_data.php?latitude=34.10000&longitude=-118.41000\">Air Quality Forecasts</a><br/><a href=\"http://forecast-md.weather.gov/MapClick.php?lat=34.10&lon=-118.41&FcstType=text&unit=1&lg=en\">International System of Units</a><br /><a href=\"http://www.srh.weather.gov/srh/jetstream/webweather/pinpoint_max.htm\">About Point Forecasts</a><br /><a href=\"http://www.wrh.noaa.gov/forecast/wxtables/index.php?lat=34.10000&lon=-118.41000\">Forecast Weather Table Interface</a></div></div><div class=\"div-full\"><div class=\"div-third\"><br><a href=\"http://www.wrh.noaa.gov/mesowest/mwmap.php?map=lox\" target=\"_self\">Observation Map (Regional)</a><br /><a href=\"http://www.wrh.noaa.gov/mesowest/mwmap.php?map=la\" target=\"_self\">Observation Map (Los Angeles)</a><br /><a href=\"http://www.wrh.noaa.gov/warnings.php?wfo=lox\" target=\"_self\">Warnings</a><br /></div><div class=\"div-third\"><br><a href=\"http://www.wrh.noaa.gov/forecasts/graphical/sectors/lox.php\" target=\"_self\">Experimental Graphical Forecasts</a><br /><a href=\"http://www.wrh.noaa.gov/lox/getprod.php?pil=qps&sid=lox&format=pre\" target=\"_self\">Quantitative Precipitation Forecast</a><br /><a href=\"http://www.weather.gov/climate/index.php?wfo=lox\" target=\"_self\">Climatology</a><br /></div><div class=\"div-third\"><br><a href=\"http://www.nws.noaa.gov/wtf/udaf/area/?site=lox\" target=\"_self\">User Defined Area</a><br /></div><p>&nbsp;</p></div></div><div class=\"one-third-last point-forecast-right\"><div id=\"point-forecast-info\"><div class='point-forecast-map'><div class='point-forecast-map-header'>Click Map for Forecast<div class='disclaimer'><a href='http://www.weather.gov/credits.php#googlemapping'>Disclaimer</a></div></div><form name=\"littleform\" method=\"post\" action=\"#\"><div id=\"gmap\"><noscript><center><br><br><b>Map function requires Javascript and a compatible browser.</b></center></noscript></div><div class=\"point-forecast-map-footer\"><img src=\"/images/wtf/maplegend.gif\" width=\"240\" height=\"16\" alt=\"Map Legend\"><p><strong>Lat/Lon:</strong> 34.1&deg;N 118.42&deg;W&nbsp;&nbsp; <strong>Elevation:</strong> 774 ft</p></div></form></div><h2>FORECAST DETAILS</h2><ul class=\"point-forecast-info\"><li><span class=\"label\">Point Forecast:</span> <b>Point Forecast:</b> 4 Miles W Hollywood CA<br>&nbsp;34.1&deg;N 118.42&deg;W (Elev. 774 ft)</li><li><span class=\"label\"><a href=\"http://www.weather.gov/glossary/index.php?word=Last+update\">Last Update</a>:</span> 7:10 am PDT Oct 26, 2013</li><li><span class=\"label\"><a href=\"http://www.weather.gov/glossary/index.php?word=forecast+valid+for\">Forecast Valid</a>:</span> 9am PDT Oct 26, 2013-6pm PDT Nov 1, 2013<p><a href=\"http://forecast.weather.gov/product.php?site=NWS&issuedby=LOX&product=AFD&format=CI&version=1&glossary=1\">Forecast Discussion</a></p><p class=\"forecast-downloads\"><a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=kml\"><img src=\"/images/wtf/kml_badge.png\" width=\"45\" height=\"17\" alt=\"Get as KML\" /></a> <a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=dwml\"><img src=\"/images/wtf/xml_badge.png\" width=\"45\" height=\"17\" alt=\"Get as XML\" /></a></p></li></ul></div><div id=\"radar\"><h2>RADAR &amp; SATELLITE IMAGES</h2><div class=\"div-full\"><a href=\"http://radar.weather.gov/radar.php?rid=vtx&product=N0R&overlay=11101111&loop=no\"><img src=\"http://radar.weather.gov/Thumbs/VTX_Thumb.gif\" class=\"radar-thumb\" alt=\"Link to Local Radar Data\" title=\"Link to Local Radar Data\"></a>&nbsp;<a href=\"http://www.wrh.noaa.gov/satellite/?wfo=lox\"><img src=\"http://sat.wrh.noaa.gov/satellite/4km/WR/IR4.thumbnail.jpg\" class=\"satellite-thumb\" alt=\"Link to Satellite Data\" title=\"Link to Satellite Data\"></a></div></div><div id=\"hourly\"><h2>HOURLY WEATHER GRAPH </h2><p class=\"feature\"><a href=\"MapClick.php?lat=34.10000&lon=-118.41&unit=0&lg=english&FcstType=graphical\"><img src=\"/images/wtf/medium/hourlyweather.png\" width=\"300\" height=\"158\" /></a></p></div><div id=\"ndfd\"><h2>NATIONAL DIGITAL FORECAST DATABASE</h2><p><a href=\"http://www.weather.gov/forecasts/graphical/sectors/pacsouthwest.php?element=MaxT\"><img src=\"http://www.weather.gov/forecasts/graphical/images/thumbnail/latest_MaxMinT_pacsouthwest_thumbnail.png\" border=\"0\" alt=\"National Digital Forecast Database Maximum Temperature Forecast\" title=\"National Digital Forecast Database Maximum Temperature Forecast\" width=\"147\" height=\"150\"></a>&nbsp;<a href=\"http://www.weather.gov/forecasts/graphical/sectors/pacsouthwest.php?element=Wx\"><img src=\"http://www.weather.gov/forecasts/graphical/images/thumbnail/latest_Wx_pacsouthwest_thumbnail.png\" border=\"0\" alt=\"National Digital Forecast Database Weather Element Forecast\" title=\"National Digital Forecast Database Weather Element Forecast\" width=\"147\" height=\"150\"></a></p></div></div></div><script language='javascript'>window.load = load_google_map('{\"centroid_lat\":\"34.10000\",\"centroid_lon\":\"-118.41000\",\"lat1\":\"34.084\",\"lon1\":\"-118.432\",\"lat2\":\"34.106\",\"lon2\":\"-118.437\",\"lat3\":\"34.11\",\"lon3\":\"-118.41\",\"lat4\":\"34.088\",\"lon4\":\"-118.405\"}', 11, '', 'http://forecast.weather.gov');</script>\r\n\r\n\t\t<!-- <div class=\"full-width-first\">\r\n\t\t\t\t\t <div class=\"full-width-first communication-links\">\r\n \t<div class =\"one-third-first nopad\">\r\n \t<div class=\"myforecast-current\" style=\"float:left;padding:0px 20px 0px 0px;\">\r\n \t<a style=\"text-decoration:none;\" href=\"http://twitter.com/usNWSgov\" target=\"_blank\">\r\n \t\t<img src=\"/css/images/twitter.png\" width=\"16\" alt=\"Follow us on Twitter\" height=\"16\" />&nbsp;&nbsp;Follow us on Twitter\r\n \t</a>\r\n \t</div>\r\n \t<div class=\"myforecast-current\" style=\"float:left;padding:0px 20px 0px 0px;\">\r\n \t<a style=\"text-decoration:none;\" href=\"http://www.facebook.com/US.National.Weather.Service.gov\" target=\"_blank\">\r\n \t\t<img src=\"/css/images/fb.png\" width=\"16\" height=\"16\" alt=\"Follow us on Facebook\" />&nbsp;&nbsp;Follow us on Facebook\r\n \t</a>\r\n </div>\r\n \t </div>\r\n <div class =\"one-half-last nopad\">\r\n \t<span class=\"txt-rt myforecast-current\">\r\n \t<div class=\"myforecast-current\" style=\"float:left;padding:0px 20px 0px 0px;\">\r\n \t\t<a href=\"/rss_page.php?site_name=nws\" target=\"_blank\" style=\"text-decoration:none;font-size:11px;\">\r\n\t\t\t\t\t\t\t<img src=\"/css/images/rss.png\" width=\"16\" height=\"16\" alt=\"NWS RSS Feed\" />&nbsp;&nbsp;NWS RSS Feed\r\n\t\t\t\t\t\t</a>\r\n \t</div>\r\n \t\r\n \t</span>\r\n </div>\r\n </div>\r\n \t\t<div style=\"clear:both;\"></div>\r\n\t\r\n\t\t</div>\r\n\t\t-->\r\n\t\t\r\n\t\t<div style=\"clear:both;\"></div>\r\n\t\t\r\n\t</div><!-- <div class=\"center-content\"> -->\r\n\r\n</div><!-- end of <div class=\"center\"> -->\r\n\r\n<!-- sitemap area -->\r\n<div class=\"footer\">\r\n\t\t\t<style type=\"text/css\">\r\n\t\t.footer-column-head a:link, .footer-column-head a:visited {\r\n\t\tcolor: #ED7A08;\t\t\r\n\t\t}\r\n\t\t</style>\r\n\t\t<div class=\"footer-content\">\r\n\t\t\t\t\t\t\t<div class=\"footer-column\" style=\"padding:10px 10px;\">\r\n \t\t\t\t\t<p>\r\n\t\t\t\t\t<span class=\"footer-column-head\">\r\n <a href=\"http://alerts.weather.gov\">ACTIVE ALERTS</a>\r\n\t\t\t\t\t</span><br />\r\n\t\t\t\t\t \t\t\t\t<a href=\" http://alerts.weather.gov\">Warnings By State</a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.hpc.ncep.noaa.gov/ww.shtml\">Excessive Rainfall and Winter Weather Forecasts</a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://water.weather.gov/ahps/?current_color=flood&amp;current_type=all&amp;fcst_type=obs&amp;conus_map=d_map\">River Flooding </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov\">Latest Warnings</a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.spc.noaa.gov/products/outlook/\">Thunderstorm/Tornado Outlook </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nhc.noaa.gov/\">Hurricanes </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.spc.noaa.gov/products/fire_wx/\">Fire Weather Outlooks </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.cpc.ncep.noaa.gov/products/stratosphere/uv_index/uv_alert.shtml\">UV Alerts </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.drought.gov/\">Drought </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.swpc.noaa.gov/alerts/index.html\">Space Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/nwr/\">NOAA Weather Radio </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://alerts.weather.gov/\">NWS CAP Feeds </a><br />\r\n \t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t\t\t<p>&nbsp;</p>\r\n\t\t\t\t\t<p class=\"footer-column-head\">\r\n \t\t\t\t\t<a href=\" http://www.nws.noaa.gov/climate/\">PAST WEATHER</a>\r\n \t\t\t\t</p>\r\n \t\t\t\t<p>\r\n \t\t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/climate/\">Past Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.cpc.ncep.noaa.gov/products/MD_index.shtml\">Climate Monitoring </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/climate/\">Heating/Cooling Days </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/climate/\">Monthly Temps </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/climate/\">Records </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://aa.usno.navy.mil/\">Astronomical Data </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.ncdc.noaa.gov/oa/mpp/\">Certified Weather Data </a><br />\r\n \t\t\t \t\t\t\t</p>\r\n \t\t\t\t \t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"footer-column\" style=\"padding:10px 10px;\">\r\n \t\t\t\t\t<p>\r\n\t\t\t\t\t<span class=\"footer-column-head\">\r\n <a href=\"http://www.weather.gov/current\">CURRENT CONDITIONS</a>\r\n\t\t\t\t\t</span><br />\r\n\t\t\t\t\t \t\t\t\t<a href=\" http://www.weather.gov/Radar\">Radar </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.cpc.ncep.noaa.gov/products/monitoring_and_data/\">Climate Monitoring </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://water.weather.gov/ahps/\">River Levels </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://water.weather.gov/precip/\">Observed Precipitation </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nws.noaa.gov/om/osd/portal.shtml\">Surface Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://weather.noaa.gov/fax/barotrop.shtml\">Upper Air </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.ndbc.noaa.gov/\">Marine and Buoy Reports </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nohrsc.noaa.gov/interactive/html/map.html\">Snow Cover </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.goes.noaa.gov\">Satellite </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.swpc.noaa.gov/\">Space Weather </a><br />\r\n \t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t\t\t<p>&nbsp;</p>\r\n\t\t\t\t\t<p class=\"footer-column-head\">\r\n \t\t\t\t\t<a href=\"http://weather.gov/forecastmaps\">FORECAST</a>\r\n \t\t\t\t</p>\r\n \t\t\t\t<p>\r\n \t\t\t\t \t\t\t\t<a href=\" http://www.weather.gov/\">Local Forecast </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.spc.noaa.gov/\">Severe Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.hpc.ncep.noaa.gov/\">Current Outlook Maps </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.cpc.ncep.noaa.gov/products/Drought\">Drought </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.weather.gov/fire\">Fire Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.hpc.ncep.noaa.gov/\">Fronts/Precipitation Maps </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/forecasts/graphical/\">Current Graphical Forecast Maps </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://water.weather.gov/ahps/forecasts.php\">Rivers </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/om/marine/home.htm\">Marine </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.opc.ncep.noaa.gov/marine_areas.php\">Offshore and High Seas</a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nhc.noaa.gov/\">Hurricanes </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://aviationweather.gov\">Aviation Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.cpc.ncep.noaa.gov/products/OUTLOOKS_index.html\">Climatic Outlook </a><br />\r\n \t\t\t \t\t\t\t</p>\r\n \t\t\t\t \t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"footer-column\" style=\"padding:10px 10px;\">\r\n\t\t\t\t\t<span class=\"footer-column-head\">\r\n\t\t\t\t\t\t<a href=\"http://www.weather.gov/informationcenter\">INFORMATION CENTER</a>\r\n\t\t\t\t\t</span><br />\r\n\t\t\t\t\t \t\t\t\t<a href=\" http://www.spaceweather.gov\">Space Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.noaawatch.gov/briefing.php\">Daily Briefing </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/om/marine/home.htm\">Marine </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nws.noaa.gov/climate\">Climate </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.weather.gov/fire\">Fire Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.aviationweather.gov/\">Aviation </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://mag.ncep.noaa.gov/NCOMAGWEB/appcontroller\">Forecast Models </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://water.weather.gov/ahps/\">Water </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nws.noaa.gov/gis\">GIS</a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/om/coop/\">Cooperative Observers </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nws.noaa.gov/skywarn/\">Storm Spotters </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.tsunami.gov\">Tsunami</a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.economics.noaa.gov\">Facts and Figures </a><br />\r\n \t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"footer-column\" style=\"padding:10px 10px;\">\r\n\t\t\t\t\t<span class=\"footer-column-head\">\r\n\t\t\t\t\t\t<a href=\"http://weather.gov/safety\">WEATHER SAFETY</a>\r\n\t\t\t\t\t</span><br />\r\n\t\t\t\t\t \t\t\t\t<a href=\"http://www.weather.gov/nwr/\">NOAA Weather Radio</a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.weather.gov/stormready/\">StormReady</a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nws.noaa.gov/om/heat/index.shtml\">Heat </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.lightningsafety.noaa.gov/\">Lightning </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nhc.noaa.gov/prepare/\">Hurricanes </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/severeweather/index.shtml\">Thunderstorms </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/severeweather/index.shtml\">Tornadoes </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/severeweather/index.shtml\">Severe Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.ripcurrents.noaa.gov/\">Rip Currents </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/severeweather/index.shtml\">Floods </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/winter/index.shtml\">Winter Weather </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/os/uv/\">Ultra Violet Radiation </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/airquality/\">Air Quality </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/hazstats.shtml\">Damage/Fatality/Injury Statistics </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.redcross.org/\">Red Cross </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.fema.gov/\">Federal Emergency Management Agency (FEMA) </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/brochures.shtml\">Brochures </a><br />\r\n \t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"footer-column\" style=\"padding:10px 10px;\">\r\n \t\t\t\t\t<p>\r\n\t\t\t\t\t<span class=\"footer-column-head\">\r\n <a href=\"http://weather.gov/news\">NEWS</a>\r\n\t\t\t\t\t</span><br />\r\n\t\t\t\t\t \t\t\t\t<a href=\" http://weather.gov/news\">Newsroom</a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://weather.gov/socialmedia\">Social Media </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://www.nws.noaa.gov/com/weatherreadynation/calendar.html\">Events</a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/brochures.shtml\">Pubs/Brochures/Booklets </a><br />\r\n \t\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t\t\t\t<p>&nbsp;</p>\r\n\t\t\t\t\t<p class=\"footer-column-head\">\r\n \t\t\t\t\t<a href=\"http://weather.gov/education\">EDUCATION</a>\r\n \t\t\t\t</p>\r\n \t\t\t\t<p>\r\n \t\t\t\t \t\t\t\t<a href=\" http://www.economics.noaa.gov\">NOAA Economics </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.education.noaa.gov/Weather_and_Atmosphere/\">NOAA Education Resources </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/glossary/\">Glossary </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.srh.noaa.gov/srh/jetstream/\">JetStream </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/training/\">NWS Training Portal </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.lib.noaa.gov/\">NOAA Library </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/reachout/kidspage.shtml\">Play Time for Kids </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.education.noaa.gov/Weather_and_Atmosphere/\">For Students </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.nws.noaa.gov/om/edures.shtml\">For Teachers </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/brochures.shtml\">Brochures </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/om/reachout/links.shtml\">Other Links </a><br />\r\n \t\t\t \t\t\t\t</p>\r\n \t\t\t\t \t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"footer-column\" style=\"padding:10px 10px;\">\r\n\t\t\t\t\t<span class=\"footer-column-head\">\r\n\t\t\t\t\t\t<a href=\"http://weather.gov/about\">ABOUT</a>\r\n\t\t\t\t\t</span><br />\r\n\t\t\t\t\t \t\t\t\t<a href=\"http://weather.gov/organization\">Organization </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/sp/\">Strategic Plan </a><br />\r\n \t\t\t \t\t\t\t<a href=\"https://sites.google.com/a/noaa.gov/nws-best-practices/\">For NWS Employees </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/ia/home.htm\">International </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://weather.gov/organization\">National Centers </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/tg/\">Products and Services </a><br />\r\n \t\t\t \t\t\t\t<a href=\" http://www.weather.gov/glossary/\">Glossary </a><br />\r\n \t\t\t \t\t\t\t<a href=\"http://weather.gov/contact\">Contact Us </a><br />\r\n \t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\r\n</div><!-- end of <div class=\"footer\"> -->\r\n\t\t\r\n<!-- legal footer area -->\r\n<div class=\"footer-legal\">\r\n\t\r\n\t\t<div class=\"footer-legal-content\">\r\n\t\t\t<div class=\"footer-legal-gov\">\r\n\t\t\t\t<a href=\"http://www.usa.gov\"><img src=\"/css/images/usa_gov.png\" width=\"110\" height=\"30\" /></a>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"footer-legal-column\">\r\n\t\t\t\t<p>\r\n\t\t\t\t\t<a href=\"http://www.commerce.gov\">US Dept of Commerce</a><br />\r\n\t\t\t\t\t<a href=\"http://www.noaa.gov\">National Oceanic and Atmospheric Administration</a><br />\r\n\t\t\t\t\t<a href=\"http://www.weather.gov\">National Weather Service</a><br />\r\n \t\t\t\t<a href=\"http://www.weather.gov/lox\">Los Angeles, CA</a><br /> \t\t\t</p>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"footer-legal-column2\">\r\n\t\t\t\t<a href=\"http://www.weather.gov/disclaimer\">Disclaimer</a><br />\r\n\t\t\t\t<a href=\"http://www.cio.noaa.gov/Policy_Programs/info_quality.html\">Information Quality</a><br />\r\n\t\t\t\t<a href=\"http://www.weather.gov/help\">Help</a><br />\r\n\t\t\t\t<a href=\"http://www.weather.gov/glossary\">Glossary</a></div>\r\n\r\n\t\t\t<div class=\"footer-legal-column3\">\r\n\t\t\t\t<a href=\"http://www.weather.gov/privacy\">Privacy Policy</a><br />\r\n\t\t\t\t<a href=\"http://www.rdc.noaa.gov/~foia\">Freedom of Information Act (FOIA)</a><br />\r\n\t\t\t\t<a href=\"http://www.weather.gov/about\">About Us</a><br />\r\n\t\t\t\t<a href=\"http://www.weather.gov/careers\">Career Opportunities</a>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t\r\n</div><!-- end of <div class=\"footer-legal\"> -->\r\n\t\t\r\n\r\n</body>\r\n</html>"},"http_version":null},"recorded_at":"Sat, 26 Oct 2013 15:09:39 GMT"}],"recorded_with":"VCR 2.6.0"}