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