替wap网站加入google analysis之ruby on rails版本
大家都知道,google analysis可以帮助我们分析网站的流量等信息。
但是问题是,google analysis的追踪代码是基于js的,有些浏览器,比如有些手机浏览器不支持js,而且不能统计到wap网站的流量。
尽管google考虑到了这一情况,并且提供了工具,比如在“Analytics(分析)设置 - 配置文件设置 - 检查状态 - 跟踪代码 - 高级”中选择“针对手机创建的网站”就可以获得一段代码来统计wap网站的流量信息,不过遗憾的是当前只支持:PHP Perl,JSP,ASPX。
而 博聆网
是用ruby on rails写的,所以研究了一下google analysis的追踪原理(原理请参考http://www.biaodianfu.com/google-analytics-architecture.html 这篇文章)
原理大概是这样:当我们访问带有Google
Analyitcs追踪代码的页面时,页面中的GA追踪代码被执行,然后会向Google服务器发送一个1像素的图片请求。
(http://www.google-analytics.com/__utm.gif
)并将所收集到的数据作为请求__utm.gif图片链接的变量一起发送回google服务器。然后经过google服务器的处理发布到我们的数据报告里。
并且通过在“Analytics(分析)设置 - 配置文件设置 - 检查状态 - 跟踪代码 -
高级”中选择“针对手机创建的网站”,中选择php语言,查看给出的php例子,发现确实是这样的。只要向http://www.google-analytics.com/__utm.gif 请求这个图片,在url里面加上参数,google analysis就可以分析了。
所以写了这个ruby版本的:
首先,定义helper
def img_for_google_analysis params_for_analysis={} params_for_analysis["utmn"] = rand(0x7fffffff) params_for_analysis["utmr"] = request.headers['Referer']||'-' params_for_analysis["utmhn"] = request.host params_for_analysis["utmp"] = request.fullpath params_for_analysis["utmac"] = 'MO-XXXXX-X' #这个是google analysis的帐号,要把里面的UA替换成MO,表示是手机网站。 params_for_analysis["utmwv"] = "4.4sh" params_for_analysis["utmcc"] = '__utma=999.999.999.999.999.1;' if request.remote_ip.blank? params_for_analysis["utmip"] = "" else params_for_analysis["utmip"] = (request.remote_ip.split(".")[0,3]<< "0").join(".") end if cookies["__utmmobile"] guid = cookies["__utmmobile"] else guid = request.headers['HTTP_X_DCMGUID'] || request.headers['HTTP_X_UP_SUBNO'] || request.headers['HTTP_X_JPHONE_UID'] || request.headers['HTTP_X_EM_UID'] end if guid message = guid + params_for_analysis["utmac"] else message = rand(0x7fffffff).to_s end cook = Digest::MD5.hexdigest(message) cookies["__utmmobile"] = params_for_analysis["utmvid"] = "0x" +cook[0,16] ppp="" params_for_analysis.each_pair do |index , value | ppp<<"#{index}=#{value}&" end return "http://www.google-analytics.com/__utm.gif?"+URI.encode(ppp) end
注意,helper文件里要
require 'digest/md5'
因为使用到了
Digest::MD5.hexdigest()这个方法
然后在layout里面引入这个img图片就可以了
%img{:src=>img_for_google_analysis,:alt=>""}
ok!