经过2天的开发,终于把这个能够根据IP地址显示国家国旗的程序开发出来了
演示:
- 调用 <img src=”http://photozero.net/api/img.php”>
显示(无参数,显示访问者的国家国旗)
- 调用 <img src=”http://photozero.net/api/img.php?s=64.233.189.104“>
显示(输入需要查询的IP地址或主机如 www.google.com ,显示该IP/HOST的国家国旗)
- 访问 http://photozero.net/api/xml.php?s=64.233.189.104
用XML文件显示该IP的相关信息如:
<?xml version="1.0" encoding="UTF-8"?>
<ipquery>
<query s="64.233.189.104" />
<return status="1" ip="64.233.189.104" country="United States" countryabbreviation="US" img="http://photozero.net/api/icon/png/us.png" />
<info runtime="0.1131010055542 s" />
</ipquery>
需要用的朋友去试试,我的Reviewers_Info插件也会尽快添加这个功能。
做这个程序主要有2个难点:
一.IP数据来源,国内有纯真IP数据库,但它的国家、地区是用中文储存的,而该程序需要用到2位字符的国家英文代码(如 cn,us)作为图片的链接(如 http://example.com/cn.png),纯真数据库并没有提供,且纯真数据库虽然提供较完整数据,但相对于只需要国家代码,存那么多的数据就有点臃肿了。所以只能用国外提供的数据库了。上Google搜一下,国外某些数据库还是不错的,但都是企业级应用,动辄上百上千$的费用不是我能支付的。后来找到了与Firefox插件Flagfox中使用相同数据的http://geotool.servehttp.com,并通过链接找到了Maxmind(不知为何这个网站被瑞星防火墙阻挡了)提供的数据库,这个数据库数据比较整洁,只有起止IP、国家英文名、国家缩略名如:
“2.6.190.56″,”2.6.190.63″,”33996344″,”33996351″,”GB”,”United Kingdom”
……
……
这个数据库不错,它是CVS格式的,我又费了好些时间将它导入到MySQL数据库中。接下来就好办了,输入一个IP就容易得出国家信息了。在效率方面,使用Coolcode写的利用 QQWry.Dat 实现 IP 地址高效检索(PHP)的方法(从DAT文件中搜索)每搜索一次约耗时 0.01-0.1秒,而该程序利用数据库搜索(约10万条数据),约耗时0.1-0.2秒,虽然耗时长了点,但还在可以接受范围内的。
二.国家国旗数据,在百度上找的国旗数据,不是不够完整就是图片太丑陋,显示效果一般,或者是没有匹配的杂乱排序,如 015454.gif 这样的文件名,难道叫我来分辨200多个国家地区?最后终于在FAMFAMFAM找到了完整的国旗,并配有 GIF/PNG 格式,大小普遍在16*11左右(少数国旗非常规形状除外,如尼泊尔),其命名规则也是 cn.png jp.png 这样的格式,刚好满足我的要求。
终于写好了~~~~~~前面走了不少弯路,太累了。希望看到的朋友都支持一下,或者下载Reviewers_Info这个插件试用一下~~~~~~














