首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Analytics实时沙盒环境

Google Analytics实时沙盒环境
EN

Stack Overflow用户
提问于 2010-07-25 02:02:14
回答 1查看 3.2K关注 0票数 8

我正在寻找一种方法来建立一个谷歌分析沙箱环境,将允许我测试出我的自定义js代码接近实时。

我的应用程序将使用自定义变量进行高级分段,我希望快速测试多个场景,而不是设置一个虚拟GA帐户,然后等待一整天来确认测试。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-25 04:43:48

问得好。

对于GA,服务器更新每四个小时发生一次,并且在每第六次这样的更新之后,整个集合被重新计算,这意味着从代码更改到可靠的反馈的24小时延迟。此延迟也适用于GA浏览器的大多数自定义(例如,“自定义过滤器”)。

因此,如果您要使用GA作为您的web度量系统,并且您希望实际依赖这些数据,那么测试平台是必不可少的。

对我来说,使用两个标准对客户端分析的测试系统进行分组是很有用的:(i)完整的、自包含(闭环)系统;或者(ii)从生产系统(这里的“生产系统”,我指的是GA的系统,而不是GA代码正在跟踪其页面的站点)中提取更简单的自动化数据。

对于后者,只需将此行添加到站点的每个包含GA跟踪代码的页面,就在‘__trackPageview()’下面:

代码语言:javascript
复制
pageTracker._setLocalRemoteServerMode();

这一行将导致每个事务行的副本被记录到服务器的活动日志中--所以在本质上,您可以实时获得GA捕获的数据,这就是捕获数据所需做的全部工作;要解析这些数据,您可以使用任何优秀的开源web日志分析器,例如AWStats,或者使用您自己的。

这既简单又可靠--但它所能做的就是(实时)告诉您“我刚刚在生产服务器提供的页面上实现的分析代码真的能工作吗?”

通常,这还不够--您宁愿在将代码放到生产服务器上之前就知道它是否可以工作。为此,您需要模拟生产环境,并找到一种方法来实时访问GA收集的数据。

这种测试平台稍微复杂一些,但仍然不难。

总而言之,它需要以下步骤:

  1. 在本地托管/服务ga.js和跟踪像素;
  2. 记录__utm.gif请求(在GA数据流中,每个请求对应于一个记录的事务);
  3. 将标头解析为某种方便的人类可读形式。

如果你想要更多的细节(例如,一步一步的实现),这里是:

