'''Example of getting geolocation information of IP's via free ipinfodb service''' The code below is run from the command line with the ip as argument. ====== #!/bin/tclsh package require http package require JSONRPC set ip $argv puts "get geo data from $argv" #get the desired data set ht [::http::geturl http://ipinfodb.com/ip_query.php?output=json&timezone=false&ip=$ip] set geo_ip [json::json2dict [::http::data $ht]] ::http::cleanup $ht # some sample processing stuff if {[dict get $geo_ip Status] == "OK"} { foreach key [dict keys $geo_ip] { set value [dict get $geo_ip $key] if {$value != ""} { puts "$key => $value" } } } ====== Sample session: === rob@rob-desktop:~/Public$ ./ip-geo 70.85.16.128 get geo data from 70.85.16.128 Ip => 70.85.16.128 Status => OK CountryCode => US CountryName => United States RegionCode => 48 RegionName => Texas City => Houston ZipPostalCode => 77002 Latitude => 29.7523 Longitude => -95.367 === you can also do this easily using the tcllib rest module === package require rest set geoip(lookup) { url http://ipinfodb.com/ip_query.php req_args { ip: } static_args { output json timzone false } } rest::create_interface geoip array set out [geoip::lookup -ip 70.85.16.128] parray out === [DKF]: You can fetch XML (parse with [tdom]) by omitting the `output` parameter. <>Category Internet | Category Data Serialization Format