accuweather 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -9
- data/lib/accuweather.rb +7 -13
- data/lib/accuweather/conditions/local.rb +7 -7
- data/lib/accuweather/conditions/parser.rb +6 -6
- data/lib/accuweather/conditions/units.rb +11 -11
- data/lib/accuweather/location/city.rb +29 -0
- data/lib/accuweather/location/parser.rb +19 -0
- data/lib/accuweather/version.rb +1 -1
- metadata +4 -3
- data/lib/accuweather/location.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc7bfc4757609cb611775de025b9612c43913cbd
|
4
|
+
data.tar.gz: 630af49fdd6319f9016b1ae43955e979f19d1d34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7b5678dc93483e02ad3cc0f4b73ddeeff09266f43888ad663583684a9b21b5f2b6e6d7a7dc9eb24b3511f1f9d2a2626a7126efa54a934ee212a4664e4b305cf
|
7
|
+
data.tar.gz: d74ea8bf168345691bffeea22b9171911d3f180bf63f0b75603776c1f8afd881bdd25f4a9cbbd1930ef07f95a86eba795c79b0ba361cffcab421646d6c93b030
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ Or install it yourself as:
|
|
24
24
|
Search for an accuweather location:
|
25
25
|
|
26
26
|
```ruby
|
27
|
-
location_array = Accuweather.city_search('vancouver')
|
27
|
+
location_array = Accuweather.city_search(name: 'vancouver')
|
28
28
|
vancouver = location_array.first
|
29
29
|
|
30
30
|
vancouver.id # => 'cityId:53286'
|
@@ -37,7 +37,7 @@ vancouver.longitude # => '123.1154'
|
|
37
37
|
Search for weather conditions for a given location id:
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
current_weather = Accuweather.get_conditions('cityId:53286').current
|
40
|
+
current_weather = Accuweather.get_conditions(location_id: 'cityId:53286').current
|
41
41
|
current_weather.temperature # => '41'
|
42
42
|
current_weather.weather_text # => 'Partly Sunny'
|
43
43
|
current_weather.pressure # => '30.35'
|
@@ -48,27 +48,33 @@ current_weather.cloud_cover # => '40%'
|
|
48
48
|
Get the units for the conditions:
|
49
49
|
|
50
50
|
```ruby
|
51
|
-
units = Accuweather.get_conditions('cityId:53286').units
|
52
|
-
units.
|
53
|
-
units.
|
54
|
-
units.speed
|
51
|
+
units = Accuweather.get_conditions(location_id: 'cityId:53286').units
|
52
|
+
units.temperature # => 'F'
|
53
|
+
units.distance # => 'MI'
|
54
|
+
units.speed # => 'MPH'
|
55
55
|
```
|
56
56
|
|
57
57
|
Get more information on the location including time and time zone:
|
58
58
|
|
59
59
|
```ruby
|
60
|
-
local = Accuweather.get_conditions('cityId:53286').local
|
60
|
+
local = Accuweather.get_conditions(location_id: 'cityId:53286').local
|
61
61
|
local.time # => '13:41'
|
62
62
|
local.time_zone # => '-8'
|
63
63
|
local.time_zone_abbreviation # => 'PST'
|
64
64
|
```
|
65
65
|
|
66
|
+
Imperial units are returned by default, but metric results are available:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
Accuweather.get_conditions(location_id: 'cityId:53286', metric: true)
|
70
|
+
```
|
71
|
+
|
66
72
|
Each `Accuweather::Conditions` object implements a `to_s` method that displays all attribute
|
67
73
|
name, value pairs. This makes it easy to explore the API. For example:
|
68
74
|
|
69
75
|
```ruby
|
70
|
-
Accuweather.get_conditions('cityId:53286').local.to_s
|
71
|
-
# => "city: Vancouver, state: British Columbia,
|
76
|
+
Accuweather.get_conditions(location_id: 'cityId:53286').local.to_s
|
77
|
+
# => "city: Vancouver, state: British Columbia, latitude: 49.2448, longitude: -123.1154, time: 16:58, time_zone: -8, obs_daylight: 0, current_gmt_offset: -8, time_zone_abbreviation: PST"
|
72
78
|
```
|
73
79
|
|
74
80
|
## Development
|
data/lib/accuweather.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'accuweather/version'
|
2
|
-
require 'accuweather/location'
|
2
|
+
require 'accuweather/location/city'
|
3
|
+
require 'accuweather/location/parser'
|
3
4
|
require 'accuweather/conditions/parser'
|
4
5
|
require 'accuweather/conditions/units'
|
5
6
|
require 'accuweather/conditions/local'
|
@@ -9,26 +10,19 @@ require 'net/http'
|
|
9
10
|
require 'nokogiri'
|
10
11
|
|
11
12
|
module Accuweather
|
12
|
-
def self.city_search(name)
|
13
|
+
def self.city_search(name:)
|
13
14
|
response = Net::HTTP.get('samsungmobile.accu-weather.com',
|
14
15
|
"/widget/samsungmobile/city-find.asp?returnGeoPosition=1&location=#{name}")
|
15
16
|
|
16
|
-
|
17
|
-
xml = Nokogiri::XML.parse(response)
|
18
|
-
xml.css('location').map do |location|
|
19
|
-
Accuweather::Location.new(id: location.attr('location'),
|
20
|
-
city: location.attr('city'),
|
21
|
-
state: location.attr('state'),
|
22
|
-
latitude: location.attr('latitude'),
|
23
|
-
longitude: location.attr('longitude'))
|
24
|
-
end
|
17
|
+
Accuweather::Location::Parser.new(response).cities
|
25
18
|
rescue StandardError
|
26
19
|
[]
|
27
20
|
end
|
28
21
|
|
29
|
-
def self.get_conditions(location_id)
|
22
|
+
def self.get_conditions(location_id:, metric: false)
|
23
|
+
metric_value = metric ? '1' : '0'
|
30
24
|
response = Net::HTTP.get('samsungmobile.accu-weather.com',
|
31
|
-
"/widget/samsungmobile/weather-data.asp?metric
|
25
|
+
"/widget/samsungmobile/weather-data.asp?metric=#{metric_value}&location=#{location_id}")
|
32
26
|
|
33
27
|
Accuweather::Conditions::Parser.new(response)
|
34
28
|
rescue StandardError
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module Accuweather
|
2
2
|
module Conditions
|
3
3
|
class Local
|
4
|
-
attr_reader :city, :state, :
|
4
|
+
attr_reader :city, :state, :latitude, :longitude, :time, :time_zone, :obs_daylight, :current_gmt_offset, :time_zone_abbreviation
|
5
5
|
|
6
|
-
def initialize(city:, state:,
|
6
|
+
def initialize(city:, state:, latitude:, longitude:, time:, time_zone:, obs_daylight:, current_gmt_offset:, time_zone_abbreviation:)
|
7
7
|
@city = city
|
8
8
|
@state = state
|
9
|
-
@
|
10
|
-
@
|
9
|
+
@latitude = latitude
|
10
|
+
@longitude = longitude
|
11
11
|
@time = time
|
12
12
|
@time_zone = time_zone
|
13
13
|
@obs_daylight = obs_daylight
|
@@ -18,8 +18,8 @@ module Accuweather
|
|
18
18
|
def ==(other)
|
19
19
|
city == other.city &&
|
20
20
|
state == other.state &&
|
21
|
-
|
22
|
-
|
21
|
+
latitude == other.latitude &&
|
22
|
+
longitude == other.longitude &&
|
23
23
|
time == other.time &&
|
24
24
|
time_zone == other.time_zone &&
|
25
25
|
obs_daylight == other.obs_daylight &&
|
@@ -30,7 +30,7 @@ module Accuweather
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def to_s
|
33
|
-
"city: #{city}, state: #{state},
|
33
|
+
"city: #{city}, state: #{state}, latitude: #{latitude}, longitude: #{longitude}, time: #{time}, time_zone: #{time_zone}, obs_daylight: #{obs_daylight}, current_gmt_offset: #{current_gmt_offset}, time_zone_abbreviation: #{time_zone_abbreviation}"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -7,19 +7,19 @@ module Accuweather
|
|
7
7
|
|
8
8
|
def units
|
9
9
|
units = @doc.css('units').first
|
10
|
-
Accuweather::Conditions::Units.new(
|
11
|
-
|
10
|
+
Accuweather::Conditions::Units.new(temperature: units.css('temp').text,
|
11
|
+
distance: units.css('dist').text,
|
12
12
|
speed: units.css('speed').text,
|
13
|
-
|
14
|
-
|
13
|
+
pressure: units.css('pres').text,
|
14
|
+
precipitation: units.css('prec').text)
|
15
15
|
end
|
16
16
|
|
17
17
|
def local
|
18
18
|
local = @doc.css('local').first
|
19
19
|
Accuweather::Conditions::Local.new(city: local.css('city').text,
|
20
20
|
state: local.css('state').text,
|
21
|
-
|
22
|
-
|
21
|
+
latitude: local.css('lat').text,
|
22
|
+
longitude: local.css('lon').text,
|
23
23
|
time: local.css('time').text,
|
24
24
|
time_zone: local.css('timeZone').text,
|
25
25
|
obs_daylight: local.css('obsDaylight').text.strip,
|
@@ -1,28 +1,28 @@
|
|
1
1
|
module Accuweather
|
2
2
|
module Conditions
|
3
3
|
class Units
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :temperature, :distance, :speed, :pressure, :precipitation
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
@
|
6
|
+
def initialize(temperature:, distance:, speed:, pressure:, precipitation:)
|
7
|
+
@temperature = temperature
|
8
|
+
@distance = distance
|
9
9
|
@speed = speed
|
10
|
-
@
|
11
|
-
@
|
10
|
+
@pressure = pressure
|
11
|
+
@precipitation = precipitation
|
12
12
|
end
|
13
13
|
|
14
14
|
def ==(other)
|
15
|
-
|
16
|
-
|
15
|
+
temperature == other.temperature &&
|
16
|
+
distance == other.distance &&
|
17
17
|
speed == other.speed &&
|
18
|
-
|
19
|
-
|
18
|
+
pressure == other.pressure &&
|
19
|
+
precipitation == other.precipitation
|
20
20
|
rescue NoMethodError
|
21
21
|
false
|
22
22
|
end
|
23
23
|
|
24
24
|
def to_s
|
25
|
-
"
|
25
|
+
"temperature: #{temperature}, distance: #{distance}, speed: #{speed}, pressure: #{pressure}, precipitation: #{precipitation}"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Accuweather
|
2
|
+
module Location
|
3
|
+
class City
|
4
|
+
attr_reader :id, :city, :state, :latitude, :longitude
|
5
|
+
|
6
|
+
def initialize(id:, city:, state:, latitude:, longitude:)
|
7
|
+
@id = id
|
8
|
+
@city = city
|
9
|
+
@state = state
|
10
|
+
@latitude = latitude
|
11
|
+
@longitude = longitude
|
12
|
+
end
|
13
|
+
|
14
|
+
def ==(other)
|
15
|
+
id == other.id &&
|
16
|
+
city == other.city &&
|
17
|
+
state == other.state &&
|
18
|
+
latitude == other.latitude &&
|
19
|
+
longitude == other.longitude
|
20
|
+
rescue NoMethodError
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
"id: #{id}, city: #{city}, state: #{state}, latitude: #{latitude}, longitude: #{longitude}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Accuweather
|
2
|
+
module Location
|
3
|
+
class Parser
|
4
|
+
def initialize(response)
|
5
|
+
@doc = Nokogiri::XML.parse(response)
|
6
|
+
end
|
7
|
+
|
8
|
+
def cities
|
9
|
+
@doc.css('location').map do |location|
|
10
|
+
Accuweather::Location::City.new(id: location.attr('location'),
|
11
|
+
city: location.attr('city'),
|
12
|
+
state: location.attr('state'),
|
13
|
+
latitude: location.attr('latitude'),
|
14
|
+
longitude: location.attr('longitude'))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/accuweather/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: accuweather
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Aschenbach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -91,7 +91,8 @@ files:
|
|
91
91
|
- lib/accuweather/conditions/local.rb
|
92
92
|
- lib/accuweather/conditions/parser.rb
|
93
93
|
- lib/accuweather/conditions/units.rb
|
94
|
-
- lib/accuweather/location.rb
|
94
|
+
- lib/accuweather/location/city.rb
|
95
|
+
- lib/accuweather/location/parser.rb
|
95
96
|
- lib/accuweather/version.rb
|
96
97
|
homepage: https://github.com/nick-aschenbach/accuweather
|
97
98
|
licenses: []
|
data/lib/accuweather/location.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
module Accuweather
|
2
|
-
class Location
|
3
|
-
attr_reader :id, :city, :state, :latitude, :longitude
|
4
|
-
|
5
|
-
def initialize(id:, city:, state:, latitude:, longitude:)
|
6
|
-
@id = id
|
7
|
-
@city = city
|
8
|
-
@state = state
|
9
|
-
@latitude = latitude
|
10
|
-
@longitude = longitude
|
11
|
-
end
|
12
|
-
|
13
|
-
def ==(other)
|
14
|
-
id == other.id &&
|
15
|
-
city == other.city &&
|
16
|
-
state == other.state &&
|
17
|
-
latitude == other.latitude &&
|
18
|
-
longitude == other.longitude
|
19
|
-
rescue NoMethodError
|
20
|
-
false
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
"id: #{id}, city: #{city}, state: #{state}, latitude: #{latitude}, longitude: #{longitude}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|