从Google Analytics中搜集实时访问者

时间:2012-06-13 18:57:56

标签: ajax google-analytics screen-scraping web-scraping google-analytics-api

我有很多网站,并希望在一个页面上构建一个显示每个网站上实时访问者数量的信息中心。 (还有其他人想要这个吗?)现在查看此信息的唯一方法是为每个站点打开一个新选项卡。

Google没有实时API,所以我想知道是否有可能抓取这些数据。 Eduardo Cereto发现Google通过实时/绑定网络请求传输实时数据。任何更精明的人都知道我应该如何开始?这就是我的想法:

  1. 了解如何以编程方式进行身份验证
  2. 检查所有实时/绑定请求以查看它们的更改方式。每个请求都有唯一的密钥吗?它来自哪里?以下是我对请求的细分:

    https://www.google.com/analytics/realtime/bind?VER=8

    & key = [这是什么?它从何而来? 21个字符的小写字母数字,每个请求保持不变]

    & ds = [这是什么?它从何而来? 21个字符的小写字母数字,每个请求保持不变]

    &安培; PAGEID = RT-标准%2Frt-概述

    &安培; Q = T%3A0%7C%3A1%3A0%3A%2CT%3A11%7C%3A1%3A5%3A%2Cot%3A0%3A0%3A4%2Cot%3A0%3A0%3A3%2CT%3A7 %7C%3A1%3A10%3A6%3D%3DREFERRAL%3B%2CT%3A10%7C%3A1%3A10%3A%2CT%3A18%7C%3A1%3A10%3A%2CT%3A4%7C5%7C2%7C%3A1 %3A10%3A2%3Dzz%3B%2C&安培;!˚F

    q变量URI解码为此(什么?): 吨:0 |:1:0:,T:11 |:1:5:,OT:0:0:4,OT:0:0:3,T:7 |:1:10:6 == REFERRAL; !,T:10 |:1:10:,T:18 |:1:10:,T:4 | 5 | 2 |:1:10:2 = ZZ;,&安培;˚F

    &安培; RID = RPC

    & SID = [这是什么?它从何而来? 16个字符的大写字母数字,每个请求保持不变]

    &安培; CI = 0

    & AID = [这是什么?它从何而来?整数,从1开始,奇怪地增加到150然后是298]

    &安培; TYPE = XMLHTTP

    & zx = [这是什么?它从何而来? 12个字符的小写字母数字,更改每个请求]

    & T公司= 1

  3. 检查所有实时/绑定响应以查看它们的更改方式。数据是如何进入的?它看起来像是一些改变的JSON。我需要多少次连接才能获取数据?那里的活跃访客在哪里?这是一个样本数据转储:

    19 [[151,[ “空操作”] ] ] 388 [[152,[ “RT”,[{ “OT:0:0:4”:{ “TIMEUNIT”: “MINUTES”, “overTimeData”:[{ “值”:[49,53,52,40,42 ,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81 ], “姓名”: “合计”}]}, “OT:0:0:3”:{ “TIMEUNIT”: “秒”, “overTimeData”:[{ “值”:[0,1,1,1 ,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2,0 ,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0 ,1,1,0,3,2,0], “名”: “总”}]}}]]] ] 388 [[153,[ “RT”,[{ “OT:0:0:4”:{ “TIMEUNIT”: “MINUTES”, “overTimeData”:[{ “值”:[52,53,52,40,42 ,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81 ], “姓名”: “合计”}]}, “OT:0:0:3”:{ “TIMEUNIT”: “秒”, “overTimeData”:[{ “值”:[2,1,1,1 ,1,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2 ,0,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0 ,0,1,1,0,3,2], “名”: “总”}]}}]]] ] 388 [[154,[ “RT”,[{ “OT:0:0:4”:{ “TIMEUNIT”: “MINUTES”, “overTimeData”:[{ “值”:[53,53,52,40,42 ,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81 ], “姓名”: “合计”}]}, “OT:0:0:3”:{ “TIMEUNIT”: “秒”, “overTimeData”:[{ “值”:[0,3,1,1 ,1,1,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1 ,2,0,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0 ,0,0,1,1,0,3], “名”: “总”}]}}]]] ]

  4. 如果您能提供上述任何项目,请与我们联系!

    enter image description here

4 个答案:

答案 0 :(得分:10)

