@@ -120,8 +120,8 @@ GEM |
||
120 | 120 |
method_source (0.8.1) |
121 | 121 |
mime-types (1.23) |
122 | 122 |
mini_portile (0.5.1) |
123 |
- multi_json (1.7.7) |
|
124 |
- multi_xml (0.5.4) |
|
123 |
+ multi_json (1.7.8) |
|
124 |
+ multi_xml (0.5.5) |
|
125 | 125 |
multipart-post (1.2.0) |
126 | 126 |
mysql2 (0.3.13) |
127 | 127 |
nokogiri (1.6.0) |
@@ -1,11 +1,14 @@ |
||
1 | 1 |
require 'date' |
2 |
+require 'cgi' |
|
2 | 3 |
|
3 | 4 |
module Agents |
4 | 5 |
class WeatherAgent < Agent |
5 | 6 |
cannot_receive_events! |
6 | 7 |
|
7 | 8 |
description <<-MD |
8 |
- The WeatherAgent creates an event for the following day's weather at `zipcode`. |
|
9 |
+ The WeatherAgent creates an event for the following day's weather at a given `location`. |
|
10 |
+ |
|
11 |
+ The `location` can be a US zipcode, or any location that Wunderground supports. To find one, search [wunderground.com](http://wunderground.com) and copy the location part of the URL. For example, a result for San Francisco gives `http://www.wunderground.com/US/CA/San_Francisco.html` and London, England gives `http://www.wunderground.com/q/zmw:00000.1.03772`. The locations in each are `US/CA/San_Francisco` and `zmw:00000.1.03772`, respectively. |
|
9 | 12 |
|
10 | 13 |
You must setup an [API key for Wunderground](http://www.wunderground.com/weather/api/) in order to use this Agent. |
11 | 14 |
MD |
@@ -14,7 +17,7 @@ module Agents |
||
14 | 17 |
Events look like this: |
15 | 18 |
|
16 | 19 |
{ |
17 |
- "zipcode": 12345, |
|
20 |
+ "location": 12345, |
|
18 | 21 |
"date": { |
19 | 22 |
"epoch": "1357959600", |
20 | 23 |
"pretty": "10:00 PM EST on January 11, 2013" |
@@ -52,21 +55,20 @@ module Agents |
||
52 | 55 |
def default_options |
53 | 56 |
{ |
54 | 57 |
:api_key => "your-key", |
55 |
- :zipcode => "94103" |
|
58 |
+ :location => "94103" |
|
56 | 59 |
} |
57 |
- |
|
58 | 60 |
end |
59 | 61 |
|
60 | 62 |
def validate_options |
61 |
- errors.add(:base, "zipcode is required") unless options[:zipcode].present? |
|
63 |
+ errors.add(:base, "location is required") unless options[:location].present? || options[:zipcode].present? |
|
62 | 64 |
errors.add(:base, "api_key is required") unless options[:api_key].present? |
63 | 65 |
end |
64 | 66 |
|
65 | 67 |
def check |
66 | 68 |
if key_setup? |
67 |
- wunderground.forecast_for(options[:zipcode])["forecast"]["simpleforecast"]["forecastday"].each do |day| |
|
69 |
+ wunderground.forecast_for(options[:location] || options[:zipcode])["forecast"]["simpleforecast"]["forecastday"].each do |day| |
|
68 | 70 |
if is_tomorrow?(day) |
69 |
- create_event :payload => day.merge(:zipcode => options[:zipcode]) |
|
71 |
+ create_event :payload => day.merge(:location => options[:location] || options[:zipcode]) |
|
70 | 72 |
end |
71 | 73 |
end |
72 | 74 |
end |
@@ -13,7 +13,7 @@ unless user.agents.where(:name => "SF Weather Agent").exists? |
||
13 | 13 |
Agent.build_for_type("Agents::WeatherAgent", user, |
14 | 14 |
:name => "SF Weather Agent", |
15 | 15 |
:schedule => "10pm", |
16 |
- :options => { :zipcode => "94103", :api_key => "your-key" }).save! |
|
16 |
+ :options => { :location => "94103", :api_key => "your-key" }).save! |
|
17 | 17 |
end |
18 | 18 |
|
19 | 19 |
unless user.agents.where(:name => "XKCD Source").exists? |
@@ -58,7 +58,7 @@ unless user.agents.where(:name => "Rain Notifier").exists? |
||
58 | 58 |
:value => "rain|storm", |
59 | 59 |
:path => "conditions" |
60 | 60 |
}], |
61 |
- :message => "Just so you know, it looks like '<conditions>' tomorrow in <zipcode>" |
|
61 |
+ :message => "Just so you know, it looks like '<conditions>' tomorrow in <location>" |
|
62 | 62 |
}).save! |
63 | 63 |
end |
64 | 64 |
|
@@ -34,7 +34,7 @@ bob_weather_agent: |
||
34 | 34 |
schedule: "midnight" |
35 | 35 |
name: "SF Weather" |
36 | 36 |
options: <%= { |
37 |
- :zipcode => 94102, |
|
37 |
+ :location => 94102, |
|
38 | 38 |
:lat => 37.779329, |
39 | 39 |
:lng => -122.41915, |
40 | 40 |
:api_key => 'test' |
@@ -46,7 +46,7 @@ jane_weather_agent: |
||
46 | 46 |
schedule: "midnight" |
47 | 47 |
name: "SF Weather" |
48 | 48 |
options: <%= { |
49 |
- :zipcode => 94103, |
|
49 |
+ :location => 94103, |
|
50 | 50 |
:lat => 37.779329, |
51 | 51 |
:lng => -122.41915, |
52 | 52 |
:api_key => 'test' |
@@ -63,7 +63,7 @@ jane_rain_notifier_agent: |
||
63 | 63 |
:value => "rain", |
64 | 64 |
:path => "conditions" |
65 | 65 |
}], |
66 |
- :message => "Just so you know, it looks like '<conditions>' tomorrow in <zipcode>" |
|
66 |
+ :message => "Just so you know, it looks like '<conditions>' tomorrow in <location>" |
|
67 | 67 |
}.to_yaml.inspect %> |
68 | 68 |
|
69 | 69 |
bob_rain_notifier_agent: |
@@ -77,7 +77,7 @@ bob_rain_notifier_agent: |
||
77 | 77 |
:value => "rain", |
78 | 78 |
:path => "conditions" |
79 | 79 |
}], |
80 |
- :message => "Just so you know, it looks like '<conditions>' tomorrow in <zipcode>" |
|
80 |
+ :message => "Just so you know, it looks like '<conditions>' tomorrow in <location>" |
|
81 | 81 |
}.to_yaml.inspect %> |
82 | 82 |
|
83 | 83 |
bob_twitter_user_agent: |