PythonでGeoIPのHTTP環境変数を取得する
さて、前回の記事で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を!