web-dev-qa-db-ja.com

IPアドレスが与えられた場合、ライブラリはおおよその場所とタイムゾーンを教えてくれますか?python?

Pythonでより良い地理位置情報を実装しようとしています。

43
ensnare

Hostip.infoは、データベースの構築/維持を目的としたオープンソースプロジェクトです都市へのIPアドレスのマッピング。彼らのaboutページは、このデータベースを作成するために依存するデータソースを説明しています。

HostIPを使用して、IPアドレスから位置データを取得するには2つの方法があります。

また、適切に設計された使いやすいRESTFUL[〜#〜] api [〜#〜]:GETリクエスト文字列のi *** p = ***の後にIPアドレスを渡すだけです:

import urllib

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

print(response)

第二に、プロジェクトのウェブサイトは完全な データベース をダウンロード可能にします。

35
doug

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 を参照してください。

13
luc

これらのモジュールが役立つ場合があります: MaxMindのGeoIP およびその pureバージョンpytz も同様です。

8
ony

私はこれを埋められた別の質問に投稿しましたが、ここにリンクされています:

#!/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}に送信して、Python解析可能なJSON出力を受信します。

次のJSONキーを取得します。これは、必要なものに十分なはずです。

  • ip
  • country_code
  • 国名
  • region_code
  • region_name
  • 郵便番号
  • 緯度
  • 経度
  • metro_code
  • 市外局番
7
Jason Parham

見つかった 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()
5
berto

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

4

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'
2
Waqar Detho

"Geopy は、サードパーティのジオコーダーやその他のデータソースを使用して、世界中の住所、都市、国、ランドマークの座標を開発者が簡単に特定できるようにします。ウィキとして。

geopyは現在、6つのジオコーダーのサポートを含んでいます:Googleマップ、Yahoo!マップ、Windowsローカルライブ(Virtual Earth)、gecoder.us、GeoNames、MediaWikiページ(GIS拡張機能付き)、およびセマンティックMediaWikiページ。 "

1
Kylotan

私はipinfodbを使用しています。無料で(登録が必要です)、1秒あたり2クエリの制限があり、正確であるようです。

試してください:

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

戻り値:

OK ;; 190.188.221.244; AR;アルゼンチン;ブエノスアイレス;ラプラタ;-;-34.931; -57.949; -03:00

1

リクエストを使用して、私のサービスを呼び出すことができます https://ipdata.co

import requests

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

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ソリューションとは異なり、このオプションには1時間あたりのIP数に制限がなく、インターネットに接続せずにローカルで使用でき、一般に地理座標はより正確です。

0
Ideophagous