2013-11-04 184 views
1

位置我使用這個Python代碼來獲取用戶的IP地址:使用IP地址來查找在Python

import socket 
print socket.gethostbyname(socket.gethostname()) 

,並以此來找到自己的位置:

import socket 
print socket.gethostbyname(socket.gethostname()) 
import urllib 
response = urllib.urlopen('http://api.hostip.info/get_html.php? ip=xxx&position=true').read() 
print(response) 

可能有人請幫助我找到一種方法來獲取IP,然後將其放入代碼的第二部分。 該程序應該找到用戶IP而不用他們做任何事情,然後顯示位置。

謝謝。

回答

6

有幾種方法可以做到這樣的字符串操作在Python:

ip = socket.gethostbyname(socket.gethostname()) 

url = "http://api.hostip.info/get_html.php?ip=" + ip + "&position=true" 
url = "http://api.hostip.info/get_html.php?ip=%s&position=true" % ip 
url = "http://api.hostip.info/get_html.php?ip=xxx&position=true".replace("xxx", ip) 
url = "http://api.hostip.info/get_html.php?ip={}&position=true".format(ip) 

選擇一個......最後三個變化主要是要通過IP地址替換什麼令牌:%sxxx(就像你在你的問題中)或{}。對於它的價值,最後一種選擇現在被認爲是「最好的方式」。

其餘的你似乎有一個很好的處理。

+0

+1適用於所有的方式! –

+0

謝謝!完美答案 –

+0

@ kindall,我正在得到未知的國家和未知的城市,該怎麼辦......? – Mulagala

0

我建議看看Geoip庫。它有一個名爲geolite2的非常簡單的模組。 例如:

from geoip import geolite2 

match = geolite2.lookup('10.10.10.10') 
print('Country: '+match.country) 
print('timezone: '+match.timezone) 
... 

有適合你,如果你想太多查找主機IP,而無需用戶輸入使用的功能! 這裏有很好的記錄http://pythonhosted.org/python-geoip/ 希望這可以幫助你!