diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2008-04-01 16:20:51 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2008-04-01 16:20:51 +0200 |
commit | b23ff8826ff593bb5f0d0f62739b3fc924c55f67 (patch) | |
tree | 197159855f07da8101b2869e2105884f0f2c2b82 | |
parent | accf1a07d45b90a44237fb3ab24e0920b4e50391 (diff) |
weather plugin: get all advisories
-rw-r--r-- | data/rbot/plugins/weather.rb | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/data/rbot/plugins/weather.rb b/data/rbot/plugins/weather.rb index 467d39e3..5da949e4 100644 --- a/data/rbot/plugins/weather.rb +++ b/data/rbot/plugins/weather.rb @@ -252,26 +252,29 @@ class WeatherPlugin < Plugin end def wu_check_special(xml) - if spec_match = xml.match(%r{<a href="([^"]+\?[^"]*feature=warning[^"]+)"[^>]*>([^<]+)</a>}) + specials = [] + # We only scan the first half to prevent getting the advisories twice + xml[0,xml.length/2].scan(%r{<a href="([^"]+\?[^"]*feature=warning#([^"]+))"[^>]*>([^<]+)</a>}) do special = { :url => "http://mobile.wunderground.com"+$1, - :special => $2.dup + :type => $2.dup, + :special => $3.dup } + spec_rx = Regexp.new("<a name=\"#{special[:type]}\">(?:.+?)<td align=\"left\">\\s+(.+?)\\s+</td>\\s+</tr>\\s+</table>", Regexp::MULTILINE) spec_xml = @bot.httputil.get(special[:url]) - if spec_xml and spec_td = spec_xml.match(/<tr>\s*<td align="left">\s*(.*?)\s*<\/td>\s*<\/tr>\s*<\/table>/m) - return special.merge(:text => $1.ircify_html) - else - return special + if spec_xml and spec_td = spec_xml.match(spec_rx) + special.merge!(:text => spec_td.captures.first.ircify_html) end - else - return nil + specials << special end + return specials end def wu_out_special(m, xml) return unless @bot.config['weather.advisory'] - special = wu_check_special(xml) - if special + specials = wu_check_special(xml) + debug specials + specials.each do |special| special.merge!(:underline => Underline) if special[:text] m.reply("%{underline}%{special}%{underline}: %{text}" % special) |