読者です 読者をやめる 読者になる 読者になる

唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

GeoLite2 を使ってどの国のIPアドレスかを判定する

GeoLite2という無料で利用できるIPアドレスと国・都市の対応関係のデータベースがあるらしいので触ってみました(有料版よりも不正確らしいです)
ファイル形式はCSVと独自形式のバイナリ(mmdb)で配布されています

ライセンスは「クリエイティブ・コモンズ 表示-継承 3.0 非移植」です

独自形式のバイナリを扱うためのライブラリが公式で配布されていてだいたいの言語には対応しているみたいです

Pythonで試しに使ってみる

以下のページにある国(Country)のデータベースをダウンロードします

curl -O http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz

ダウンロードしてきたファイルを解凍します

gzip -d GeoLite2-Country.mmdb.gz

ライブラリの一覧の中からPython用のライブラリ(geoip2)をインストールします
pipなどを入れてる方であれば、以下のコマンドだけでインストールできます

pip install geoip2

使い方はこんな感じです
"United States"とか"US"という感じで国の情報が得られます

# -*- coding: utf-8 -*-
import geoip2.database

reader = geoip2.database.Reader('GeoLite2-Country.mmdb') #データベースへのパスを指定
r = reader.country('8.8.8.8') #IPアドレスを指定
print '{}, {}'.format(r.country.name, r.country.iso_code)
-->