I am developing a project, that needs to store user location in my data base. I got the public IP address of that user. But I am unable to get the user location. I have tried several ways (from StackOverflow) but I didn't find any hint. Like the below
url = urllib.urlopen("http://api.hostip.info/get_html.php?ip=%s&position=true" % ip) data = re.compile('^[^\(]+\(|\)$').sub('', url.read()) print data
but I am getting the result as
Unknown Country?) (XX) City: (Unknown City?)
another way:
import urllib response = urllib.urlopen("http://api.hostip.info/get_html.php?ip={}&position=true".format(ip)).read() print(response)
but the result is
Country: (Unknown Country?) (XX) City: (Unknown City?) Latitude: Longitude: IP: 115.xxx.xxx.xx
Any help would be appreciated!
No Internet Protocol (IP) address database can provide the exact physical address of an IP address location. At best, you'll get the exact city in which the user of the IP is located. Only the Internet Service Provider (ISP) can provide an exact physical address of an IP.
One of the simplest methods for getting the IP address as well as the location in detail is to use http://ipinfo.io
import re import json from urllib2 import urlopen url = 'http://ipinfo.io/json' response = urlopen(url) data = json.load(response) IP=data['ip'] org=data['org'] city = data['city'] country=data['country'] region=data['region'] print 'Your IP detail\n ' print 'IP : {4} \nRegion : {1} \nCountry : {2} \nCity : {3} \nOrg : {0}'.format(org,region,country,city,IP)
Try with pygeoip
~$ ping stackoverflow.com PING stackoverflow.com (198.252.206.16) 56(84) bytes of data. >>> import pygeoip >>> GEOIP = pygeoip.GeoIP("/absolute_path/GeoIP.dat", pygeoip.MEMORY_CACHE) >>> GEOIP.country_name_by_addr(ip) 'United States'
GeoIP.data is available here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With