StatPressCN,1.6.9.6版本

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

功能开发:

  1. 和wp-comments数据库联动,自动过滤掉垃圾留言者的访问记录;这样“朋友来访”显示的朋友访问列表就更精准了
  2. 修正了widget中可用参数不准确的问题,主要涉及今日来访数量、昨日来访数量、今日页面访问数量、昨日页面访问数量;
  3. “朋友来访”中显示的数量增加了50的选项卡,现在可以设定为5、10、20或50个了。

def规则:

  1. 增加了yahoo日本、cnnic的搜索引擎规则;
  2. 增加了Ginxbot、FairShare、Congentbot爬虫规则的识别。

代码改进:

  1. 在“支持”的调试信息中增加了时区和utc时间、本地时间内容显示;
  2. 在“支持”函数体中共享global $wpdb;
  3. 增加了对博客网址的识别,对me的天高云淡不再显示iframe框架调用;
  4. 动态识别blog网址(通过get_option(‘home’)函数;
  5. 修正widget中可调用参数的时间识别。

升级需做:

  • 升级至1.6.9.6版本后,请进入“系统更新”,选项卡一个都不要选,运行一次“更新统计系统和数据记录”,这样会清理掉那些垃圾留言者的访问记录。

开发笔记

听了dust2k朋友的建议后开始认真考虑过滤掉垃圾留言者。原来曾经尝试过,对akismet的运作机制不甚了了,也就作罢了。这次重新启动,一定要搞定。仔细研读了akisme的代码,它主要是针对comments进行相关处置的,并且是借助了集中存放规则的网络服务器进行的,每次判断都会提交到查询服务器上去(这种机制其实是最高效的,sharethis就是这样升级的,可惜me没有服务器资源,只好在每个版本中自带dat文件进行规则更新)。打开wordpress的默认数据库comments看了下,记录了每条留言的id、ip、agent、内容、留言者等等,其中有一项是是否验证通过。仔细考虑了下,其实基本不关akismet的事情。在StatPressCN记录ip之前,看看是否是comments表中被标记为spam就行了。

昨日访问和今日访问数据不对,刚开始以为差一天,后来发现差了是几个小时。上午测试发现不仅仅是8个小时,而是16个小时,看来问题出在时区。简单的查阅了mysql的时间函数后就更改了代码,结果和php的gmdate不太一样。关键还是时区问题。经过仔细测试,发现还是utc时间好用。机制大约这样:查找blog option中的时区设定,再结合utc时间进行处理,就能得到当地时间。但是用sql语句得到时间效率高还是php本身的时间函数效率高就不清楚了,以后有时间再测试下。

twitter on 2008-05-01

  • 迷雾散去,太阳跑出来一晃再晃,年轻人们一身休闲的准备去都市过节,欢声笑语间忽然又开始觉得快乐其实很简单。 #
  • 喜欢的音乐艺术是一个人性格的延伸和写照,对iGoogle主题的选择当然也是啦,所以Google请诸多大师设计后提供给大家免费享用。可惜 #
  • me不怎么用这个像门户样的大大的杂乱整合平台。不过Google的品牌美誉度还是会继续攀升的。 #
  • 路过司门口,想起了鼎1996年在这附近打黑工的景况和其它几次偶过。 #
  • 五一大节人多啊。车子像要开往天堂,有上无下! #
  • 在statpress中杀spider之前应该判断feed的值,否则对feed的统计就是不完全的,原来一直没意识到这个逻辑,另外要使统计 #
  • 更精准,还应该仅统计活的(live)访问,也就是需要定义一个统计周期,比如说一个月,就像feed statics那样的处理机制。 #
  • 回到家乡,感觉高楼大厦少很多,多为单层平房,但门神年画的完好率超高。 #

Powered by Twitter Tools.

StatPress深度使用

【将Statpress的升级纳入了正式的开发进程,最新进展请移步StatPressCn插件开发——WordPress插件。此文仅作历史资料参考。】

WordPress博客系统的强项在于扩展应用多多,当然是通过插件实现的。想给“天高云淡”添加一个访问统计方面的插件,发现最流行的是WordPress.com Stats,可惜它好像只对一级域名有效,只好放弃。仔细查阅了WordPress的插件列表,统计类好像分为另类:引用第三方统计服务的,比如把把Google Analytics和Feedburner统计结果拿过来在管理后台显示的Google Analytics and Feedburner Reports plugin for WordPress;还有直接在服务器上统计数据并分析的,比如刚提到的WordPress.com Stats和本文重点研究的StatPress

安装了StatPress后觉得还不错,功能简单实用,统计结果显示也很直观。这几天每天上去看看统计结果,总算对访问情况有了基本的了解(原来一直用Google Analytics,说实话,很复杂;并且不是给blog系统定制的,不直观),但有两个小问题一直让me觉得美中不足:

  1. 在Last Referrers页面中有不少百度的链接,而Google的是直接出现在Last Search Terms页面中,看来是StatPress不能正确识别我们中文用户常用的搜索引擎——百度;
  2. 安装默认是Do not collect spiders visits,但用了两天me觉得那个那个spider对统计分析没啥意义,就在Options中把它取消了。这下好,它是老老实实的不统计spider信息了,但Overview中那个柱形比例图就很难看了:刚安装那两天因为统计了spider,柱子高高的,后来取消后的日期柱子就很矮(唉,主要还是怪浏览量有限,spider的访问居然超过了用户),中间各分类(Visitors、PageViews、Spiders、Feeds)的情况根本看不清楚。

问题虽然不大,但天天面对也挺烦的,更何况me对细节有那么在意,还是想想办法搞定它吧。

把StatPress的插件压缩包打开,里面有两个目录:def和locale。在def下共有四个数据文件,分别是banips.dat、browser.dat、os.dat、searchengines.dat。用EmEditor打开这些dat文件,发现都是基本的文本,中间定义了各种规则。其中searchengines.dat的文本片断如下:

Alice|search.alice.it|qs|
Google|www.google.|q|
Google Groups|groups.google.|q|
Google Images|images.google.|q|
Yahoo|search.yahoo.com|p|
Virgilio|search.virgilio.it|qs|
Arianna|arianna.libero.it|query|
Altavista|.altavista.com|q|

规则很简单,每行定义一个规则,分为三个部分:搜索引擎名称、域名、搜索词标识。me把所有的访问记录通过Export功能导出为csv格式,用Excel打开,通过Excel的分列功能做成数据表,筛选出referrers,发现有百度、yahoo和Google的blogsearch不能被识别。在searchengines.dat添加如下规则:

Google Blog|blogsearch.google.|q|
Yahoo|search.yahoo.com|p|
Yahoo cn|www.yahoo.cn|p|
Baidu|www.baidu.com|bs|
Baidu|www.baidu.com|word|
Baidu|www.baidu.com|wd|

上传至服务器。进入StatPress界面点StatPressUpgrade按钮,OK。再返回统计页面,呵呵,很好,StatPress已经能正确识别百度等中文用户常用的搜索引擎了,第一个问题算是基本解决。但可惜搜索的关键词中的中文好像不能被正确识别,都显示为问号(?),留待下步探究。

第二个问题的解决思路其实很简单,就是把已经统计的spider信息删除就行了,但因为原来从来没有在服务器上操作过php和mysql,虽然心里有底,还是要充分准备的,搞不好把博客系统破坏了就麻烦大了。

打开statpress.php文件,有九百多行代码。大约浏览了下,它创建了一个statpress数据表来记录访问信息,然后就是各种功能板块的实现代码。仔细查阅后,me决定在iriStatPressExport函数中加入代码删除包含有spider的数据记录。代码如下:

        print "Detele the Spider, start:";
	$qry = $wpdb->query("DELETE FROM $table_name WHERE spider != ''");
	if($qry == 0){
		print "Detele the Spider, DONE.";
	}
	else if($qry === FALSE){
		print "Error occurred when deleting the record with spider content.";
	}else{
		print "".$qry." records with spider content is deleted.";
	}

上传至服务器,执行了一次导出数据(Export),打开生成的csv文件,末尾处显示Detele the Spider, start;752 records with spider content is deleted.呵呵,总共删除了752条记录,成功。再次登陆统计界面,柱子已经很均匀了,也很直观。这第二个问题也基本搞定

美中不足的是me发现feeds数据好像少了些。打开第一次导出的csv数据,发现居然还有部分记录是在spider和rss中都有数据,统计了下共有五十条记录,晕,看来me误杀了这部分记录,想恢复是不可能的了,只好作为经验教训了:下次对数据库操作时一定要彻底弄清楚数据库的结构