Подтвердить что ты не робот

Какие библиотеки python могут указать мне приблизительное местоположение и часовой пояс с учетом IP-адреса?

Ищете реализацию лучшего геолокации с Python.

4b9b3361

Ответ 1

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

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

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

import urllib

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

print(response)

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

Ответ 2

Это не Python lib. Но 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.

Ответ 4

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

#!/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/{format}/{ip_or_hostname}, чтобы получить вывод JSON, который может обрабатывать Python.

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

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

Ответ 5

Найдено https://freegeoip.net/; Пример Python ниже.

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()

Ответ 6

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

Ответ 7

Я думаю, 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'

Ответ 8

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

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

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

возвращает:

ОК; 190.188.221.244; AR; ARGENTINA; BUENOS AIRES; LA PLATA; -; - 34.931; -57.949; -03: 00

Ответ 9

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

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

Ответ 10

Установить модуль python pygeoip

C:>pip install pygeoip

Загрузите двоичный файл GeoLite City здесь: https://dev.maxmind.com/geoip/legacy/geolite/

Тогда:

>>> import pygeoip
>>> g = pygeoip.GeoIP('GeoLiteCity.dat')
>>> ip = '134.222.199.110' #just an example
>>> g.record_by_addr(ip)['latitude']
52.38239999999999
>>> g.record_by_addr(ip)['longitude']
4.899499999999989
>>> g.record_by_addr(ip)['time_zone']
'Europe/Amsterdam'

В отличие от решения freegeoip, которое я вижу в других комментариях, этот параметр не имеет ограничений на количество IP-адресов в час, может использоваться локально без подключения к Интернету, а геокоординаты, как правило, более точны.

Ответ 11

Вы можете использовать запросы для совершения звонка на мою службу https://ipdata.co

import requests

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

Ответ 12

У Maxmind есть официальный пакет API, который интегрируется с их веб-сервисом geoip или базами данных геолита. Вам нужно будет либо загрузить их бесплатную базу геолита, либо создать бесплатную пробную учетную запись.

Если вы зарегистрируете учетную запись, вы получите поощрительный кредит в размере 5 долларов США (платные запросы стоят около 0,0001 доллара США каждый). Войдите в свою учетную запись, нажмите "Мой лицензионный ключ" и создайте лицензионный ключ.

Затем установите пакет:

$ pip install geoip2

И проверьте API:

Тестовая функция адаптирована из документов

import geoip2.webservice

account_id = 1 # enter your real account id here
api_key = "enter your real api/license key here"

TEST_IP = '128.101.101.101'


def lookup_ip(ip=TEST_IP):
    # This creates a Client object that can be reused across requests.
    client = geoip2.webservice.Client(account_id, api_key)

    # Replace "insights" with the method corresponding to the web service
    # that you are using, e.g., "country", "city".
    response = client.insights(ip)

    print("country iso code: {0}".format(response.country.iso_code))

    print("country name: {0}".format(response.country.name))

    print("subdivisions most specific name: {0}".format(response.subdivisions.most_specific.name))
    print("subdivisions most specific iso code: {0}".format(response.subdivisions.most_specific.iso_code))

    print("city name: {0}".format(response.city.name))

    print("postal code:{0}".format(response.postal.code))

    print("coordinates: ({0}, {1})".format(response.location.latitude, response.location.longitude))

    return response


if __name__ == "__main__":
    resp = lookup_ip()
    input("")