]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
geoip: blogama is dead, long live ipinfodb
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Fri, 10 Dec 2010 20:46:40 +0000 (21:46 +0100)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Fri, 10 Dec 2010 20:46:40 +0000 (21:46 +0100)
Sadly, the new ipinfodb API requires an API key, and I don't know yet if
I'm allowed to redistributed it (I'm betting on no, but in case I can
it will added with an appropriate patch).

data/rbot/plugins/geoip.rb

index 99ed71eb15b4617d6a865cb3fd93d50b54539d17..c67f1095bf19522fdf9d9f8a1b60463f5068f7a5 100755 (executable)
@@ -44,11 +44,16 @@ module ::GeoIP
     return YAML::load(yaml)
   end
 
-  def self.blogama(ip)
-    url = "http://ipinfodb.com/ip_query.php?ip="
-    debug "Requesting #{url+ip}"
+  IPINFODB_URL = "http://api.ipinfodb.com/v2/ip_query.php?key=%{key}&ip=%{ip}"
 
-    xml = Irc::Utils.bot.httputil.get(url+ip)
+  def self.ipinfodb(ip)
+    url = IPINFODB_URL % {
+      :ip => ip,
+      :key => Irc::Utils.bot.config['geoip.ipinfodb_key']
+    }
+    debug "Requesting #{url}"
+
+    xml = Irc::Utils.bot.httputil.get(url)
 
     if xml
       obj = REXML::Document.new(xml)
@@ -75,7 +80,7 @@ module ::GeoIP
     end
 
     jump_table = {
-        "blogama" => Proc.new { |ip| blogama(ip) },
+        "ipinfodb" => Proc.new { |ip| ipinfodb(ip) },
         "kapsi" => Proc.new { |ip| kapsi(ip) },
         "geoiptool" => Proc.new { |ip| geoiptool(ip) },
     }
@@ -107,8 +112,11 @@ end
 
 class GeoIpPlugin < Plugin
   Config.register Config::ArrayValue.new('geoip.sources',
-      :default => [ "blogama", "kapsi", "geoiptool" ],
-      :desc => "Which API to use for lookups. Supported values: blogama, kapsi, geoiptool")
+      :default => [ "ipinfodb", "kapsi", "geoiptool" ],
+      :desc => "Which API to use for lookups. Supported values: ipinfodb, kapsi, geoiptool")
+  Config.register Config::StringValue.new('geoip.ipinfodb_key',
+      :default => "",
+      :desc => "API key for the IPinfoDB geolocation service")
 
   def help(plugin, topic="")
     "geoip [<user|hostname|ip>] => returns the geographic location of whichever has been given -- note: user can be anyone on the network"