def help(plugin, topic)
"googlefight <keyword 1> <keyword 2> [... <keyword n+1>] => battles given keywords based on amount of google search results and announces the winner!"
end
-
+
def fight(m, params)
keywords = parse_keywords(params)
return if keywords.nil?
-
+
keywords.map! do |k|
[k, google_count(k)]
end
-
+
m.reply output(keywords)
end
-
+
def output(result)
result = result.sort_by { |e| e[1] }.reverse
str = result.map do |kw|
:count => kw[1].to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
}
end.join(" vs. ")
-
+
unless result[0][1].zero?
str << _(" -- %{keyword} wins!") % {
:keyword => Bold+result[0][0]+Bold
}
else
str << _(" -- no winner here!")
- end
+ end
end
-
+
def parse_keywords(params)
str = params[:keywords].join(" ")
-
+
# foo "foo bar" bar
# no separators so assume they're all separate keywords
if str.match(/(?:"[\w\s]+"|\w+)(?: (?:"[\w\s]+"|\w+))+/)
str.scan(/"[^"]+"|\S+/).flatten
end
end
-
+
def google_count(query)
url = 'http://www.google.com/search?hl=en&safe=off&btnG=Search&q=' << CGI.escape(query)
html = Net::HTTP.get(URI.parse((url)))
- res = html.scan(%r{Results <b>1</b> - <b>\d+</b> of(?: about)? <b>([\d,]+)</b>})
- res.to_s.tr(",", "").to_i
+ res = html.scan(%r{About ([\d,]+) results})
+ res[0][0].to_s.tr(",", "").to_i
end
end
plugin = GoogleFightPlugin.new
plugin.map "googlefight *keywords", :action => "fight",
- :requirements => { :keywords => /^[\w\s"]+? (?:(?:(?:\||vs\.) )?[\w\s"]+?)+/ }
\ No newline at end of file
+ :requirements => { :keywords => /^[\w\s"]+? (?:(?:(?:\||vs\.) )?[\w\s"]+?)+/ }