weather-api 1.0.1 → 1.1.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.
- checksums.yaml +7 -0
- data/.travis.yml +1 -1
- data/Gemfile +1 -7
- data/README.md +3 -4
- data/Rakefile +1 -1
- data/lib/weather-api.rb +47 -25
- data/lib/weather-api/astronomy.rb +3 -3
- data/lib/weather-api/atmosphere.rb +4 -4
- data/lib/weather-api/condition.rb +5 -5
- data/lib/weather-api/forecast.rb +7 -7
- data/lib/weather-api/image.rb +2 -18
- data/lib/weather-api/location.rb +4 -4
- data/lib/weather-api/response.rb +14 -18
- data/lib/weather-api/units.rb +5 -5
- data/lib/weather-api/utils.rb +3 -3
- data/lib/weather-api/version.rb +2 -2
- data/lib/weather-api/wind.rb +4 -4
- data/spec/fixtures/cassettes/Weather_Astronomy/should_contain_Time_objects_for_sunrise_and_sunset.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Atmosphere/should_contain_a_float_indicating_atmospheric_pressure.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Atmosphere/should_contain_a_string_indicating_barometric_pressure.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Atmosphere/should_contain_integers_representing_humidity_and_visibility.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Condition/should_contain_a_weather_condition_code_a_date_a_temperature_and_a_description.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Forecast/should_contain_high_and_low_forecasts.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Forecast/should_contain_the_name_of_the_day_associated_with_the_forecast.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Forecast/should_have_a_brief_description_of_the_forecasted_conditions.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Forecast/should_have_a_weather_condition_code.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Forecast/should_have_an_associated_date.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Image/should_contain_a_string_for_the_image_url.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Location/should_be_able_to_look_up_Nice_France.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Location/should_be_able_to_look_up_Seattle_WA.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Location/should_be_able_to_look_up_Victoria_BC.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Location/should_contain_city_country_and_region_as_strings.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_HTML_description_summarizing_weather_conditions.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_String_title.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Astronomy_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Atmosphere_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Condition_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Image_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Location_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Units_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_Weather_Wind_object.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_a_collection_of_Weather_Forecast_objects.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_latitude_and_longitude_in_floats.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Response/should_contain_the_WOEID_of_the_request_location_and_the_requested_URL.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Units/defaults/should_default_to_imperial_units.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Units/defaults/should_switch_to_metric_if_specified.yml +62 -0
- data/spec/fixtures/cassettes/Weather_Wind/should_contain_chill_direction_and_speed_as_integers.yml +62 -0
- data/spec/lib/astronomy_spec.rb +12 -0
- data/spec/lib/atmosphere_spec.rb +20 -0
- data/spec/lib/condition_spec.rb +14 -0
- data/spec/lib/forecast_spec.rb +28 -0
- data/spec/lib/image_spec.rb +11 -0
- data/spec/lib/location_spec.rb +36 -0
- data/spec/lib/response_spec.rb +57 -0
- data/spec/lib/units_spec.rb +30 -0
- data/spec/lib/utils_spec.rb +11 -0
- data/spec/lib/version_spec.rb +7 -0
- data/spec/lib/wind_spec.rb +13 -0
- data/spec/{helper.rb → spec_helper.rb} +3 -5
- data/weather-api.gemspec +9 -11
- metadata +127 -88
- data/Guardfile +0 -19
- data/lib/weather-api/api.rb +0 -33
- data/spec/cases/api_spec.rb +0 -8
- data/spec/cases/astronomy_spec.rb +0 -15
- data/spec/cases/atmosphere_spec.rb +0 -23
- data/spec/cases/condition_spec.rb +0 -17
- data/spec/cases/forecast_spec.rb +0 -32
- data/spec/cases/image_spec.rb +0 -21
- data/spec/cases/location_spec.rb +0 -41
- data/spec/cases/response_spec.rb +0 -60
- data/spec/cases/units_spec.rb +0 -36
- data/spec/cases/utils_spec.rb +0 -13
- data/spec/cases/version_spec.rb +0 -8
- data/spec/cases/wind_spec.rb +0 -16
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d6e46994f572ac298e6ad32d292a6bce10f0cf85
|
4
|
+
data.tar.gz: 1d3c9f8ffc9e794194b0ac42c070aa7dd56c6249
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3f3011c676656e65dbc112325118f507bc9238020c10216068a20beebbca0e4bb11e6f674d1e8702c68068e2428380d4fb9f1cee70126549d71ac92100a0593a
|
7
|
+
data.tar.gz: d198fc6e28090b34bbb948440587a2ed073b3d28445676e88e18fb93dede73e7bf6778949a1ff7c728e265dcb9c80080461f2add517b60e18814424134f02f45
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -8,7 +8,8 @@ A Ruby wrapper for the Yahoo! Weather XML RSS feed.
|
|
8
8
|
|
9
9
|
## Description
|
10
10
|
|
11
|
-
Weather-API provides an object-oriented interface to the Yahoo! Weather XML RSS
|
11
|
+
Weather-API provides an object-oriented interface to the Yahoo! Weather XML RSS
|
12
|
+
feed service.
|
12
13
|
|
13
14
|
Details on the service can be found [here](http://developer.yahoo.com/weather).
|
14
15
|
|
@@ -19,11 +20,9 @@ A simple example:
|
|
19
20
|
require 'rubygems'
|
20
21
|
require 'weather-api'
|
21
22
|
|
22
|
-
client = Weather::API.new
|
23
|
-
|
24
23
|
# look up WOEID via http://weather.yahoo.com; enter location by city
|
25
24
|
# name or zip and WOEID is at end of resulting page url.
|
26
|
-
response =
|
25
|
+
response = Weather.lookup(9830)
|
27
26
|
|
28
27
|
print <<EOT
|
29
28
|
#{response.title}
|
data/Rakefile
CHANGED
data/lib/weather-api.rb
CHANGED
@@ -1,37 +1,59 @@
|
|
1
1
|
require 'net/http'
|
2
|
-
require '
|
2
|
+
require 'json'
|
3
|
+
require 'map'
|
4
|
+
|
5
|
+
require 'weather-api/astronomy'
|
6
|
+
require 'weather-api/atmosphere'
|
7
|
+
require 'weather-api/condition'
|
8
|
+
require 'weather-api/forecast'
|
9
|
+
require 'weather-api/image'
|
10
|
+
require 'weather-api/location'
|
11
|
+
require 'weather-api/response'
|
12
|
+
require 'weather-api/units'
|
13
|
+
require 'weather-api/utils'
|
14
|
+
require 'weather-api/version'
|
15
|
+
require 'weather-api/wind'
|
3
16
|
|
4
17
|
module Weather
|
5
18
|
class << self
|
19
|
+
# Yahoo! Weather info endpoint
|
20
|
+
ROOT = "http://query.yahooapis.com/v1/public/yql"
|
6
21
|
|
7
|
-
#
|
22
|
+
# Public: Looks up current weather information using WOEID
|
8
23
|
#
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
24
|
+
# woeid - Int - Where On Earth IDentifier -- unique ID for
|
25
|
+
# location to get weather data for. To find
|
26
|
+
# a WOEID, refer to Yahoo!'s documentation
|
27
|
+
# at http://developer.yahoo.com/weather/
|
28
|
+
#
|
29
|
+
# units - String - whether to retrieve data in Farenheit
|
30
|
+
# or Celsius. Defaults to Farenheit
|
31
|
+
#
|
32
|
+
# Returns a Weather::Response object containing forecast
|
33
|
+
def lookup woeid, units = 'f'
|
34
|
+
url = ROOT
|
35
|
+
url += "?q=select%20*%20from%20weather.forecast%20"
|
36
|
+
url += "where%20woeid%3D#{woeid}%20and%20u%3D'#{units}'&format=json"
|
13
37
|
|
14
|
-
|
15
|
-
|
16
|
-
return super unless new.respond_to?(method)
|
17
|
-
new.send(method, *args, &block)
|
38
|
+
doc = get_response url
|
39
|
+
Response.new woeid, url, doc
|
18
40
|
end
|
19
41
|
|
20
|
-
|
21
|
-
|
42
|
+
private
|
43
|
+
def get_response url
|
44
|
+
begin
|
45
|
+
response = Net::HTTP.get_response(URI.parse url).body.to_s
|
46
|
+
rescue => e
|
47
|
+
raise "Failed to get weather [url=#{url}, e=#{e}]."
|
48
|
+
end
|
49
|
+
|
50
|
+
response = Map.new(JSON.parse(response))[:query][:results][:channel]
|
51
|
+
|
52
|
+
if response.nil?
|
53
|
+
raise "Failed to get weather [url=#{url}]."
|
54
|
+
end
|
55
|
+
|
56
|
+
response
|
22
57
|
end
|
23
58
|
end
|
24
|
-
|
25
|
-
autoload :API, 'weather-api/api'
|
26
|
-
autoload :Astronomy, 'weather-api/astronomy'
|
27
|
-
autoload :Atmosphere, 'weather-api/atmosphere'
|
28
|
-
autoload :Condition, 'weather-api/condition'
|
29
|
-
autoload :Forecast, 'weather-api/forecast'
|
30
|
-
autoload :Image, 'weather-api/image'
|
31
|
-
autoload :Location, 'weather-api/location'
|
32
|
-
autoload :Response, 'weather-api/response'
|
33
|
-
autoload :Units, 'weather-api/units'
|
34
|
-
autoload :Utils, 'weather-api/utils'
|
35
|
-
autoload :Version, 'weather-api/version'
|
36
|
-
autoload :Wind, 'weather-api/wind'
|
37
59
|
end
|
@@ -6,9 +6,9 @@ module Weather
|
|
6
6
|
# a Time object containing the sunset time for a location
|
7
7
|
attr_reader :sunset
|
8
8
|
|
9
|
-
def initialize
|
10
|
-
@sunrise =
|
11
|
-
@sunset
|
9
|
+
def initialize payload
|
10
|
+
@sunrise = Utils.parse_time payload[:sunrise]
|
11
|
+
@sunset = Utils.parse_time payload[:sunset]
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -23,14 +23,14 @@ module Weather
|
|
23
23
|
attr_reader :barometer
|
24
24
|
|
25
25
|
def initialize(payload)
|
26
|
-
@humidity = payload[
|
27
|
-
@visibility = payload[
|
28
|
-
@pressure = payload[
|
26
|
+
@humidity = payload[:humidity].to_i
|
27
|
+
@visibility = payload[:visibility].to_i
|
28
|
+
@pressure = payload[:pressure].to_f
|
29
29
|
|
30
30
|
# map barometric pressure to appropriate constant
|
31
31
|
@barometer = nil
|
32
32
|
|
33
|
-
case payload[
|
33
|
+
case payload[:rising].to_i
|
34
34
|
when 0 then @barometer = Barometer::STEADY
|
35
35
|
when 1 then @barometer = Barometer::RISING
|
36
36
|
when 2 then @barometer = Barometer::FALLING
|
@@ -12,11 +12,11 @@ module Weather
|
|
12
12
|
# the brief prose text description of the weather conditions of the location.
|
13
13
|
attr_reader :text
|
14
14
|
|
15
|
-
def initialize
|
16
|
-
@code = payload[
|
17
|
-
@date =
|
18
|
-
@temp = payload[
|
19
|
-
@text = payload[
|
15
|
+
def initialize payload
|
16
|
+
@code = payload[:code].to_i
|
17
|
+
@date = Utils.parse_time payload[:date]
|
18
|
+
@temp = payload[:temp].to_i
|
19
|
+
@text = payload[:text]
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/weather-api/forecast.rb
CHANGED
@@ -18,13 +18,13 @@ module Weather
|
|
18
18
|
# the weather condition code, detailed at http://developer.yahoo.com/weather
|
19
19
|
attr_reader :code
|
20
20
|
|
21
|
-
def initialize
|
22
|
-
@day = payload[
|
23
|
-
@date =
|
24
|
-
@low = payload[
|
25
|
-
@high = payload[
|
26
|
-
@text = payload[
|
27
|
-
@code = payload[
|
21
|
+
def initialize payload
|
22
|
+
@day = payload[:day]
|
23
|
+
@date = Utils.parse_time payload[:date]
|
24
|
+
@low = payload[:low].to_i
|
25
|
+
@high = payload[:high].to_i
|
26
|
+
@text = payload[:text]
|
27
|
+
@code = payload[:code].to_i
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/lib/weather-api/image.rb
CHANGED
@@ -1,26 +1,10 @@
|
|
1
1
|
module Weather
|
2
2
|
class Image
|
3
|
-
# the image height in pixels
|
4
|
-
attr_reader :height
|
5
|
-
|
6
|
-
# the image width in pixels
|
7
|
-
attr_reader :width
|
8
|
-
|
9
3
|
# the full URL to the image
|
10
4
|
attr_reader :url
|
11
5
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
# the title of the image
|
16
|
-
attr_reader :title
|
17
|
-
|
18
|
-
def initialize(payload)
|
19
|
-
@height = payload.xpath('height').first.content.to_i
|
20
|
-
@width = payload.xpath('width').first.content.to_i
|
21
|
-
@url = payload.xpath('url').first.content
|
22
|
-
@link = payload.xpath('link').first.content
|
23
|
-
@title = payload.xpath('title').first.content
|
6
|
+
def initialize payload
|
7
|
+
@url = payload.scan(/src=\"(.*)\"/).flatten.first
|
24
8
|
end
|
25
9
|
end
|
26
10
|
end
|
data/lib/weather-api/location.rb
CHANGED
@@ -9,10 +9,10 @@ module Weather
|
|
9
9
|
# name of the region, such as a state or province
|
10
10
|
attr_reader :region
|
11
11
|
|
12
|
-
def initialize
|
13
|
-
@city
|
14
|
-
@country = payload[
|
15
|
-
@region
|
12
|
+
def initialize payload
|
13
|
+
@city = payload[:city]
|
14
|
+
@country = payload[:country]
|
15
|
+
@region = payload[:region]
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/weather-api/response.rb
CHANGED
@@ -52,34 +52,30 @@ module Weather
|
|
52
52
|
# the title of the weather information for the requested location
|
53
53
|
attr_reader :title
|
54
54
|
|
55
|
-
def initialize
|
55
|
+
def initialize request_location, request_url, doc
|
56
56
|
# save the request params
|
57
57
|
@request_location = request_location
|
58
58
|
@request_url = request_url
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
@astronomy = Astronomy.new doc[:astronomy]
|
61
|
+
@location = Location.new doc[:location]
|
62
|
+
@units = Units.new doc[:units]
|
63
|
+
@wind = Wind.new doc[:wind]
|
64
|
+
@atmosphere = Atmosphere.new doc[:atmosphere]
|
65
|
+
@image = Image.new doc[:item][:description]
|
62
66
|
|
63
|
-
@astronomy = Weather::Astronomy.new(root.xpath('yweather:astronomy').first)
|
64
|
-
@location = Weather::Location.new(root.xpath('yweather:location').first)
|
65
|
-
@units = Weather::Units.new(root.xpath('yweather:units').first)
|
66
|
-
@wind = Weather::Wind.new(root.xpath('yweather:wind').first)
|
67
|
-
@atmosphere = Weather::Atmosphere.new(root.xpath('yweather:atmosphere').first)
|
68
|
-
@image = Weather::Image.new(root.xpath('image').first)
|
69
|
-
|
70
|
-
item = root.xpath('item').first
|
71
67
|
@forecasts = []
|
72
68
|
|
73
|
-
@condition =
|
69
|
+
@condition = Condition.new doc[:item][:condition]
|
74
70
|
|
75
|
-
item
|
76
|
-
@forecasts <<
|
71
|
+
doc[:item][:forecast].each do |forecast|
|
72
|
+
@forecasts << Forecast.new(forecast)
|
77
73
|
end
|
78
74
|
|
79
|
-
@latitude = item
|
80
|
-
@longitude = item
|
81
|
-
@title = item
|
82
|
-
@description = item
|
75
|
+
@latitude = doc[:item][:lat].to_f
|
76
|
+
@longitude = doc[:item][:long].to_f
|
77
|
+
@title = doc[:item][:title]
|
78
|
+
@description = doc[:item][:description]
|
83
79
|
end
|
84
80
|
end
|
85
81
|
end
|
data/lib/weather-api/units.rb
CHANGED
@@ -19,11 +19,11 @@ module Weather
|
|
19
19
|
# e.g. mph for miles per hour, and kph for kilometers per hour
|
20
20
|
attr_reader :speed
|
21
21
|
|
22
|
-
def initialize
|
23
|
-
@temperature = payload[
|
24
|
-
@distance
|
25
|
-
@pressure
|
26
|
-
@speed
|
22
|
+
def initialize payload
|
23
|
+
@temperature = payload[:temperature]
|
24
|
+
@distance = payload[:distance]
|
25
|
+
@pressure = payload[:pressure]
|
26
|
+
@speed = payload[:speed]
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/lib/weather-api/utils.rb
CHANGED
@@ -6,15 +6,15 @@ module Weather
|
|
6
6
|
# Attempts to convert passed text into a Time object
|
7
7
|
#
|
8
8
|
# Returns a Time object or nil
|
9
|
-
def self.parse_time
|
9
|
+
def self.parse_time text = ''
|
10
10
|
if text == ''
|
11
11
|
return nil
|
12
12
|
end
|
13
13
|
|
14
14
|
begin
|
15
|
-
Time.parse
|
15
|
+
Time.parse text
|
16
16
|
rescue ArgumentError
|
17
|
-
Chronic.parse
|
17
|
+
Chronic.parse text
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
data/lib/weather-api/version.rb
CHANGED
data/lib/weather-api/wind.rb
CHANGED
@@ -9,10 +9,10 @@ module Weather
|
|
9
9
|
# the windspeed
|
10
10
|
attr_reader :speed
|
11
11
|
|
12
|
-
def initialize
|
13
|
-
@chill
|
14
|
-
@direction = payload[
|
15
|
-
@speed
|
12
|
+
def initialize payload
|
13
|
+
@chill = payload[:chill].to_i
|
14
|
+
@direction = payload[:direction].to_i
|
15
|
+
@speed = payload[:speed].to_i
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://query.yahooapis.com/v1/public/yql?format=json&q=select%20*%20from%20weather.forecast%20where%20woeid=9848%20and%20u='f'
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- '*/*'
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- query.yahooapis.com
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
X-Yql-Host:
|
24
|
+
- engine1.yql.ne1.yahoo.com
|
25
|
+
Access-Control-Allow-Origin:
|
26
|
+
- '*'
|
27
|
+
Cache-Control:
|
28
|
+
- public, max-age=3600
|
29
|
+
Content-Type:
|
30
|
+
- application/json;charset=utf-8
|
31
|
+
Vary:
|
32
|
+
- Accept-Encoding
|
33
|
+
Date:
|
34
|
+
- Fri, 29 Mar 2013 06:53:56 GMT
|
35
|
+
Server:
|
36
|
+
- YTS/1.20.13
|
37
|
+
Age:
|
38
|
+
- '1309'
|
39
|
+
Content-Length:
|
40
|
+
- '880'
|
41
|
+
Connection:
|
42
|
+
- keep-alive
|
43
|
+
body:
|
44
|
+
encoding: UTF-8
|
45
|
+
string: '{"query":{"count":1,"created":"2013-03-29T06:53:57Z","lang":"en-US","results":{"channel":{"title":"Yahoo!
|
46
|
+
Weather - Victoria, CA","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Victoria__CA/*http://weather.yahoo.com/forecast/CAXX0523_f.html","description":"Yahoo!
|
47
|
+
Weather for Victoria, CA","language":"en-us","lastBuildDate":"Thu, 28 Mar
|
48
|
+
2013 8:59 pm PDT","ttl":"60","location":{"city":"Victoria","country":"Canada","region":"BC"},"units":{"distance":"mi","pressure":"in","speed":"mph","temperature":"F"},"wind":{"chill":"46","direction":"230","speed":"5"},"atmosphere":{"humidity":"82","pressure":"30.11","rising":"1","visibility":""},"astronomy":{"sunrise":"6:59
|
49
|
+
am","sunset":"7:36 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions
|
50
|
+
for Victoria, CA at 8:59 pm PDT","lat":"48.43","long":"-123.36","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Victoria__CA/*http://weather.yahoo.com/forecast/CAXX0523_f.html","pubDate":"Thu,
|
51
|
+
28 Mar 2013 8:59 pm PDT","condition":{"code":"29","date":"Thu, 28 Mar 2013
|
52
|
+
8:59 pm PDT","temp":"48","text":"Partly Cloudy"},"description":"\n<img src=\"http://l.yimg.com/a/i/us/we/52/29.gif\"/><br
|
53
|
+
/>\n<b>Current Conditions:</b><br />\nPartly Cloudy, 48 F<BR />\n<BR /><b>Forecast:</b><BR
|
54
|
+
/>\nThu - Clear. High: 55 Low: 43<br />\nFri - AM Clouds/PM Sun. High: 55
|
55
|
+
Low: 44<br />\n<br />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Victoria__CA/*http://weather.yahoo.com/forecast/CAXX0523_f.html\">Full
|
56
|
+
Forecast at Yahoo! Weather</a><BR/><BR/>\n(provided by <a href=\"http://www.weather.com\"
|
57
|
+
>The Weather Channel</a>)<br/>\n","forecast":[{"code":"31","date":"28 Mar
|
58
|
+
2013","day":"Thu","high":"55","low":"43","text":"Clear"},{"code":"30","date":"29
|
59
|
+
Mar 2013","day":"Fri","high":"55","low":"44","text":"AM Clouds/PM Sun"}],"guid":{"isPermaLink":"false","content":"CAXX0523_2013_03_29_7_00_PDT"}}}}}}'
|
60
|
+
http_version:
|
61
|
+
recorded_at: Fri, 29 Mar 2013 07:15:45 GMT
|
62
|
+
recorded_with: VCR 2.4.0
|