accuweather 0.1.1 → 0.1.3
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 +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
|