I.托管/提供GA脚本(自动更新

为此,您可以创建一个小的shell脚本,将最新的ga.js版本放入您的本地目录(替换它在本地目录中找到的现有版本)。

代码语言:javascript
复制
#!/bin/sh
rm /My_Sites/sitename.com/analytics/ga.js
cd /My_Sites/sitename.com/analytics/
wget http://www.google-analytics.com/ga.js
chmod 644 /My_Sites/sitename.com/analytics/ga.js
cd ${OLDPWD}
exit 0;

(感谢AskApache.com,它提供了在生产环境中执行此操作的原始动机和配置细节。)

II.创建__utm.gif文件

这只是一个透明的1x1像素的gif图像,你可以把它放在站点目录中(不管在哪里,它只需要与你页面中所述的位置相匹配)

III.记录__utm.gif请求

对于你是客户端活动的来源的测试协议(例如,你想要验证你添加到站点上的页面中的一些事件跟踪代码的跨浏览器保真度,所以你可以自动点击5000次你刚刚连接的按钮,从你的开发服务器为此目的设置的页面提供服务)可能是最简单的记录请求报头,因为GA脚本指示客户端从DOM、地址栏(url)和之前的http报头收集各种数据。并将它们附加到对GA服务器上的资源的请求(__utm.gif,它只是一个1x1的透明像素)。

对于这种类型的协议,我使用Firefox插件。你可以像安装其他Firefox插件一样安装它,只需点击几下鼠标即可。接下来,打开它,然后单击"Generator“选项卡。在此窗口中,您可以实时看到实际的请求。窗口底部有一个“保存”按钮,用于存储日志。我发现将LiveHTTPHeaders配置为只记录__utm.gif请求会更简单;为此,只需单击“编辑”选项卡并创建一个简单过滤器,以排除除这些特定gif图像之外的所有内容(使用右侧的复选框和右侧的大文本框)。

其他类型的测试协议需要您从服务器活动日志中进行操作;在这种情况下,只需将此行添加到站点的每个页面中,就在__trackPageview()下面:

代码语言:javascript
复制
pageTracker._setLocalRemoteServerMode();

IV.解析这些记录的请求,以便您可以实际读取它们

因此,现在您的日志将包含单独的转换线,每个转换线都是附加到针对GA跟踪像素的HTTP请求的字符串。这个字符串只是键值对的连接,每个键都以字母"utm“开头(可能是"urchin tracker")。这些参数中的每个参数都对应于您在GA仪表板中看到的一个变量(这里有一个complete list和对它们的描述)。这就是构建解析器所需了解的全部内容。更详细地说:

首先,这是一个经过清理的__utm.gif请求( LiveHTTPHeaders日志中的条目):

代码语言:javascript
复制
http://www.google-analytics.com/__utm.gif?utmwv=1&utmn=1669045322&utmcs=UTF-8&utmsr=1280x800&utmsc=24-bit&utmul=en-us&utmje=1&utmfl=10.0%20r45&utmcn=1&utmdt=Position%20Listings%20%7C%20Linden%20Lab&utmhn=lindenlab.hrmdirect.com&utmr=http://lindenlab.com/employment&utmp=/employment/openings.php?sort=da&&utmac=UA-XXXXXX-X&utmcc=__utma%3D87045125.1669045322.1274256051.1274256051.1274256051.1%3B%2B__utmb%3D87045125%3B%2B__utmc%3D87045125%3B%2B__utmz%3D87045125.1274256051.1.1.utmccn%3D(referral)%7Cutmcsr%3Dlindenlab.com%7Cutmcct%3D%2Femployment%7Cutmcmd%3Dreferral%3B%2B

这是我的解析器( Python):

代码语言:javascript
复制
# regular expression module imported
import re

pattern = r'\&{1,2}'
pat_obj = re.compile(pattern)

# splitting the gif request on the '&' character 
# (which GA originally used to concatenate each piece to build the request)
# (here, i've bound the __utm.gif to the variable by 'gfx')
gfx1 = pat_obj.split(gfx)

# create a look-up table to map a descriptive name to each gif request parameter
# (note, this isn't the entire list, which i've linked to above)
keys = "utmje utmsc utmsr utmac utmcc utmcn utmcr utmcs utmdt utme utmfl utmhn utmn utmp utmr utmul utmwv"
values = "java_enabled screen_color_depth screen_resolution account_string cookies campaign_session_new repeat_campaign_visit language_encoding page_title event_tracking_data flash_version host_name GIF_req_unique_id page_request referral_url browser_language gatc_version"
keys = keys.strip().split()

#create the look-up table
GIF_REQUEST_PARAMS = dict(zip(keys, values))

# parse each request parameter and map the parameter name to a descriptive name:
pattern = r'(utm\w{1,2})=(.*?)$'
pat_obj = re.compile(pattern)

for itm in gfx1 :
    m = pat_obj.search(itm)
    if m :
        fmt = '{0:25} {1:10}'
        print( fmt.format( GIF_REQUEST_PARAMS[m.group(1)], m.group(2) ) )

结果如下所示:

代码语言:javascript
复制
    gatc_version              1         
    GIF_req_unique_id         1669045322
    language_encoding         UTF-8     
    screen_resolution         1280x800  
    screen_color_depth        24-bit    
    browser_language          en-us     
    java_enabled              1         
    flash_version             10.0%20r45
    campaign_session_new      1         
    page_title                Position%20Listings%20%7C%20Linden%20Lab
    host_name                 lindenlab.hrmdirect.com
    referral_url              http://lindenlab.com/employment
    page_request              /employment/openings.php?sort=da
    account_string            UA-XXXXXX-X
    cookies

为了避免更长的时间,我省略了cookie的值。它们显然需要一个单独的解析步骤,尽管它实际上与我刚刚展示的步骤相同。同样,每个请求代表一个事务,因此您可以根据需要存储它们。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3326225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档