twitter on 2008-04-30

Wednesday, April 30th, 2008

  • 一次更新,n次出错,看来me距离熟练工还很远哟。#
  • http://lovesun.org/read 这样的referrer很难处理,是当成机器人呢,还是当成订阅呢。其实只要有人访问该页面,它就会自动抓取所有(或者说是该页面涉及的blog的所有文章)文章。#
  • @handleft 撇子使用的啥工具?怎么鲜果推荐能自动提交到Twitter呢? #
  • 爱我所爱无怨无悔,此情,长留,心间!#

Powered by Twitter Tools.

twitter on 2008-04-29

Tuesday, April 29th, 2008

  • 这两天有来自http://lovesun.org/read/ 的referrer不停的集中访问me的blog,以后是机器人,跑过去一看发现是网友lovesun架了一个服务器版本的feed整合工具Gregarius(http://tinyurl.com/zcqk3)。 #
  • 说它是机器人吧,agents中的数据又不同,看得出是不同的浏览器访问的。看来这个整合工具架在服务器上后还是有不少人访问的。#
  • Gregarius is a web-based RSS/RDF/ATOM feed aggregator, run on web server, allowing you to access your news sources from wherever you want. #
  • 对于装了Gregarius的聚合阅读存在几个不好理解的地方:一、me的统计工具解析出来的访问地址像这样view=1&post_id=207,但me的网址都应该是/2007/02之类的样子;二、只要有人访问聚合站点,聚合#
  • 另外cache.baidu.com的对网站的访问也是形如view=1&post_id=207的样子。真有点奇怪,难道他们都是自动识别me是用的wordpress系统的,然后用post_id读取而完全不管me的permalink设置。 #
  • 在不同项目中切换是提高工作效率的方式之一,但过于频繁则会走向反方向。 #
  • @GSeeker 谷歌真要歌唱起来,最少还要两年。属慢热型!鉴定完毕。 #
  • 风向大变,专心做事,度过难关。 #

Powered by Twitter Tools.

升级StatPress的功能(完美支持中文)

Monday, April 28th, 2008

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

完美支持中文的搜索关键词统计

在后台浏览统计信息发现搜索关键词有不少是乱码,能正确识别的中文字符没几个。把鼠标放上去点到来源地址去看又是好的,看来是statpress对中文不太友好导致的。到作者主页反应了这个问题,好久没有回音,看来还是自己解决算了。检查源码,发现在处理referrer时仅仅使用了urldecode函数对url进行解码,这对utf-8编码的是非常有效的,但对于中国用户常用的gb2312就不行了。

解决办法时把几个中文的搜索引擎(如baidu和google.cn等)单独判断,识别出来后用iconv转换一道。OK,测试成功。

后来发现还是有中文乱码。再查看链接,发现有不少搜索引擎在url中直接定义了语言编码如gb2312或utf-8。这也好办,增加一层判断就行了。如果指明了编码,直接根据其定义分别处理,然后才是针对me定义的中文搜索引擎进行专项处理。于是天下太平,到目前为止所有的中文搜索关键词都正常显示了。

增加对本站直接订阅feed的统计功能

订阅数量统计中,me借用两个插件实现了网站订阅的总量统计。把玩statpress的时候me发现其实它对feed的订阅情况也有统计,既然这样,干嘛多装一个插件呢。说干就干,用sql语句把feed的总数读出并做一个专门的函数输出订阅信息方便外部直接调用。这个函数调用了Feed Count对feedburner订阅的统计信息,不过如果没有安装FC也无所谓,大不了不统计罢了,statpres还可以正常运行。增加了对时间区间的限制,只取近三个月的活跃订阅。

修正了热帖(TopPost)功能

原函数仅针对permalink是默认情况下有效,对于其他格式的permalink没法产生作用。me修改后支持了形如/month/day/postname.html格式的支持。

增加了文章热度的支持

用当前页面访问量和总访问量进行除操作后得出当前文章的热度或流行度。

注:使用dreamweaver做wordpress主题感觉还是很不错的。

——————————————————————————————————

