さて、前回の記事でOpenLiteSpeedでMaxMindのGeoIPを有効化して、
HTTP環境変数を取得可能にする方法を紹介しました。

PHPinfoで取得ができることを紹介しましたが、
PythonをCGとして使っても同様にGeoIPの環境変数の取得ができました。

今回はその方法を紹介します。

ファイルの準備

以下のコードをenv.pyなどという名前でウェブサイトのディレクトリに保存します。


#!/usr/bin/python3
import sys
import os
#
print("Content-Type:text/html;charset=utf-8\n")
print("<font size=+1>HTTP - Environment</font><br>")
#
for param in os.environ.keys():
   env = (param, os.environ[param])
   print("<b>",env[0],"</b>:",env[1],"<br>")

保存したらファイルに実行権限を以下のように付与します。

$ sudo chmod 755 env.py

該当ファイルをブラウザで表示します。



HTTP_GEOIP_CITYなどありますね。

HTTP環境変数を個別に取得するには

HTTP環境変数を全て取得ではなく、個別に取得したい場合は以下のように指定となります。

REMOTE_ADDR = (param, os.environ['REMOTE_ADDR'])
GEO_LATITUDE = (param, os.environ['HTTP_GEOIP_LATITUDE'])
GEO_LONGITUDE = (param, os.environ['HTTP_GEOIP_LONGITUDE'])
#
print([GEO_LATITUDE[1],GEO_LONGITUDE[1],REMOTE_ADDR[1]]

IPアドレスから緯度経度を取得したらOpenStreetMapと連携してみます。

こんな感じでアクセス元の地域が特定できます。

このマップとの連携は以下で実装しています。


REMOTE_ADDR = (param, os.environ['REMOTE_ADDR'])
GEO_LATITUDE = (param, os.environ['HTTP_GEOIP_LATITUDE'])
GEO_LONGITUDE = (param, os.environ['HTTP_GEOIP_LONGITUDE'])
ip_addr = REMOTE_ADDR[1]
folium_map= folium.Map(location=[GEO_LATITUDE[1],GEO_LONGITUDE[1]],zoom_start=15)
folium.Marker(location=[GEO_LATITUDE[1],GEO_LONGITUDE[1]]).add_to(folium_map)
folium_map.save('map.html')
print("<hr>")
if '192.168.1.' in ip_addr:
    print("Local-IP")
print('<a href="map.html">map link</a>')

map生成の実装にはfoliumを使っています。

いかがでしょうか、意外と簡単に実装できることがわかりますね。

それではHappyHackingLifeを!