Harvest Nation Flag From IP Address

一個留言版或是討論區常有的功能,能在發言者的旁邊顯示出發言時所留下的國家國旗;網路上也有一些公開的 API 可以呼叫,只要丟一個 IP Address 在 API 後面就可以反查到所在的國家代碼的圖示,例如:Neekey API Services,或是 hostip.info 也是相同的簡單方式就可以使用;另外一種方式就是把廠商放出來的資料庫整合到自己的系統中,這次實做的系統是用 MaxMind 所放出來的 GeoLite Country 資料庫,檔案格式是 Comma Separated Value (CSV),詳細的用法請參閱 GeoIP Country CSV Text Files

其實 CVS 的用法該網站已經寫得很清楚了,以下就是一些實做的步驟記錄。這天拿到的版本有包含 105,920 筆紀錄,格式如下:


StartIPAddress EndIPAddress  StartIPNumber EndIPNumber CountryCode CountryName
140.109.0.0   140.138.255.255 2355953664  2357919743  TW      Taiwan

例如一個 IP 位置為 140.109.18.38 經過計算(ipnum = 16777216*w + 65536*x + 256*y + z)之後可以得到 2355958310 這個值,所以丟到 SQL 上之後就可以得到國別代碼 TW,國家名稱為 Taiwan。這邊唯一要注意的是,存放 StartIPNumber 和 EndIPNumber 的資料格式不能是 Int,因為已經超過其值域範圍,這裡我是使用 bigint(8 bytes, -2^63 to 2^63-1 )。

所以剩下的事情就更簡單了,就是找國旗的圖囉,如 famfamfam.com: Flag Icons 或是 Free World Flags Download | IP2Location™ 都有,所以開發起來應該不難,參考看看囉。

2 comments:

    Thanks a lot.

    Very useful.

     

    To 黃土高原, Thanks. ^_^