下载wp-statpress(modified by heart5)

使用:解压后上传至wp-content下的plugins子目录下即可。

注意:请勿使用插件自动更新,否则升级功能全部自动消除。

——————————————————————————————————

StatPress深度使用

Saturday, April 19th, 2008

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

订阅数量统计

Sunday, April 13th, 2008

昨天的聚合输出乱码把me的关注点吸引到feed、rss等相关的东东方面来。虽然输出乱码的问题已经暂时解决,但me对feedburner的价值认同大幅度降低,不能再完全依靠它,再次使用其feedflare功能发现超慢之后me就更是无法留恋了。

到WP后台停掉了FeedBurner FeedSmith插件,它的作用是把所有对原生聚合输出的存取都自动转向到feedburner去。这样与feed相关的插件就只剩下Feed CountFeed Statistics了。两个都是统计订阅数的,前者针对feedburner,把由其托管的订阅数提取出来,后者则针对原生输出的订阅进行统计。me从来没有用过feedsky等其他烧录服务,因此从理论上讲这两个的统计之和应该就是“天高云淡”的总订阅数。好,下面的任务就是把总订阅数动态显示在侧栏

Feed Count的官方网站这几天一直处于维护状态,没有更详细的资料,好像也不支持widget,只提供了一个函数供调用,如下:

< ?php if (function_exists('fc_feedcount')) fc_feedcount(); ?>

另外Feed Count在WP后台提供了个性化设置界面,可以对上面函数的输出做个性化配置,但是调用该函数后的输出像这样52 位订阅者,不但是字符串不是数值,还带有链接。查看feedcount.php在源码的fc_feedcount函数中发现有这么一部分:

        if (trim($map_fc_link)!='') {
$openlink = "<a href="http://52good.skylast.com/wp-admin/$map_fc_link">";
$closelink="</a>";
}
print "
<div class="feedcountdiv">
 
$openlink<span class="feedcount">\n";
if ($map_fc_before) {
print " <span class="before">$map_fc_before</span>\n";
}
print "<span class="subscribers">$number</span>\n";
if ($map_fc_after) {
print " <span class="after">$map_fc_after</span>\n";
}
print "</span>$closelink
</div>
 
";

并且该函数返回值为空,因为它已经把结果print了。其实me只是需要那个$number而已。用一句

eturn $number;

替代上面代码就OK了。
再来看Feed Statistics,其调用函数feed_subscribers源码如下:

function feed_subscribers(){
$s = FEED_STATS::how_many_subscribers();
echo $s." feed subscriber";
if ($s != 1) echo "s";
}

我们需要的是那个$s,把它返回就行了。
很好,两个数值我们都可以通过调用函数得到了,下面我们来定制输出:
直接订阅

&lt; ?php if (function_exists('feed_subscribers'))
$stat_or=feed_subscribers();
print $stat_or; ?&gt;

人,通过feedburner订阅

&lt; ?php if (function_exists('fc_feedcount'))
$stat_fb=fc_feedcount();
print $stat_fb ?&gt;

人;本站共计有

<strong>&lt; ?php print $stat_or+$stat_fb;?&gt;</strong>

人订阅。不过这样好像不大美观,并且内容复杂,me去feedburner网站下了两个小图标上传至服务器,效果见页面左上角,最终代码如下:

 
<li>
<h2>订阅统计</h2>
<ul>
<div class="feedcount">
<a href="http://52good.skylast.com/feed/rss/" target=_blank>
<img src="/wp-content/imgs/rss.png"/></a></div>
</ul>
</li>
 
< ?php if (function_exists('feed_subscribers')) $stat_or=feed_subscribers(); print $stat_or; ?>人,
 <a href="http://feeds.feedburner.com/gardenyard" target=_blank><img src="/wp-content/imgs/fb.ico"/></a>
< ?php if (function_exists('fc_feedcount')) $stat_fb=fc_feedcount();print $stat_fb ?>人;共计<b>
< ?php print $stat_or+$stat_fb;?></b>人订阅。
 
 

至于进一步的美化就需要您自己设计css了,呵呵。