为了达到同样的效果,Google推出了新的Real Time API。借助此API,您可以轻松检索实时在线访问者以及多个具有以下维度和指标的Google Analytics。 https://developers.google.com/analytics/devguides/reporting/realtime/dimsmets/

这与Google AnalyticsAPI非常相似。要开始这方面的发展, https://developers.google.com/analytics/devguides/reporting/realtime/v3/devguide

答案 1 :(得分:6)

使用谷歌浏览器,我可以在网络面板上看到数据。

请求端点为https://www.google.com/analytics/realtime/bind

似乎连接保持打开2.5分钟,在此期间它只是不断获得越来越多的数据。

大约2.5分钟后,连接关闭,新的连接打开。

在“网络”面板上,您只能看到已终止的连接的数据。因此,请将其打开5分钟左右,然后您就可以开始查看数据了。

我希望能给你一个开始的地方。

答案 2 :(得分:6)

谷歌在循环中似乎非常多余。建议您使用仪表板服务器按需提供的公共元素,并在要为给定站点监视的所有页面上按绝对URL包含此项目。输出该项目的脚本可以读取浏览器询问的IP,这些可以全部登录到数据库中并进行过滤,以获得实时人头数的唯一性。

<?php
$user_ip = $_SERVER["REMOTE_ADDR"];
/// Some MySQL to insert $user_ip to the database table for website XXX  goes here


$file = 'tracking_image.gif';
$type = 'image/gif';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);
?>

<强> Ammendum: 数据库还可以为其存储的每一行数据添加时间戳。这可用于进一步过滤结果并提供过去一小时或一分钟内的访客数量。

客户端Javascript与AJAX进行微调或过度杀伤 onblur和onfocus javascript命令可用于判断页面是否可见,通过Ajax将数据传回仪表板服务器。 http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/

当访问者关闭页面时,这也可以通过body标签中的javascript onunload 函数检测到,并且Ajax可以用于在浏览器最终关闭之前最后一次将数据发送回服务器页面。

由于您可能还希望收集有关访问者的一些信息,例如Google分析,此页面https://panopticlick.eff.org/包含大量可以检查和调整的JavaScript。

答案 3 :(得分:5)

我需要/想要个人使用的实时数据,所以我对它们的系统进行了一些反向设计。

我没有绑定到/bind,而是从/getData获取数据(没有双关语)。

/getData,最低要求显然是:https://www.google.com/analytics/realtime/realtime/getData?pageId&key={{propertyID}}&q=t:0|:1

以下是可能的查询参数和语法的简短说明,请记住这些都是猜测,我不知道所有这些:

查询语法:pageId&key=propertyID&q=dataType:dimensions|:page|:limit:filters

值:

pageID: Required but seems to only be used for internal analytics.

propertyID: a{{accountID}}w{{webPropertyID}}p{{profileID}}, as specified at the Documentation link below. You can also find this in the URL of all analytics pages in the UI.


dataType:
    t: Current data
    ot: Overtime/Past
    c: Unknown, returns only a "count" value


dimensions (| separated or alone), most values are only applicable for t:
    1:  Country
    2:  City
    3:  Location code?
    4:  Latitude
    5:  Longitude
    6:  Traffic source type (Social, Referral, etc.)
    7:  Source
    8:  ?? Returns (not set)
    9:  Another location code? longer.
    10: Page URL
    11: Visitor Type (new/returning)
    12: ?? Returns (not set)
    13: ?? Returns (not set)
    14: Medium
    15: ?? Returns "1"

page:
    At first this seems to work for pagination but after further analysis it looks like it's also used to specify which of the 6 pages (Overview, Locations, Traffic Sources, Content, Events and Conversions) to return data for.

    For some reason 0 returns an impossibly high metrictotal

limit: Result limit per page, maximum of 50

filters:
    Syntax is as specified at the Documentation 2 link below except the OR is specified using | instead of a comma.6==CUSTOM;1==United%20States


您还可以在一个请求中通过逗号分隔它们来组合多个查询(即q=t:1|2|:1|:10,t:6|:1|:10)。

根据上述“文档”,如果您要构建一个查询请求页面URL和前10名活跃访问者的城市,其中流量来源类型为CUSTOM位于美国,您将使用此URL:{{1 }}


Documentation

Documentation 2


我希望我的回答是可读的(尽管有点晚)会充分回答你的问题并在将来帮助其他人。