Какие библиотеки Python могут сообщить мне приблизительное местоположение и часовой пояс с учетом IP-адреса? - PullRequest
43 голосов
/ 30 марта 2010

Хотите улучшить геолокацию с помощью Python.

Ответы [ 11 ]

35 голосов
/ 30 марта 2010

Hostip.info - проект с открытым исходным кодом, целью которого является создание / ведение базы данных сопоставление IP-адресов с городами , Их страница about объясняет источники данных, на которые полагается заполнить эту базу данных.

Используя HostIP, есть два способа получить данные о местоположении с IP-адреса:

Они также имеют хорошо продуманный и простой в использовании RESTFUL API : просто введите свой IP-адрес после i *** p = *** в GET строка запроса):

import urllib

response = urllib.urlopen('http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true').read()

print(response)

Во-вторых, на веб-сайте проекта также доступна для загрузки полная база данных .

13 голосов
/ 30 марта 2010

Это не библиотека Python. Но http://ipinfodb.com/ предоставляет веб-сервис, который можно легко обернуть, например, кодом Python с помощью urllib.

http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&ip=74.125.45.100
http://api.ipinfodb.com/v3/ip-country/?key=<your_api_key>&ip=74.125.45.100

Вам необходимо запросить бесплатный ключ API. Подробнее см. API doc .

8 голосов
/ 30 марта 2010

Эти модули могут оказаться полезными: GeoIP MaxMind и его чистая версия , а также pytz .

7 голосов
/ 02 октября 2014

Я опубликовал это в другом вопросе, который был похоронен, но связан здесь:

#!/usr/bin/env python 
from urllib2 import urlopen
from contextlib import closing
import json

# Automatically geolocate the connecting IP
url = 'http://freegeoip.net/json/'
try:
    with closing(urlopen(url)) as response:
        location = json.loads(response.read())
        print(location)
        location_city = location['city']
        location_state = location['region_name']
        location_country = location['country_name']
        location_zip = location['zipcode']
except:
    print("Location could not be determined automatically")

Отправьте HTTP-запросы GET по адресу: freegeoip.net/ndomformat‹/ndomip_or_hostname}, чтобы получить вывод JSON, который Python может анализировать.

Я получаю следующие ключи JSON, которых должно быть достаточно для того, что вам нужно:

  • ф
  • country_code
  • COUNTRY_NAME
  • region_code
  • REGION_NAME
  • город
  • почтовый индекс
  • широта
  • долгота
  • metro_code
  • код_город
5 голосов
/ 09 декабря 2014

Найдено https://freegeoip.net/; образец питона ниже.

import requests

FREEGEOPIP_URL = 'http://freegeoip.net/json/'

SAMPLE_RESPONSE = """{
    "ip":"108.46.131.77",
    "country_code":"US",
    "country_name":"United States",
    "region_code":"NY",
    "region_name":"New York",
    "city":"Brooklyn",
    "zip_code":"11249",
    "time_zone":"America/New_York",
    "latitude":40.645,
    "longitude":-73.945,
    "metro_code":501
}"""


def get_geolocation_for_ip(ip):
    url = '{}/{}'.format(FREEGEOPIP_URL, ip)

    response = requests.get(url)
    response.raise_for_status()

    return response.json()
4 голосов
/ 27 января 2015

IP API также очень хороший способ сделать это.

import urllib

ip= '12.24.36.48'

url = 'http://ip-api.com/json/' + ip

req = urllib.request.Request(url)

out = urllib.request.urlopen(req).read()

enter image description here

2 голосов
/ 15 июня 2016

Я думаю freegeip - хороший вариант. Ниже приведен код Python 3.4.2 для определения местоположения и часового пояса.

>>> import requests
>>> ip = '141.70.111.66'   
>>> url = 'http://freegeoip.net/json/'+ip
>>> r = requests.get(url)
>>> js = r.json()
>>> js['country_code']
'DE'
>>> js['country_name']
'Germany'
>>> js['time_zone']
'Europe/Berlin'
1 голос
/ 01 марта 2012

" Geopy позволяет разработчикам легко находить координаты адресов, городов, стран и ориентиров по всему миру, используя сторонние геокодеры и другие источники данных, такие как вики.

В настоящее время Geopy включает поддержку шести геокодеров: Google Maps, Yahoo! Карты, Windows Local Live (Virtual Earth), geocoder.us, GeoNames, страницы MediaWiki (с расширением GIS) и страницы Semantic MediaWiki."

1 голос
/ 28 апреля 2011

Я использую ipinfodb, это бесплатно (требуется регистрация) и имеет ограничение 2 запроса в секунду, и, похоже, является точным.

попробовать:

http://api.ipinfodb.com/v3/ip-city/?key={{API_KEY}}&ip=190.188.221.244&timezone=true

возвращается:

ОК; 190.188.221.244; АР; АРГЕНТИНА; БУЭНОС-АЙРЕС; ЛА ПЛАТА; -; - 34.931; -57.949; -03: 00

0 голосов
/ 05 сентября 2017

Вы можете использовать запросы, чтобы позвонить в мой сервис https://ipdata.co

import requests

ip = '1.1.1.1'
response = requests.get('https://api.ipdata.co/{}'.format(ip)).json()
response['time_zone']
...