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.
- data/.gitignore +2 -0
- data/.pelusa.yml +7 -0
- data/.travis.yml +6 -3
- data/Gemfile +11 -1
- data/README.md +89 -244
- data/Rakefile +1 -1
- data/barometer.gemspec +22 -24
- data/lib/barometer.rb +14 -65
- data/lib/barometer/base.rb +35 -65
- data/lib/barometer/data.rb +15 -20
- data/lib/barometer/data/attribute.rb +19 -0
- data/lib/barometer/data/attributes/distance.rb +11 -0
- data/lib/barometer/data/attributes/float.rb +11 -0
- data/lib/barometer/data/attributes/integer.rb +11 -0
- data/lib/barometer/data/attributes/location.rb +11 -0
- data/lib/barometer/data/attributes/pressure.rb +11 -0
- data/lib/barometer/data/attributes/sun.rb +15 -0
- data/lib/barometer/data/attributes/temperature.rb +11 -0
- data/lib/barometer/data/attributes/time.rb +11 -0
- data/lib/barometer/data/attributes/vector.rb +11 -0
- data/lib/barometer/data/attributes/zone.rb +11 -0
- data/lib/barometer/data/convertable_units.rb +145 -0
- data/lib/barometer/data/coordinates.rb +16 -0
- data/lib/barometer/data/distance.rb +14 -133
- data/lib/barometer/data/geo.rb +22 -59
- data/lib/barometer/data/location.rb +14 -20
- data/lib/barometer/data/pressure.rb +14 -135
- data/lib/barometer/data/sun.rb +24 -24
- data/lib/barometer/data/temperature.rb +14 -169
- data/lib/barometer/data/vector.rb +44 -0
- data/lib/barometer/data/zone.rb +109 -112
- data/lib/barometer/query.rb +23 -161
- data/lib/barometer/query/base.rb +88 -0
- data/lib/barometer/query/converter.rb +64 -0
- data/lib/barometer/query/converters/from_coordinates_to_noaa_station_id.rb +30 -0
- data/lib/barometer/query/converters/from_geocode_to_coordinates.rb +28 -0
- data/lib/barometer/query/converters/from_short_zipcode_to_zipcode.rb +28 -0
- data/lib/barometer/query/converters/from_weather_id_to_geocode.rb +30 -0
- data/lib/barometer/query/converters/from_woe_id_or_ipv4_to_geocode.rb +32 -0
- data/lib/barometer/query/converters/to_geocode.rb +30 -0
- data/lib/barometer/query/converters/to_weather_id.rb +30 -0
- data/lib/barometer/query/converters/to_woe_id.rb +30 -0
- data/lib/barometer/query/format.rb +59 -0
- data/lib/barometer/query/formats/base.rb +22 -0
- data/lib/barometer/query/formats/coordinates.rb +14 -0
- data/lib/barometer/query/formats/geocode.rb +15 -0
- data/lib/barometer/query/formats/icao.rb +35 -0
- data/lib/barometer/query/formats/ipv4_address.rb +19 -0
- data/lib/barometer/query/formats/noaa_station_id.rb +15 -0
- data/lib/barometer/query/formats/postalcode.rb +20 -0
- data/lib/barometer/query/formats/short_zipcode.rb +15 -0
- data/lib/barometer/{translations → query/formats/translations}/icao_country_codes.yml +0 -0
- data/lib/barometer/{translations → query/formats/translations}/weather_country_codes.yml +0 -0
- data/lib/barometer/query/formats/unknown.rb +14 -0
- data/lib/barometer/query/formats/weather_id.rb +33 -0
- data/lib/barometer/query/formats/woe_id.rb +28 -0
- data/lib/barometer/query/formats/zipcode.rb +15 -0
- data/lib/barometer/query/service.rb +13 -0
- data/lib/barometer/query/services/apis/geonames_timezone.rb +26 -0
- data/lib/barometer/query/services/apis/google_geocode.rb +35 -0
- data/lib/barometer/query/services/apis/noaa_station.rb +31 -0
- data/lib/barometer/query/services/apis/weather_id.rb +35 -0
- data/lib/barometer/query/services/apis/wunderground_timezone.rb +26 -0
- data/lib/barometer/query/services/apis/yahoo_placefinder.rb +35 -0
- data/lib/barometer/query/services/apis/yahoo_weather.rb +31 -0
- data/lib/barometer/query/services/from_weather_id.rb +64 -0
- data/lib/barometer/query/services/geonames_timezone.rb +18 -0
- data/lib/barometer/query/services/google_geocode.rb +106 -0
- data/lib/barometer/query/services/noaa_station_id.rb +28 -0
- data/lib/barometer/query/services/to_weather_id.rb +25 -0
- data/lib/barometer/query/services/to_woe_id.rb +29 -0
- data/lib/barometer/query/services/wunderground_timezone.rb +18 -0
- data/lib/barometer/query/services/yahoo_geocode.rb +69 -0
- data/lib/barometer/response.rb +12 -0
- data/lib/barometer/response/base.rb +57 -0
- data/lib/barometer/response/current.rb +27 -0
- data/lib/barometer/response/prediction.rb +41 -0
- data/lib/barometer/response/prediction_collection.rb +48 -0
- data/lib/barometer/utils.rb +17 -0
- data/lib/barometer/utils/address.rb +33 -0
- data/lib/barometer/utils/api.rb +30 -0
- data/lib/barometer/utils/config_reader.rb +40 -0
- data/lib/barometer/utils/get.rb +17 -0
- data/lib/barometer/utils/json_reader.rb +22 -0
- data/lib/barometer/utils/payload.rb +100 -0
- data/lib/barometer/utils/payload_request.rb +37 -0
- data/lib/barometer/utils/post.rb +24 -0
- data/lib/barometer/utils/time.rb +78 -0
- data/lib/barometer/{translations → utils/translations}/zone_codes.yml +0 -0
- data/lib/barometer/utils/versioned_registration.rb +70 -0
- data/lib/barometer/utils/xml_reader.rb +27 -0
- data/lib/barometer/utils/zone_code_lookup.rb +30 -0
- data/lib/barometer/version.rb +1 -1
- data/lib/barometer/weather.rb +44 -173
- data/lib/barometer/weather_service.rb +41 -0
- data/lib/barometer/weather_services/base.rb +50 -0
- data/lib/barometer/weather_services/forecast_io.rb +36 -0
- data/lib/barometer/weather_services/forecast_io/api.rb +22 -0
- data/lib/barometer/weather_services/forecast_io/query.rb +38 -0
- data/lib/barometer/weather_services/forecast_io/response.rb +31 -0
- data/lib/barometer/weather_services/forecast_io/response/current_weather.rb +78 -0
- data/lib/barometer/weather_services/forecast_io/response/forecasted_weather.rb +74 -0
- data/lib/barometer/weather_services/forecast_io/response/location.rb +19 -0
- data/lib/barometer/weather_services/forecast_io/response/timezone.rb +25 -0
- data/lib/barometer/weather_services/noaa.rb +21 -305
- data/lib/barometer/weather_services/noaa/current_api.rb +25 -0
- data/lib/barometer/weather_services/noaa/current_query.rb +30 -0
- data/lib/barometer/weather_services/noaa/current_response.rb +29 -0
- data/lib/barometer/weather_services/noaa/forecast_api.rb +25 -0
- data/lib/barometer/weather_services/noaa/forecast_query.rb +39 -0
- data/lib/barometer/weather_services/noaa/forecast_response.rb +28 -0
- data/lib/barometer/weather_services/noaa/response/current_location.rb +42 -0
- data/lib/barometer/weather_services/noaa/response/current_station.rb +46 -0
- data/lib/barometer/weather_services/noaa/response/current_weather.rb +82 -0
- data/lib/barometer/weather_services/noaa/response/forecasted_weather.rb +90 -0
- data/lib/barometer/weather_services/noaa/response/location.rb +19 -0
- data/lib/barometer/weather_services/noaa/response/timezone.rb +15 -0
- data/lib/barometer/weather_services/response.rb +9 -0
- data/lib/barometer/weather_services/response/location.rb +42 -0
- data/lib/barometer/weather_services/response/time_zone.rb +19 -0
- data/lib/barometer/weather_services/weather_bug.rb +24 -280
- data/lib/barometer/weather_services/weather_bug/current_api.rb +26 -0
- data/lib/barometer/weather_services/weather_bug/current_response.rb +33 -0
- data/lib/barometer/weather_services/weather_bug/forecast_api.rb +26 -0
- data/lib/barometer/weather_services/weather_bug/forecast_response.rb +29 -0
- data/lib/barometer/weather_services/weather_bug/query.rb +42 -0
- data/lib/barometer/weather_services/weather_bug/response/current_weather.rb +82 -0
- data/lib/barometer/weather_services/weather_bug/response/forecasted_weather.rb +67 -0
- data/lib/barometer/weather_services/weather_bug/response/location.rb +23 -0
- data/lib/barometer/weather_services/weather_bug/response/station.rb +43 -0
- data/lib/barometer/weather_services/weather_bug/response/sun.rb +32 -0
- data/lib/barometer/weather_services/weather_bug/response/time_helper.rb +52 -0
- data/lib/barometer/weather_services/weather_bug/response/timezone.rb +15 -0
- data/lib/barometer/weather_services/wunderground_v1.rb +32 -0
- data/lib/barometer/weather_services/wunderground_v1/current_api.rb +21 -0
- data/lib/barometer/weather_services/wunderground_v1/current_response.rb +31 -0
- data/lib/barometer/weather_services/wunderground_v1/forecast_api.rb +21 -0
- data/lib/barometer/weather_services/wunderground_v1/forecast_response.rb +33 -0
- data/lib/barometer/weather_services/wunderground_v1/query.rb +30 -0
- data/lib/barometer/weather_services/wunderground_v1/response/current_weather.rb +92 -0
- data/lib/barometer/weather_services/wunderground_v1/response/forecasted_weather.rb +87 -0
- data/lib/barometer/weather_services/wunderground_v1/response/full_timezone.rb +22 -0
- data/lib/barometer/weather_services/wunderground_v1/response/location.rb +43 -0
- data/lib/barometer/weather_services/wunderground_v1/response/station.rb +39 -0
- data/lib/barometer/weather_services/wunderground_v1/response/sun.rb +53 -0
- data/lib/barometer/weather_services/wunderground_v1/response/timezone.rb +15 -0
- data/lib/barometer/weather_services/yahoo.rb +16 -198
- data/lib/barometer/weather_services/yahoo/api.rb +21 -0
- data/lib/barometer/weather_services/yahoo/query.rb +42 -0
- data/lib/barometer/weather_services/yahoo/response.rb +39 -0
- data/lib/barometer/weather_services/yahoo/response/current_weather.rb +86 -0
- data/lib/barometer/weather_services/yahoo/response/forecasted_weather.rb +71 -0
- data/lib/barometer/weather_services/yahoo/response/location.rb +47 -0
- data/lib/barometer/weather_services/yahoo/response/sun.rb +43 -0
- data/lib/barometer/weather_services/yahoo/response/timezone.rb +15 -0
- data/spec/barometer_spec.rb +18 -120
- data/spec/base_spec.rb +114 -0
- data/spec/cassettes/Converter_FromCoordinatesToNoaaStationId.json +1 -0
- data/spec/cassettes/Converter_FromWeatherIdToGeocode.json +1 -0
- data/spec/cassettes/Converter_FromWoeIdOrIpv4ToGeocode.json +1 -0
- data/spec/cassettes/Converter_ToGeocode.json +1 -0
- data/spec/cassettes/Converter_ToWeatherId.json +1 -0
- data/spec/cassettes/Converter_ToWoeId.json +1 -0
- data/spec/cassettes/Service_FromWeatherId.json +1 -0
- data/spec/cassettes/Service_GoogleGeocode.json +1 -0
- data/spec/cassettes/Service_NoaaStation.json +1 -0
- data/spec/cassettes/Service_ToWeatherId.json +1 -0
- data/spec/cassettes/Service_ToWoeId.json +1 -0
- data/spec/cassettes/Service_YahooGeocode.json +1 -0
- data/spec/cassettes/WeatherService_ForecastIo.json +1 -0
- data/spec/cassettes/WeatherService_Noaa.json +1 -1
- data/spec/cassettes/WeatherService_WeatherBug.json +1 -1
- data/spec/cassettes/WeatherService_WundergroundV1.json +1 -0
- data/spec/cassettes/WeatherService_Yahoo.json +1 -1
- data/spec/data/attributes/distance_spec.rb +60 -0
- data/spec/data/attributes/location_spec.rb +41 -0
- data/spec/data/attributes/pressure_spec.rb +60 -0
- data/spec/data/attributes/sun_spec.rb +33 -0
- data/spec/data/attributes/temperature_spec.rb +60 -0
- data/spec/data/attributes/time_spec.rb +58 -0
- data/spec/data/attributes/vector_spec.rb +43 -0
- data/spec/data/attributes/zone_spec.rb +34 -0
- data/spec/data/convertable_units_spec.rb +299 -0
- data/spec/data/coordinates_spec.rb +15 -0
- data/spec/data/distance_spec.rb +49 -333
- data/spec/data/geo_spec.rb +72 -71
- data/spec/data/location_spec.rb +70 -65
- data/spec/data/pressure_spec.rb +49 -333
- data/spec/data/sun_spec.rb +57 -81
- data/spec/data/temperature_spec.rb +49 -393
- data/spec/data/vector_spec.rb +100 -0
- data/spec/data/zone_spec.rb +199 -266
- data/spec/query/base_spec.rb +296 -0
- data/spec/query/converter_spec.rb +98 -0
- data/spec/query/converters/from_coordinates_to_noaa_station_id_spec.rb +35 -0
- data/spec/query/converters/from_geocode_to_coordinates_spec.rb +25 -0
- data/spec/query/converters/from_short_zipcode_to_zipcode_spec.rb +31 -0
- data/spec/query/converters/from_weather_id_to_geocode_spec.rb +40 -0
- data/spec/query/converters/from_woe_id_or_ipv4_to_geocode_spec.rb +51 -0
- data/spec/query/converters/to_geocode_spec.rb +99 -0
- data/spec/query/converters/to_weather_id_spec.rb +35 -0
- data/spec/query/converters/to_woe_id_spec.rb +74 -0
- data/spec/query/formats/base_spec.rb +15 -0
- data/spec/query/formats/coordinates_spec.rb +13 -0
- data/spec/query/formats/geocode_spec.rb +9 -0
- data/spec/query/formats/icao_spec.rb +20 -0
- data/spec/query/formats/ipv4_address_spec.rb +33 -0
- data/spec/query/formats/noaa_station_id_spec.rb +9 -0
- data/spec/query/formats/postalcode_spec.rb +18 -0
- data/spec/query/formats/short_zipcode_spec.rb +18 -0
- data/spec/query/formats/unknown_spec.rb +9 -0
- data/spec/query/formats/weather_id_spec.rb +31 -0
- data/spec/query/formats/woe_id_spec.rb +45 -0
- data/spec/query/formats/zipcode_spec.rb +18 -0
- data/spec/query/formats_spec.rb +55 -0
- data/spec/query/services/from_weather_id_spec.rb +54 -0
- data/spec/query/services/google_geocode_spec.rb +60 -0
- data/spec/query/services/noaa_station_id_spec.rb +23 -0
- data/spec/query/services/to_weather_id_spec.rb +23 -0
- data/spec/query/services/to_woe_id_spec.rb +51 -0
- data/spec/query/services/yahoo_geocode_spec.rb +72 -0
- data/spec/response/base_spec.rb +103 -0
- data/spec/response/current_spec.rb +33 -0
- data/spec/response/predicition_spec.rb +65 -0
- data/spec/response/prediction_collection_spec.rb +97 -0
- data/spec/spec_helper.rb +14 -12
- data/spec/support/key_file_parser.rb +22 -0
- data/spec/support/matchers/formats.rb +36 -0
- data/spec/support/matchers/have_data.rb +46 -0
- data/spec/support/matchers/have_field.rb +128 -0
- data/spec/support/matchers/have_forecast.rb +46 -0
- data/spec/support/matchers/path.rb +23 -0
- data/spec/support/query_factory.rb +20 -0
- data/spec/utils/address_spec.rb +67 -0
- data/spec/utils/config_reader_spec.rb +157 -0
- data/spec/utils/get_spec.rb +22 -0
- data/spec/utils/payload_request_spec.rb +69 -0
- data/spec/utils/payload_spec.rb +168 -0
- data/spec/utils/post_spec.rb +20 -0
- data/spec/utils/time_spec.rb +93 -0
- data/spec/utils/versioned_registration_spec.rb +105 -0
- data/spec/weather_services/base_spec.rb +116 -0
- data/spec/weather_services/forecast_io_spec.rb +71 -0
- data/spec/weather_services/noaa/current_response_spec.rb +22 -0
- data/spec/weather_services/noaa/forecast_response_spec.rb +33 -0
- data/spec/weather_services/noaa_spec.rb +68 -166
- data/spec/weather_services/weather_bug/current_response_spec.rb +64 -0
- data/spec/weather_services/weather_bug/forecast_response_spec.rb +23 -0
- data/spec/weather_services/weather_bug_spec.rb +62 -202
- data/spec/weather_services/wunderground_v1/current_response_spec.rb +19 -0
- data/spec/weather_services/wunderground_v1/forecast_response_spec.rb +62 -0
- data/spec/weather_services/wunderground_v1_spec.rb +78 -0
- data/spec/weather_services/yahoo/response_spec.rb +73 -0
- data/spec/weather_services/yahoo_spec.rb +52 -135
- data/spec/weather_services_spec.rb +103 -0
- data/spec/weather_spec.rb +167 -347
- metadata +342 -123
- data/.document +0 -5
- data/TODO +0 -60
- data/bin/barometer +0 -441
- data/lib/barometer/data/local_datetime.rb +0 -145
- data/lib/barometer/data/local_time.rb +0 -134
- data/lib/barometer/data/speed.rb +0 -158
- data/lib/barometer/data/units.rb +0 -49
- data/lib/barometer/formats.rb +0 -13
- data/lib/barometer/formats/coordinates.rb +0 -57
- data/lib/barometer/formats/format.rb +0 -64
- data/lib/barometer/formats/geocode.rb +0 -60
- data/lib/barometer/formats/icao.rb +0 -37
- data/lib/barometer/formats/postalcode.rb +0 -22
- data/lib/barometer/formats/short_zipcode.rb +0 -17
- data/lib/barometer/formats/weather_id.rb +0 -92
- data/lib/barometer/formats/woe_id.rb +0 -150
- data/lib/barometer/formats/zipcode.rb +0 -31
- data/lib/barometer/key_file_parser.rb +0 -20
- data/lib/barometer/measurements/measurement.rb +0 -202
- data/lib/barometer/measurements/result.rb +0 -207
- data/lib/barometer/measurements/result_array.rb +0 -75
- data/lib/barometer/services.rb +0 -19
- data/lib/barometer/weather_services/service.rb +0 -189
- data/lib/barometer/weather_services/wunderground.rb +0 -264
- data/lib/barometer/web_services/geocode.rb +0 -34
- data/lib/barometer/web_services/noaa_station_id.rb +0 -53
- data/lib/barometer/web_services/placemaker.rb +0 -95
- data/lib/barometer/web_services/timezone.rb +0 -38
- data/lib/barometer/web_services/weather_id.rb +0 -50
- data/lib/barometer/web_services/web_service.rb +0 -29
- data/spec/cassettes/Barometer.json +0 -1
- data/spec/cassettes/Query.json +0 -1
- data/spec/cassettes/Query_Format_Coordinates.json +0 -1
- data/spec/cassettes/Query_Format_Geocode.json +0 -1
- data/spec/cassettes/Query_Format_WeatherID.json +0 -1
- data/spec/cassettes/Query_Format_WoeID.json +0 -1
- data/spec/cassettes/WeatherService.json +0 -1
- data/spec/cassettes/WeatherService_Wunderground.json +0 -1
- data/spec/cassettes/WebService_Geocode.json +0 -1
- data/spec/cassettes/WebService_NoaaStation.json +0 -1
- data/spec/data/local_datetime_spec.rb +0 -274
- data/spec/data/local_time_spec.rb +0 -239
- data/spec/data/speed_spec.rb +0 -374
- data/spec/data/units_spec.rb +0 -101
- data/spec/formats/coordinates_spec.rb +0 -166
- data/spec/formats/format_spec.rb +0 -74
- data/spec/formats/geocode_spec.rb +0 -163
- data/spec/formats/icao_spec.rb +0 -55
- data/spec/formats/postalcode_spec.rb +0 -53
- data/spec/formats/short_zipcode_spec.rb +0 -47
- data/spec/formats/weather_id_spec.rb +0 -182
- data/spec/formats/woe_id_spec.rb +0 -211
- data/spec/formats/zipcode_spec.rb +0 -103
- data/spec/key_file_parser_spec.rb +0 -28
- data/spec/measurements/measurement_spec.rb +0 -381
- data/spec/measurements/result_array_spec.rb +0 -150
- data/spec/measurements/result_spec.rb +0 -632
- data/spec/query_spec.rb +0 -498
- data/spec/weather_services/services_spec.rb +0 -135
- data/spec/weather_services/wunderground_spec.rb +0 -179
- data/spec/web_services/geocode_spec.rb +0 -31
- data/spec/web_services/noaa_station_id_spec.rb +0 -33
- data/spec/web_services/placemaker_spec.rb +0 -41
- 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
|
data/spec/barometer_spec.rb
CHANGED
@@ -1,133 +1,31 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Barometer
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
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
|
-
|
72
|
-
|
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 "
|
78
|
-
|
79
|
-
|
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 "
|
108
|
-
|
109
|
-
|
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
|
128
|
-
Barometer
|
129
|
-
|
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
|
data/spec/base_spec.rb
ADDED
@@ -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°N and Longitude 118.42°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ñ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&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°F</p><p><span class=\"myforecast-current-sm\">14°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°F (13°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 °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 °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 °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 °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 °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 °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 °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 °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 °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> </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> </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> </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°N 118.42°W <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> 34.1°N 118.42°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 & 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> <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> <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\" /> 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\" /> 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\" /> 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&current_type=all&fcst_type=obs&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> </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> </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> </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"}
|