Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find location with IP address in Python?

Tags:

python

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!

like image 940
Mulagala Avatar asked Jul 10 '14 13:07

Mulagala


People also ask

How can I find location using IP address?

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.


2 Answers

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) 
like image 130
Shekhar Singh Choudhary Avatar answered Sep 21 '22 09:09

Shekhar Singh Choudhary


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

like image 20
xecgr Avatar answered Sep 17 '22 09:09

xecgr