« GeoIP + Shapelib + MapServerで国別の主題図 | メイン | パンダのライブカメラ »

2005年07月26日

|append.gif このエントリーを含むはてなブックマーク | delicious.gif | この記事をクリップ!

GeoIPの続き

前回のネタの続き。

GeolPはインストールできても、ShapelibやMapServerあたりのインストールはめんどくさいと言う、皆様のためにこんなものを用意しました。

世界白地図作成CGI
(自宅サーバなので、見えなかったらすんません)

使い方


  1. 下にある geoip.pyダウンロードして、Apacheのアクセスログの国別集計を作成する。

  2. 世界白地図作成CGIのテキストフォームに国別集計の結果を貼付ける(1カラム目:国ID;2カラム目:集計数;3カラム目:ランク;区切り文字はスペースまたはタブ)

  3. 作成するshape file名を指定する (排他処理していないのでユニークになりそうな名前にしてください

  4. "draw"ボタンをおす

  5. 世界地図が表示されます。コピーするなりなんなりどうぞ

  6. おまけで世界地図を表示するために作ったShape fileもダウンロードできます

※国別集計のフォーマットさえ判ればApacheのログ集計以外にも白地図描画用に使えそうなので、なにか面白いアイデアがあれを頂ければ機能を追加してみたいと思います。

geoip.py


#!/usr/local/bin/python
import GeoIP
import sys
import string
import math
import re

maxRank = 5
ar = sys.argv[1:]
gi = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE)
ip = {}
p = re.compile('¥d+¥.¥d+¥.¥d+¥.¥d+')

try:
   f = open(ar[0])
   for line in f.readlines(): 
      line = line[:-1]
      text = line.split(" ")
      host = text[0] 
      m = p.match(host)
      if m:
         name =  gi.country_name_by_addr(host)
      else:
         name =  gi.country_code_by_name(host)
      if ip.has_key(name):
         ip[name] = ip[name] + 1
      else:
         ip[name] =   1
   f.close()
except IOError:
   print "Can't find file:", ar[0]

max = len(ip)
ipv = ip.values()
ipv.sort()
lenip = {}
j = 0
for l in ipv:
   lenip[l] =    math.ceil((j * maxRank ) / max) +1
   j = j + 1

 for k in ip.keys():
    print k,'¥t',ip[k],'¥t',lenip[ip[k]]

投稿者 nishioka : 2005年07月26日 23:42

TrackBack

このエントリーのトラックバックURL:
http://nishioka.sakura.ne.jp/mt/mt-tb.cgi/52

Comment

コメントしてください




保存しますか?