twitter on 2008-05-06
Tuesday, May 6th, 2008
Powered by Twitter Tools.
Powered by Twitter Tools.
自从不经意间中对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子目录下即可。
注意:请勿使用插件自动更新,否则升级功能全部自动消除。
——————————————————————————————————
昨天的聚合输出乱码把me的关注点吸引到feed、rss等相关的东东方面来。虽然输出乱码的问题已经暂时解决,但me对feedburner的价值认同大幅度降低,不能再完全依靠它,再次使用其feedflare功能发现超慢之后me就更是无法留恋了。
到WP后台停掉了FeedBurner FeedSmith插件,它的作用是把所有对原生聚合输出的存取都自动转向到feedburner去。这样与feed相关的插件就只剩下Feed Count和Feed 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,把它返回就行了。
很好,两个数值我们都可以通过调用函数得到了,下面我们来定制输出:
直接订阅
< ?php if (function_exists('feed_subscribers')) $stat_or=feed_subscribers(); print $stat_or; ?>
人,通过feedburner订阅
< ?php if (function_exists('fc_feedcount')) $stat_fb=fc_feedcount(); print $stat_fb ?>
人;本站共计有
<strong>< ?php print $stat_or+$stat_fb;?></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了,呵呵。
Powered by Twitter Tools.
上午醉乡子朋友留言说聚合输出(RSS)乱码了,me看了下,果不其然,又出问题了,所以的中文字符全部显示为问号(?)。这种问题出现也不是一次两次了,只是近半年来一直比较稳定,原来也偶尔这样,后来都是自动好的。me登录到feedburner后又发现管理界面也从中文自动切换为英文了,难不成它们又在做调整?!
仔细检查了下发现blog的原生输出是好的,但是通过feedburner烧录的全部乱码,再到Google Reader中查看订阅发现原来的文章是好的,近几天的显示为乱码,可能是因为Google Reader缓存了原来的正常输出吧。检查GR发现情况如下:
晚上到网上Google了下,发现很多相关文章。按照MyBeky的文章说法,me去FEED Validator验证网站的聚合输出,发现原生RSS有错误提示,具体如下:
This feed does not validate.
... 自克隆的法律,但他们 ...
In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendation.
line 77, column 101: (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阵营的同学了,怎么还是这么马虎和不成熟呢。