weatheruby 0.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/CHANGELOG.md +4 -0
- data/lib/weather/actions.rb +81 -0
- data/lib/weatheruby.rb +45 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c4bc5408dc72cef114956f54043208d345fe2c91
|
4
|
+
data.tar.gz: 48a16aefd779d173f68164dd9b342e746988e9a4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ee9e13401e525b4f375c1c720c502318aa46382b328f0b64729cef3a120542539212b43f47ffcee4a721d84defdfb7673642b24fcae206e1fa42dbbc8ad4ce32
|
7
|
+
data.tar.gz: bbe710d088da26c738f6cb2a38ac902899fdbf2c06a3ace9570fa4c4a1b8a6560671d13e5196184956d5b2877259562c463c90039e6f83befd205d5ac6ea2ff6
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
module Weather
|
2
|
+
module Actions
|
3
|
+
# Gets alert information for a location.
|
4
|
+
# @param location [String] The place to get the alert data for.
|
5
|
+
# @return [Hash/Nil] Nil if there are no alerts, or a hash of arrays
|
6
|
+
# containing relevant data if not. Each array in the hash contains
|
7
|
+
# information for a different alert.
|
8
|
+
def alerts(location)
|
9
|
+
response = get('alerts', location)
|
10
|
+
if response['alerts'].nil?
|
11
|
+
return nil
|
12
|
+
else
|
13
|
+
ret = []
|
14
|
+
count = 0
|
15
|
+
response['alerts'].each do |a|
|
16
|
+
ret[count] = {
|
17
|
+
:type => a['type'],
|
18
|
+
:description => a['description'],
|
19
|
+
:date => a['date'],
|
20
|
+
:expires => a['expires'],
|
21
|
+
:message => a['message'],
|
22
|
+
}
|
23
|
+
count += 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
ret
|
28
|
+
end
|
29
|
+
|
30
|
+
# Gets the current moon phase of the location.
|
31
|
+
# @param location [String] The place to get the phase for.
|
32
|
+
# @return [Hash] A hash of two integers for the moon phase information.
|
33
|
+
# The age key in the hash contains the moon's age in days, and the
|
34
|
+
# illumination key contains the percentage of how illuminated it is.
|
35
|
+
def moon_phase(location)
|
36
|
+
response = get('astronomy', location)
|
37
|
+
ret = {}
|
38
|
+
ret[:age] = response['moon_phase']['ageOfMoon'].to_i
|
39
|
+
ret[:illumination] = response['moon_phase']['percentIlluminated'].to_i
|
40
|
+
|
41
|
+
ret
|
42
|
+
end
|
43
|
+
|
44
|
+
# Gets weahter conditions for the location.
|
45
|
+
# @param location [String] The place to get the weather report for.
|
46
|
+
# @return [Hash] A hash containing strings of relevant weather information.
|
47
|
+
def conditions(location)
|
48
|
+
response = get('conditions', location)
|
49
|
+
current_observation = response['current_observation']
|
50
|
+
display_location = current_observation['display_location']
|
51
|
+
|
52
|
+
ret = {
|
53
|
+
:full_name => display_location['full'],
|
54
|
+
:city_name => display_location['city'],
|
55
|
+
:state_abbreviation => display_location['state'],
|
56
|
+
:state_name => display_location['state_name'],
|
57
|
+
:country => display_location['country'],
|
58
|
+
:zip_code => display_location['zip'].to_i,
|
59
|
+
:updated => current_observation['observation_time'],
|
60
|
+
:weather => current_observation['weather'],
|
61
|
+
:formatted_temperature => current_observation['temperature_string'],
|
62
|
+
:temperature_f => current_observation['temp_f'],
|
63
|
+
:temperature_c => current_observation['temp_c'],
|
64
|
+
:humidity => current_observation['relative_humidity'],
|
65
|
+
:formatted_wind => current_observation['wind_string'],
|
66
|
+
:wind_direction => current_observation['wind_dir'],
|
67
|
+
:wind_degrees => current_observation['wind_degrees'],
|
68
|
+
:wind_speed => current_observation['wind_mph'],
|
69
|
+
:wind_gust_speed => current_observation['wind_gust_mph'].to_i,
|
70
|
+
:formatted_feelslike => current_observation['feelslike_string'],
|
71
|
+
:feelslike_f => current_observation['feelslike_f'].to_i,
|
72
|
+
:feelslike_c => current_observation['feelslike_c'].to_i
|
73
|
+
}
|
74
|
+
|
75
|
+
ret[:humidity] = ret[:humidity].sub('%', '').to_i
|
76
|
+
|
77
|
+
ret
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
data/lib/weatheruby.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'httpclient'
|
2
|
+
require 'json'
|
3
|
+
require_relative 'weather/actions'
|
4
|
+
|
5
|
+
class Weatheruby
|
6
|
+
include Weather::Actions
|
7
|
+
|
8
|
+
# Creates a new instance of Weatheruby.
|
9
|
+
# @param api_key [String] Your personal API key obtained on sign up for
|
10
|
+
# Weather Underground.
|
11
|
+
# @param language [String] The language code you would like to use.
|
12
|
+
# @param use_pws [Boolean] Whether to use the Personal Weather Station
|
13
|
+
# feature.
|
14
|
+
# @param use_bestfct [Boolean] Whether to use BestForecast.
|
15
|
+
def initialize(api_key, language = 'EN', use_pws = true, use_bestfct = true)
|
16
|
+
@api_key = api_key
|
17
|
+
@language_key = language.upcase
|
18
|
+
@use_pws = use_pws ? 1 : 0
|
19
|
+
@use_bestfct = use_bestfct ? 1 : 0
|
20
|
+
|
21
|
+
@client = HTTPClient.new
|
22
|
+
end
|
23
|
+
|
24
|
+
# Performs a generic HTTP GET request. This method should generally not be
|
25
|
+
# used by a standard user, unless there is not a method for a particular
|
26
|
+
# action/feature.
|
27
|
+
# @param feature [String] The "feature" parameter defined by Wunderground.
|
28
|
+
# @param location [String] The location of the query.
|
29
|
+
# @param autoparse [Boolean] Whether to automatically parse the response.
|
30
|
+
# @return [JSON/HTTPMessage] Parsed JSON if true, or raw response if not.
|
31
|
+
def get(feature, location, autoparse = true)
|
32
|
+
url = "http://api.wunderground.com/api/#{@api_key}/#{feature}/lang:" \
|
33
|
+
"#{@language_key}/pws:#{@use_pws}/bestfct:#{@use_bestfct}/q/" \
|
34
|
+
"#{location}.json"
|
35
|
+
url = URI.encode(url)
|
36
|
+
uri = URI.parse(url)
|
37
|
+
res = @client.get(uri)
|
38
|
+
|
39
|
+
if autoparse
|
40
|
+
return JSON.parse(res.body)
|
41
|
+
else
|
42
|
+
return res
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: weatheruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eli Foster
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httpclient
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Accessing the Weather Underground API through HTTPClient.
|
28
|
+
email: elifosterwy@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- CHANGELOG.md
|
34
|
+
- lib/weather/actions.rb
|
35
|
+
- lib/weatheruby.rb
|
36
|
+
homepage: https://github.com/elifoster/weatheruby
|
37
|
+
licenses:
|
38
|
+
- CC-BY-NC-ND-4.0
|
39
|
+
metadata:
|
40
|
+
issue_tracker: https://github.com/elifoster/weatheruby/issues
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.4.5.1
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: A Ruby gem for accessing the Weather Underground API.
|
61
|
+
test_files: []
|