I let the API keys empty, 'cause I don't want to expose my keys. You need to register to infodb.com and google to get API keys !!
#!/usr/bin/python
import os
import sys
import socket
import httplib
import xml.dom.minidom as minidom
from googlemaps import GoogleMaps
""" Get googlemap API module from: http://pypi.python.org/pypi/googlemaps/1.0.2
To get Googlemap API Key:
https://code.google.com/apis/console/?pli=1#project:255524978890:access
"""
lat=38.4193
lon=-122.6978
myip = "99.9.21x.xx" (hidden for the purpose of this blog)
debug=0
#time
lat2timeURL="www.earthtools.org"
#lat2timeFile="/timezone/" + str(lat) + '/' + str(lon)
lat2heightURL="www.earthtools.org"
#lat2heightFile="/height/" + str(lat) + "/" + str(lon)
infodb_apikey = "get your own key"
gmap_apikey = "get your own key"
ip2lat2URL = "api.ipinfodb.com"
ip2lat2File = "/v3/ip-city/?key=" + infodb_apikey + "&format=xml&ip="
def getText(nodeList):
rc = []
for node in nodeList:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)
def getXmlElementFromObj(obj, name):
objList = obj.getElementsByTagName(name)[0]
if objList:
return getText(objList.childNodes)
else:
return ""
def DisplayUsage():
sys.stderr.write("\nUsage: %s <address in double-quotes>\n\n" % sys.argv[0])
def EarthData(address):
try:
gmaps = GoogleMaps(gmap_apikey)
lat, lon = gmaps.address_to_latlng(address)
except:
sys.stderr.write("\nUnable to query GoogleMaps\n")
sys.exit(1)
lat2timeFile="/timezone/" + str(lat) + '/' + str(lon)
lat2heightFile="/height/" + str(lat) + "/" + str(lon)
conn = httplib.HTTPConnection(lat2timeURL)
conn.request("GET", lat2timeFile)
resp = conn.getresponse()
if resp.status == 200:
data = resp.read()
if debug:
print data
xml = minidom.parseString(data)
timezoneObj = xml.getElementsByTagName("timezone")
for tmObj in timezoneObj:
nodes = tmObj.childNodes
version = getXmlElementFromObj(tmObj, "version")
lat = getXmlElementFromObj(tmObj, "latitude")
lon = getXmlElementFromObj(tmObj, "longitude")
localtime = getXmlElementFromObj(tmObj, "localtime")
isotime = getXmlElementFromObj(tmObj, "isotime")
utctime = getXmlElementFromObj(tmObj, "utctime")
#print "version=%s" % version
if debug:
print "latitude : %s" % lat
print "longitude : %s" % lon
print "localtime : %s" % localtime
conn.close()
conn = httplib.HTTPConnection(lat2heightURL)
conn.request("GET", lat2heightFile)
resp = conn.getresponse()
if resp.status == 200:
data = resp.read()
if debug:
print data
xml = minidom.parseString(data)
hObj = xml.getElementsByTagName("height")
for h in hObj:
meter = getText(h.getElementsByTagName("meters")[0].childNodes)
feet = getText(h.getElementsByTagName("feet")[0].childNodes)
if debug:
print "Sea-level : %s meters = %s feet" % (meter, feet)
conn.close()
return (lat, lon, localtime, meter, feet)
def GetPublicIp(name):
myip = str(socket.gethostbyname(name))
iplatURL="api.hostip.info"
ip2latFile="/?ip=" + myip + "&position=true"
if debug:
print "IP Address: %s" % myip
ip2lat2File += myip
conn = httplib.HTTPConnection(ip2lat2URL)
conn.request("GET", ip2lat2File)
resp = conn.getresponse()
if resp.status == 200:
data = resp.read()
xml = minidom.parseString(data)
#print data
locObj = xml.getElementsByTagName("Response")
for loc in locObj:
nodes = loc.childNodes
status = getXmlElementFromObj(loc,"statusCode")
if status == "OK":
lat = getXmlElementFromObj(loc, "latitude")
lon = getXmlElementFromObj(loc, "longitude")
countryCode = getXmlElementFromObj(loc, "countryCode")
countryName = getXmlElementFromObj(loc, "countryName")
regionName = getXmlElementFromObj(loc, "regionName")
cityName = getXmlElementFromObj(loc, "cityName")
zipCode = getXmlElementFromObj(loc, "zipCode")
timezone = getXmlElementFromObj(loc, "timeZone")
print "Address : %s %s, %s %s" % (cityName, str(zipCode), regionName, countryName )
conn.close()
"============================== MAIN =================================="
if __name__ == "__main__":
if len(sys.argv) < 2:
DisplayUsage()
sys.exit(1)
else:
addr = sys.argv[1]
print "Querying %s" % addr
(lat, lon, ltime, meter, feet) = EarthData(addr)
print "========================="
print "Address : %s" % addr
print "Latitude : %s" % lat
print "Longitude : %s" % lon
print "Local-time: %s" % ltime
print "Sea-level : %s meters (%s feet)" % (meter, feet)
# print "ip2Lat2=%s%s" % (ip2lat2URL, ip2lat2File)
Example (assume the script above is saved as "earthdata.py"):
bash-4.2$ ./earthdata.py "1450 N McDowell Blvd, Petaluma, CA 94954"
Querying 1450 N McDowell Blvd, Petaluma, CA 94954
=========================
Address : 1450 N McDowell Blvd, Petaluma, CA 94954
Latitude : 38.279534
Longitude : -122.6709223
Local-time: 21 Oct 2012 16:47:33
Sea-level : 12 meters (39.4 feet)
bash-4.2$