Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.tcp.getLocationInfo
on getLocationInfo (adrtable, ip=nil, apiUrl=nil) { <<Changes <<3/28/10; 10:17:52 AM by DW <<Make apiUrl a parameter, so you can call a different service, should the default one disappear someday. <<3/28/10; 9:36:03 AM by DW <<Gets location info for the indicated IP address, if not specified, gets info for the machine it's running on. <<I really needed a way to get my external IP address, because tcp.dns.getmydottedid returns an internal IP address on EC2. The web service I'm using for this also returns geo-location so I return that info as well. <<http://www.hostip.info/use.html if apiurl == nil { apiurl = "http://api.hostip.info/"}; if ip != nil { apiurl = apiurl + "?ip=" + ip}; new (tabletype, adrtable); local (xmltext = tcp.httpreadurl (apiurl)); xml.compile (xmltext, @xstruct); <<scratchpad.geox = xstruct local (adrroot = xml.getaddress (@xstruct, "HostipLookupResultSet")); local (adrsubroot = xml.getaddress (adrroot, "featureMember")); local (adrhostip = xml.getaddress (adrsubroot, "Hostip")); adrtable^.ip = xml.getvalue (adrhostip, "ip"); adrtable^.locationName = xml.getvalue (adrhostip, "name"); adrtable^.countryName = xml.getvalue (adrhostip, "countryName"); adrtable^.countryAbbrev = xml.getvalue (adrhostip, "countryAbbrev"); local (adriplocation = xml.getaddress (adrhostip, "ipLocation")); local (adrpointproperty = xml.getaddress (adriplocation, "pointProperty")); local (adrpoint = xml.getaddress (adrpointproperty, "Point")); adrtable^.coordinates = xml.getvalue (adrpoint, "coordinates"); return (true)} <<bundle //test code <<getLocationInfo (@scratchpad.myLocation) <<edit (@scratchpad.myLocation)
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.