StatPress深度使用

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误杀了这部分记录,想恢复是不可能的了,只好作为经验教训了:下次对数据库操作时一定要彻底弄清楚数据库的结构

Tags: 统计 feed mysql php spider statpress wordpress

热度:2.2% 分享、收藏这篇文章
站内热门文章 博主随机推荐

10 Responses to “StatPress深度使用”

  1. heart5 Says:

    关键字乱码是因为StatPress无法识别gb2312编码造成的。
    $str = “1200%B5%E7%BB%B0%CD%AC%B2%BD”;
    $tmpstr = urldecode($str);//先解码
    $tmpstr = iconv(”gb2312″,”utf-8″,$tmpstr);//在转换
    print $tmpstr.”
    “;//就OK了
    只要识别中文使用gb2312编码搜索字词的搜索引擎并用上面函数处理即可。
    根据StatPress的程序布局,me把它写在导出函数中,执行一次后删除,另外处理搜索词的函数me也进行了修改,这样以后新的纪录自动就是好的了。

  2. 天高云淡 » 关于WordPress的插件开发 Says:

    [...] 继续优化statpress过程中觉得有必要进一步了解wordpress的函数和相关开发知识,因为对很多语句有点读不懂啊。幸亏找到了一个好的针对wordpress源码的阐释网站(Xref可以译为交叉参考吗?),对所有函数都有交代,很不错,但是在自己本机实验的时候发现那个类似get_bloginfo之类的基础函数都无法起效。Google来Google去就找到了不少插件开发的相关文章。模拟wordpress默认提供的HellyDolly源码,自己试着写了几句代码进行测试,终于成功。几个关键点如下: [...]

  3. heart5 Says:

    发现statpress对feed的处理存在问题,尤其是update时会误杀形如/feed的数据记录;
    新增对Soso搜索引擎的识别,修正对Baidu的识别(删掉bs那行!)。

    heart5 reply on April 25th, 2008 12:34 am:

    继续丰富搜索引擎数据库,现如下
    Google Blog|blogsearch.google.|q|
    Yahoo|search.yahoo.com|p|
    Yahoo cn|.yahoo.com.cn|p|
    Yahoo cn|search.cn.yahoo.com|p|
    Baidu|www.baidu.com|word|
    Baidu|www.baidu.com|wd|
    Soso|www.soso.com|w|

    heart5 reply on April 25th, 2008 12:41 am:

    出现如此链接:
    http://search.cn.yahoo.com/search?p=%E5%B9%B2%E7%BB%86%E8%83%9E%E7%A7%BB%E6%A4%8D%E6%B2%BB%E7%96%97&meta=all&pid=ysearch&ei=UTF-8&cns=-1&p4p=4&b=611
    其实此类在链接中明确编码的还有,而me是通过修改statpress源码实现对中文搜索引擎默认为gb2312处理的。按照原来的逻辑,上面链接中关键词变成了“骞茬”,而其实它应该是“干细胞移植治疗”。
    究其原因,在于把utf-8认成了gb2312,多解了一道就变形了。
    花了好长时间才把源码修改完毕,解决方法很简单:先遍历,看是否有明确的charset定义,存储之;再次遍历,得到搜索关键词,在根据上面遍历得到的数值分类处理,over。之所以花了那么长时间是因为me总是试图通过一次遍历解决问题,但因为那个charset定义有可能出现在关键词前面和后面,逻辑上很难解决,其实遍历两次就OK了。

    heart5 reply on April 25th, 2008 11:10 pm:

    不仔细,出了个bug。刚修正了不能识别Baidu搜索关键字的问题。

    heart5 reply on April 25th, 2008 11:09 pm:

    修正了统计feed时存在的问题。
    一、那个iri_StatPress_extractfeedreq函数完全是摆设,甚至是误导,改过来了,不知道作者是咋想的,唉;
    二、修正一个顺序,这样不会把类似/feed/atom的识别给冲掉。
    三、学习了get_bloginfo、str_replace等函数的用法。

    heart5 reply on April 25th, 2008 11:13 pm:

    增加了对Mathon浏览器的识别。

  4. 天高云淡 » 升级StatPress的功能(完美支持中文) Says:

    [...] 自从不经意间中对StatPress做了些小修改后,me跌跌撞撞的进入了php空间。感觉还不错,确实简单易学,也很强大。很想在学习的过程中做点什么,最后还是选择了那这个statpress开刀,以它为基础进行扩展升级。 [...]

  5. heart5 Says:

    $qry=”UPDATE $table_name SET spider = ‘$nome’,os=”,browser=” WHERE spider=” AND replace(agent,’ ‘,”) LIKE ‘%”.$id.”%’;”;
    statpress是把获得的agent中的空格删除后再和spider.dat中的key进行比较的。me刚开始还不知道,后来发现添加的spider规则无法生效后检查源码才发现这个情况。于是把规则中的空格全部去除,OK!

Leave a Reply


关闭
E-mail It