代码之家  ›  专栏  ›  技术社区  ›  Salman Paracha

谷歌分析实时沙盒环境

  •  8
  • Salman Paracha  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 15 年前
        1
  •  17
  •   doug    15 年前

    好问题。

    24小时延迟 从代码更改到可靠反馈。此延迟也适用于GA浏览器的大多数自定义设置(例如,“自定义过滤器”)。

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

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

    对于后者,只需将这一行添加到包含GA跟踪代码的站点的每个页面,就在“\u trackPageview()”下面:

    pageTracker._setLocalRemoteServerMode();
    

    该行将导致每个事务行的一个副本被记录到服务器的活动日志中——因此本质上,您可以实时获取GA捕获的数据,这就是捕获数据所需的全部工作;为了解析它,您可以使用任何优秀的开源web日志分析器,比如 AWStats ,或者自己滚。

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

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

    这种试验台有点复杂,但仍然不难。

    1. 主持/服务ga.js和

    2. 记录\uuutm.gif请求(在 GA数据流,每个请求 对应于一个记录的 交易);和

    3. 方便的可读形式。


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

    一。托管/服务GA脚本(&自动更新

    要做到这一点,您可以创建一个像这样的小shell脚本,将最新的ga.js版本wget到您的本地目录中(替换它在那里找到的现有版本)。

    #!/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 ,它提供了在生产上下文中执行此操作的原始动机和配置详细信息。)


    二。创建\uuutm.gif文件

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


    对于一个测试协议,在该协议中,您是客户端活动的源(例如,您希望验证已添加到站点页面中的某些事件跟踪代码的跨浏览器保真度,因此您可以自动单击刚连接的按钮5000次,从为此目的而设置的dev服务器提供页面)这可能是最简单的 ,因为GA脚本正是在这些头文件中指示客户机从DOM、位置栏(url)和以前的http头文件中收集各种数据,并将它们附加到GA服务器上的资源请求中(\uutm.gif,它只是一个1x1透明像素)。

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

    pageTracker._setLocalRemoteServerMode();
    

    因此,现在您的日志将包含单独的转换行,每一行都是附加到HTTP请求的字符串,用于GA跟踪像素。这个字符串只是键值对的串联,每个键都以字母“utm”开头(可能是“顽童跟踪器”)。这些参数中的每一个都对应于您在GA仪表板中看到的一个变量(下面是一个 complete list 以及它们的描述)。这就是构建解析器所需要知道的全部内容。更详细地说:

    请求(LiveHTTPHeaders日志中的条目):

    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中):

    # 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) ) )
    

    结果如下:

        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
    

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