twitter on 2008-04-12

Saturday, April 12th, 2008
  • 刚经醉乡子朋友提醒,me查看了feedburner的聚合输出果然是乱码。最近五天的文章中文无法正常显示,全部是问号,以前的倒是好的。登录feedburner发现原来默认的中文界面自动切换到英文了,可#
  • 后花园 http://garden.eoooo.com 终于恢复维护了。谢谢刀刀的空间和n多技术支持!不容易啊,已经办了八年了。#
  • 今天终于用FlashFXP登陆上了后花园,比那个AcexFtp可要好用多啦。呵呵!那个跳过列表功能很强,可定制。#
  • 终于搞定了feedburner烧录的输出乱码问题,更改原始feed为 http://52good.skylast.com/feed/rss 就行了。 #
  • StatPress插件还是不错的,统计信息基本沟通,刚取消掉了对spider的跟踪,太浪费空间了,me看才不到一天数据库都有0.16兆了,所以要节省空间。#

Powered by Twitter Tools.

Feedburner再次乱码

Saturday, April 12th, 2008

上午醉乡子朋友留言说聚合输出(RSS)乱码了,me看了下,果不其然,又出问题了,所以的中文字符全部显示为问号(?)。这种问题出现也不是一次两次了,只是近半年来一直比较稳定,原来也偶尔这样,后来都是自动好的。me登录到feedburner后又发现管理界面也从中文自动切换为英文了,难不成它们又在做调整?!

仔细检查了下发现blog的原生输出是好的,但是通过feedburner烧录的全部乱码,再到Google Reader中查看订阅发现原来的文章是好的,近几天的显示为乱码,可能是因为Google Reader缓存了原来的正常输出吧。检查GR发现情况如下:

  1. 4月7日后的文章开始出现乱码情况;
  2. del.icio.us自动发送的链接订阅摘要中中文显示正常;
  3. 乱码文章始自Twitter Tools自动发的4月7日的twitter摘要;
  4. 文章乱码后在GR中好像也无法自动换行了。

晚上到网上Google了下,发现很多相关文章。按照MyBeky的文章说法,me去FEED Validator验证网站的聚合输出,发现原生RSS有错误提示,具体如下:

This feed does not validate.

  • line 214, column 669: 'utf8' codec can't decode bytes in position 5366-5368: invalid data (maybe a high-bit character?)
    ... 自克隆的法律,但他们 ...

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendation.

line 77, column 101: description contains bad characters (5 occurrences)

... 能正常显示?

第一个错误说是在(转载)世界各国的干细胞研究文章中存在utf8无法解码的字符,第二说是存在不合格字符,me查看了下都是Twitter Tools自动发送的摘要文章。

先处理第一个。帮助上说这种错误是因为RSS中存在高位字符(high-bit character)比如双引号、省略号等造成的,通常原因是拷贝文字时包含了这些字符。嘿,别说,这篇文章是me转载的,确实是直接拷贝文字过来的。me按照提示找到那篇干细胞的文章把出错的地方重新敲了一遍,再次检查,还是提示出错,试了几次后me干脆把那一段文字给删了,嘿嘿,居然还是提示出错,不过说错误已经转移到下一篇文章了。看来这个验证器并不精确。后面这篇文章也是转载的,同样是拷贝粘贴。唉,检查了半天看不出所以然,放放再说。

第二问题出在每日twitter上。提示是最后那个?有问题,me手工把它换成中文的问号(?)后再次检查,呵呵,OK了。看来是Twitter Tools生成的时候自动把超过140个字符的twitter切断并用?附在后面,偏偏这个又是非法字符。这个问题好解决,在TT的作者搞定之前me只好每次手工去替换了。此问题在前几天已经出现过,应该是twitter在处理过大文本时对中文的支持布什很好造成的。

问题暂时先这样解决,feedburner可能需要重新烧录下了。另外可能还要等其服务器稳定说不定能自动解决这些语言不兼容的问题,feedburner好歹也是Google阵营的同学了,怎么还是这么马虎和不成熟呢。


关闭
E-mail It