IPアドレスの Geoロケーション情報
WordPress プラグインで日本製のプラグインを識別出来る方法がないか探していると MaxMind の GeoIP2 という IP アドレスから国情報を取得できるライブラリがあるというのを知り使ってみました
使用するには composer を使ってインストールします
準備
composer
composer ? 名前は知っていましたが、使ったことありません (^_^;)
composer は、PHPライブラリの導入や依存関係を管理してくれるツールです
ライブラリの管理はプロジェクト単位に行こなわれ、他のプロジェクトには干渉しないようになっています
また、ライブラリを利用する時には autoload が使えます
require __DIR__ . '/vendor/autoload.php';
これだけ記述しておけばクラスを使用するときに必要に応じて自動的に必要なモジュールを読み込んでくれます
インストール
Windows のローカル開発環境 XAMPP に構築してみます
Windows用のインストーラもあるようですが、今回はコマンドラインからインストールしてみます
c:\xampp\php でコマンドプロンプトを開いて下記を実行
php -r "readfile('https://getcomposer.org/installer');" | php
じぇじぇ 失敗です (^_^;)
エラーになる場合は、php.ini の extension=php_openssl.dll が有効になっているか確認して、コメントアウトされていたら ; を取ります
もう一回
OK のようです
Php ディレクトリに composer.phr が出来ているはずなので、これを Windows7 でコマンドとして実行できるよう composer.bat ファイルにして、バージョン表示されるか確認します
Php ディレクトリ以外でも実行できるように C:\xampp\php を環境変数の path に追加しておきます
これで、composer が使えるようになりました。
composer について詳しく知りたい方は、ここらへんの記事を参照することをお勧めしてお茶を濁しておきます (^_^;)
Composerを使ってPHPのパッケージを簡単インストール
GeoIP2 ライブラリ
今回は WordPress の wp-plugin-ranking というプラグインを作り、そのプラグインだけで使えればOKなので、そこをプロジェクトルートとしてインストールします
プロジェクトルートへ移り、そこから下記コマンドを実行すればOKです
composer require geoip2/geoip2:~2.0
インストールされました すばらしい じぇじぇじぇ (^^)
GeoLite2 データベース
次にライブラリで使用するデータベースを導入します
クリエイティブ・コモンズライセンスで使用できる無償のデータベース GeoLite2 City、GeoLite2 Country があります。
今回は国情報だけわかれば十分なのでデータベースサイズもコンパクトな GeoLite2 Country (約2.8Mバイト) を使ってみました
GeoLite2-Country.mmdb.gz をダウンロードして解凍します
解凍した GeoLite2-Country.mmdb データベースファイルをプロジェクトへアップロードします
実行確認
これで実行準備が出来ましたので、簡単なプログラムを作り動作を確認してみます
下記のようなPHPプログラムを作り、試しに自サイト(国内レンタルサーバー)のURLで確認してみました
//GeoIP2 ライブラリ
require_once __DIR__ . '/vendor/autoload.php';
use GeoIp2\Database\Reader;
function get_ipcountry($geodb, $url) {
$purl = parse_url($url);
$ip_addr = gethostbyname( $purl['host'] );
try {
$record = $geodb->country($ip_addr);
$country = $record->country->name;
} catch (Exception $ex) {
$country = '';
}
return $country;
}
$geodb = new Reader( __DIR__ . '/geo_db/GeoLite2-Country.mmdb');
$country = get_ipcountry($geodb, 'https://celtislab.net/wp_plugin_celtispack/');
NetBeans を使ってデバッガから取得データを見てみます
動作しているようです (^^)
下記サイトも参考にさせていただきました
GeoIP2を使ってIPアドレスの情報を取得 (PHP編) – Tahoo!!
使用感
WordPress プラグインの日本製プラグインを判別するのに使用してみました
どのくらいの精度なのかはわかりませんが、おおむねあっているような感じです (^^)
WordPressプラグインアンテナ – Yet Another Plugin Directory
参考となるように人気のプラグインを紹介いたします。 日本製プラグインも応援してます (^^)
GeoIP2 を使うのに composer を利用したライブラリの導入はとても簡単でした
また、composer を使ったライブラリ構築は、今回のように WordPress プラグイン内で限定して使う用途にもマッチしてます
サーバー上で composer を使えるのがいろいろ自由に操作出来るので望ましいのでしょうが、レンタルサーバー上に composer がインストールされていなくても、ライブラリを含んだ形でプラグイン化してアップロードすればプラグイン自体は問題なく動作するのでお手軽です
以上
composer と GeoLite2 を使用したIPアドレスから国情報を取得する方法について紹介しました
次回は、$wpdb を使用した MySQL データベース処理あたりについて紹介できればと思います