作者:sluke
发布时间:October 20, 2009
分类:劳动万岁
这篇日志,是为了纪念几年前一段狂热试用开源程序的日子……
想做小白鼠,试用最新版本的程序,就需要每天访问各种程序的官方网站,看是否有更新,过去我是通过订阅程序官方的博客或邮件列表来达到及时关注的效果,这是一个费时费力的过程,而且并不是所有程序都有博客或是邮件列表。于是我就构思了一个小工具网站,用于自动检测各种程序更新。
核心的机制是通过监测程序的发布网页(尤其是程序下载页的更新)是否有变化,来判断程序是否有更新(当然这样并不精确,所以在网站用语选择上,使用“可能”这样的词)。
一、监测机制
1、RSS监测,这个没什么好说明的
2、Page2RSS,利用这个工具把网页转成RSS来检测
3、监测网页的MD5值是否有变化,需要把整个网页load到服务器,消耗比较大
4、对于开源程序,最好不过的方式是检测SVN的更新,还能获取到更新日志,效果佳
5、托管在google code、sf.net上的项目,单写规则监测,能获取更优质的信息,例如监测typecho的update list
二、展示机制
首页:
将被监测的程序分为两种,在显示时略有区别
1、有SVN,能获取到详细信息的
2、只能监测到可能更新的
采用按最后一次监测到更新的时间倒序排列,同日更新的按收录顺序排列,就像是一个冒泡算法,有更新的会排到前面。用于大致如下:
“XXX日检测到XXX程序可能更新”
程序展示页:
这里还说产生一个需求,就是想进一步了解某一个程序,这就需要有一个单独程序展示页,包括程序简介以及采集网络中对该程序的评价(通过采集blogsearch.google.com的搜索结果实现,缺点在于可能会有重复信息,优点是自动更新,质量由google去保证,最大限度减少人工)。
三、程序实现
这里我实际上构思了两种实现方式:
1、单独写一个程序。优点是简单,确定是不方便编辑,需要做个后台管理部分
2、改造博客程序实现。优点是管理方便,缺点是冗余
单独程序实现包括两个部分:
1、程序
包括
1.1 index.php
功能:判断是否需要更新,并导入一个html显示,下面用伪代码写一下思路:
<?php
//导入一个记录上次更新时间的txt文件
import lastUpdateTime.txt;
//获取当前服务器时间
getNowTime();
//判断是否需要更新,7200是时间,超过2小时即可更新
if NowTime>lastUpdateTime+7200{
//导入监测更新的程序
import checkUpdate.php;
}
//不需要更新则导入一个事先生成的html,可以减少数据库查询
import display.html;1.2 last_updateTime.txt
功能:记录上次更新时间的txt文件
1.3 check_update.php
功能:根据监测类型监测程序是否更新,并写入数据库,需要分组,避免超时,以下是伪代码表明思路:
<?php
//数据库连接及操作
function updatebase(){}
//监测RSS的函数
function checkRSS(){
if 程序更新==true {
将更新时间写入数据库;
}
}
//监测网页MD5的函数
function checkPageMD5(){}
//监测SVN的函数
function checkSVN(){}
//监测google code的函数
checkGooglecode(){}
if checkType==RSS{
checkRSS();
}
elseif checkType==MD5{
checkMD5();
}1.4 update_comments.php
功能:获取以程序名为关键词的google blogsearch结果,并采集到评论表里,供程序展示页使用,需要分组,避免超时,以下是伪代码表明思路:
<?php
//数据库连接及操作
function updatebase(){}
//取出程序名称,提交搜索并获取结果
function getBlogsearch(){
//获取程序名称
getSoftTitle();
//提交搜索并获取结果
getBlogsearch(){
return $blogTitle, $blogSummary, $blogURL;
}
//取出已有评论的URL与新获取的URL比较,去重
removeRepeat();
//写入数据库
writeDatebase();
}1.5 writePage.php
功能:取出数据库内容,生成html,供首页显示,以下是伪代码表明思路:
<?php
//取出数据
getSoftDate();
//写入html
writePage();
1.6 index_content.html
功能:首页内容,供index.php调用
1.7 display_soft.php
功能:显示程序展示页
2、数据库设计(简表)
2.1 soft表
字段:
softID 标识录入程序ID 数值
softTitle 程序名称 文本
softSummary 程序简介 文本
softURL 官方地址 文本
checkURL 监测地址 文本
checkType 监测类型 数值
2.2 comment表
字段:
commentID 标识评论ID 数值
commentURL 评论来源URL 文本
content 评论内容 文本
contentBlogTitle 评论来源博客名称 文本
contentBlogURL 评论来源博客URL 文本
softID 标识从属程序ID 数值
上面就是单独写程序的构思,还有一种改造博客程序的实现方式,原理差不多,就是需要写监测程序的功能和加入评论内容的功能。
多一句嘴,已经有网站很好满足了我最初构思这个工具网站的需求。http://chkversion.com/
作者:sluke
发布时间:September 27, 2009
分类:劳动万岁
_setVar函数跟_trackPageview函数一样,灵活运用可以极大丰富统计报告。简单来说,_setVar函数可以定义一个值,当被触发的时候,该值被记录。
1、统计有注册意愿的用户
注册,不出意外都需要访问一个注册页面,那么统计访问这个页面的用户也就知道了有多少用户动过注册的念头,当然可能看了一眼,没有完成注册。我们可以在注册页面这样部署代码:
<body onLoad="javascript:pageTracker._setVar('想注册');">2、统计注册成功的用户
注册的最后一步无非就是按下“确定”按钮,那么就在完成注册的“确定”按钮上加上onClick事件,比如
onClick="pageTracker._setVar('完成注册');3、统计登陆用户
对于有会员系统的网站来说,可能需要知道有每天有多少用户登陆网站,用于考查网站提供的会员增值服务是否有吸引力,关系到网站是否可以通过对会员的精准营销来赢利。我们可以在给登录链接加上:
<a href="link.html" onClick="pageTracker._setVar('登陆用户');">点击此处</a>同样的,也可以在登陆页的确定按钮上加。
以上三个是比较容易想到的应用,值得一提的是,_setVar函数被触发后,定义的值是会被写入cookie的。
4、观察用户兴趣
对于一个大的电子商务网站来说,对用户的购买兴趣一定是有兴趣的,_setVar函数可以通过网站上访问的页面或在表单上做出的响应对其进行分类,前面三个就是演示。
假设网站有个多个商品分类,我们分别给每个分类加上
<body onLoad="javascript:pageTracker._setVar('IT书籍');">所有访问该页面的访问者都将被分配到"IT书籍"组,也就是对IT书籍有兴趣的用户。
google给出了一个通过下拉菜单触发的例子:
<form onSubmit="pageTracker._setVar(this.mymenu.options
[this.mymenu.selectedIndex].value);">
<select name=mymenu>
<option value="Technical/Engineering">
技术人员/工程师</option>
<option value="Marketing/PR">Marketing/PR</option>
<option value="Manufacturing">Manufacturing</option>
<option value="General Management">General Management</option>
这样,我们就大致上知道了不同职业的用户停留时间、跳出率、平均访问页数等等数据。
作者:sluke
发布时间:September 27, 2009
分类:劳动万岁
1、部署自定义代码的时候,一定要注意把google的默认代码在自定义代码之前加载,比如可以在body之前加载,以google的访问速度,先加载不会影响多少被统计网站的速度。
2、google analytics是根据cookie来统计的,这里有一个跨域的问题,不用的域名是会纪录为不同数据,即使是用一个IP访问不同的UV。举例说明,一个IP分别访问了www.mylitterwebsitr.com和blog.mylitterwebsitr.com,会被纪录为1个IP,2个UV,同时在会产生refer。
3、子目录是用域名的cookie,不会产生UV。
4、熟练使用google analytics,需要熟练使用正则表达式。
5、统计行为应在本页面完成,不要跳转刷新,这样自定义的统计行为会销毁
6、会有7、8、9……
作者:sluke
发布时间:September 14, 2009
分类:劳动万岁
_trackPageview函数是google analytics里一个极其有用的东西,下面来列举一些常见的用法,用来抛砖引玉。
一、跟踪广告(出站链接)
这里的广告是指投放在网站上,链接到其他网站的广告,也就是一个出站链接,在现实用很常见,流行的做法是在使用专门的广告系统,加上一个点击跳转,来统计广告的点击量,其实使用_trackPageview函数就可以做到这一点。
假设网站上有一个banner广告,是链接到了某一个网游的注册页面,那么在设置出站链接的时候,可以这么写:
<a href="http://www.advertisersite.com" onClick="javascript: pageTracker._trackPageview ('/advertise/banner/advertisersite.com');">这里实际上是给网站虚拟了一个url,也就是/advertise/banner/advertisersite.com,这样点击这个广告,跳转到了网游的注册页面,会被记录为一个PV,有多少个PV也就自然是点击了多少次广告。需要注意的是,对与这个虚拟路径的规划一定要合理,否则在统计多个广告的时候会很混乱,我建议使用分类+目标站点+时间的方式管理。
在flash广告里同样可以使用这个函数,如下:
on(release) {
getURL("javascript: pageTracker._trackPageview
('/advertise/banner/advertisersite.com');");
getURL("http://www.advertisersite.com");
}二、文件下载
除了使用_trackEvent函数来统计文件被下载之外,可以使用_trackPageview来统计,原理与统计广告是一样的,举例说明,假设有一个mp3文件下载数量需要统计:
<a href="http://www.some-muisc.com/miusc-files/music.mp3" onClick="javascript: pageTracker._trackPageview('/downloads/mp3'); ">这样每次下载这个mp3,就会被记录为访问一个虚拟路径的PV。
三、js事件
js事件也可以用_trackPageview函数来统计,主要用于统计点击和tab结构的切换,例如统计点击事件:
<a href="javascript:void(0);"onClick="javascript:pageTracker._trackPageview('/folder/file');" >记录 rollover 事件:
<a href="javascript:void(0);" onMouseOver="javascript:pageTracker._trackPageview('/folder/file'>以上几种统计的思路其实就是一个,把系统统计的东西转化为访问虚拟路径的PV,好处是通用性,缺点也不少。
1、pv显示比实际的会多一些,需要在最终的报告里减去虚拟路径的PV
2、对虚拟路径的规划能力要求比较高
3、查看不太方便,需要建立过滤器
作者:sluke
发布时间:September 7, 2009
分类:劳动万岁
Google Analytics提供了强大的API来跟踪搜索引擎,下面用鲜果网的自定义代码来说明,打开鲜果网的首页,能看到这样一段代码:
var t = _gat._getTracker("UA-9142976-1");t._addOrganic("baidu","word");t._addOrganic("soso","w");t._addOrganic("3721","name");
t._addOrganic("yodao","q");t._addOrganic("vnet","kw");t._addOrganic("sogou","query");t._addIgnoredOrganic("鲜果");
t._addIgnoredOrganic("鲜果网");t._addIgnoredOrganic("xianguo");t._trackPageview();return t;
} catch(err) {}虽然google analytics默认已经能识别很多搜索引擎,但是在必要的时候我们依然需要自定义代码来识别一些小型的搜索引擎。这里鲜果使用了_addOrganic(),它的格式是这样的:
_addOrganic(newOrganicEngine, newOrganicKeyword)
newOrganicEngine是一个string,标识搜索引擎的名字
newOrganicKeyword也是一个string,标识传递搜索关键词的那个参数
比如t._addOrganic("yodao","q"),这是用来定义有道搜索的,先看看有道搜索“hello”的时候,是怎样传递参数的:
http://www.youdao.com/search?q=hello&btnIndex=&ue=utf8&keyfrom=web.index
t._addOrganic("yodao","q")
yodao是指有道搜索
q是指传递“hello”给搜索引擎的那个参数
同样的,其他自定义项就好理解了,不过看起来鲜果这个代码不是最新的,有写搜索引擎的newOrganicKeyword不对。鲜果在代码中还用到了_addIgnoredOrganic(),这是用来忽略关键词的。用户可能在搜索框中直接输入网址或者网站名(也可能是误操作),比如输入了“www.xianguo.com”,这些关键词是不需要被监控的。
t._addIgnoredOrganic("鲜果网")就是忽略了“鲜果网”这个关键词,当然,通过“鲜果网”这个关键词过来的PV还是会被计算。
同样有用的还有_addIgnoredRef(),这个方法用于忽略Referrer,比如一个网站使用了双域名,那么在统计报告中,不同域名件的跳转会被计为Referrer,这时候可以使用_addIgnoredRef()来忽略其中一个域名,保证在“Referring Sites”也就是来源网站中不再计算双域名的情况,_addIgnoredRef()不会影响计算PV。格式如下:
pageTracker._addIgnoredRef("www.sister-site.com");
- 1
- 2
- 3
- 4
- ...
- 9
- »