2016年12月25日

CentOS7且つPython3でGeoIP2を使用する

環境はCentOS7.3で、Python3.4.3で確認した。

まずMAX MIND社[GeoLite2]からGeoLite2データベースを取得する。

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz

gzipで圧縮されているので解凍する。

gunzip -d GeoLite2-City.mmdb.gz

続いて、PythonのGeoIPライブラリをインストールする。

/usr/local/python-3.4/bin/pip install geoip2

後は、Pythonでgeoip2.databaseをimportして使用する。
一先ずClassにして必要そうな値を返すサンプルを作成。

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
#
import sys
import geoip2.database

class GeoIP:
	def __init__(self):
		self.reader=geoip2.database.Reader('GeoLite2-City.mmdb')
	def getGeoLocation(self,ip):
		record = self.reader.city(ip)
		return(record.country.name,record.city.name,record.country.iso_code,record.location.latitude,record.location.longitude)


if __name__== "__main__":
	if len(sys.argv) == 2:              
		ipadress = sys.argv[1]
	else:
                ipadress = '8.8.8.8'
        
	geodata = GeoIP()
        print(geodata.getGeoLocation(ipadress)[0])
        print(geodata.getGeoLocation(ipadress)[1])
        print(geodata.getGeoLocation(ipadress)[2])
        print(geodata.getGeoLocation(ipadress)[3])
        print(geodata.getGeoLocation(ipadress)[4])

IPアドレス8.8.8.8で実行した結果は下記のようになる。

United States
Mountain View
US
37.386
-122.0838

サンプルには含めていないものもあるが、それぞれの変数は下記のようになる。

変数 意味
record.continent.name 大陸名 North America
record.continent.code 大陸コード NA
record.country.name 国名 United States
record.country.iso_code 国名コード US
record.subdivisions.most_specific.name 州・県 California
record.subdivisions.most_specific.iso_code 州・県コード CA
record.city.name 都市名 Mountain View
record.location.latitude 都市の緯度 37.386
record.location.longitude 都市の経度 -122.0838
record.location.time_zone 都市のタイムゾーン America/Los_Angeles

日本語のデータベース

mmdbを下記のように読むと、日本語のデータベースを読み込んでくれる。

self.reader=geoip2.database.Reader('GeoLite2-City.mmdb',['ja'])

8.8.8.8を調べると下記のように出力される。ただ、場所によっては日本語が無いようなので、英語のままの方が良い気がする。

アメリカ合衆国
マウンテンビュー
US
37.386
-122.0838
関連する記事
  • CentOS7にPython3.4をインストールする[記事]
  • pipを最新版にする[記事]
タグ:CentOS Python
posted by MINE at 15:36 | Comment(0) | TrackBack(0) | Python | このブログの読者になる | 更新情報をチェックする | edit
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック