poundie-weather 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/poundie-weather.rb +45 -0
  2. metadata +94 -0
@@ -0,0 +1,45 @@
1
+ require "nokogiri"
2
+
3
+ class PoundieWeather < Poundie::Plugin
4
+ register :poundie_weather
5
+
6
+ match do |message|
7
+ puts "checking #{message.body.inspect}"
8
+ message.body =~ /^poundie weather /
9
+ end
10
+
11
+ action do |message|
12
+ begin
13
+ place = message.body.gsub(/^poundie weather /, "").strip
14
+ woeid = get_woeid(place)
15
+ doc = Nokogiri(get("http://weather.yahooapis.com/forecastrss?w=#{woeid}"))
16
+ current = get_current(doc)
17
+ forecast = get_forecast(doc)
18
+ paste "#{current["text"]}, #{current["temp"]} F\n#{forecast}"
19
+ rescue => e
20
+ puts e.message
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def get_current(doc)
27
+ Hash[*doc.at('yweather|condition').to_a.flatten]
28
+ end
29
+
30
+ def get_forecast(doc)
31
+ doc.search('yweather|forecast').map { |node|
32
+ day = Hash[*node.to_a.flatten]
33
+ "#{day["day"]}, #{day["date"]}: #{day["text"]}, High: #{day["high"]} Low: #{day["low"]}"
34
+ }.join("\n")
35
+ end
36
+
37
+ def get_woeid(name)
38
+ speak "Finding place #{name}..."
39
+ name = CGI.escape(name)
40
+ res = get("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20geo.places%20where%20text%3D%22#{name}%20CA%22&format=xml")
41
+ res.scan(/<woeid>(\d+)<\/woeid>/).to_s
42
+ end
43
+ end
44
+
45
+ Poundie.use :poundie_weather
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: poundie-weather
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Pat Nakajima
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-13 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: poundie
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: nokogiri
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ description: A Poundie plugin to post weather information to campfire
50
+ email:
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files: []
56
+
57
+ files:
58
+ - lib/poundie-weather.rb
59
+ has_rdoc: true
60
+ homepage:
61
+ licenses: []
62
+
63
+ post_install_message:
64
+ rdoc_options: []
65
+
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ requirements: []
87
+
88
+ rubyforge_project:
89
+ rubygems_version: 1.6.2
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: A Poundie plugin to post weather information to campfire
93
+ test_files: []
94
+