Kir*_*met 26 ajax screen-scraping google-analytics google-analytics-api web-scraping
我有很多网站,并希望在一个页面上构建一个显示每个网站上实时访问者数量的信息中心.(还有其他人想要这个吗?)现在查看此信息的唯一方法是为每个站点打开一个新选项卡.
谷歌没有实时API,所以我想知道是否有可能刮掉这些数据.Eduardo Cereto发现Google通过实时/绑定网络请求传输实时数据.任何更精明的人都知道我应该如何开始?这就是我的想法:
检查所有实时/绑定请求以查看它们如何更改.每个请求都有唯一的密钥吗?它来自哪里?以下是我对请求的细分:
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解码为this(是什么?):t:0 |:1:0:,t:11 |:1:5:,ot:0:0:4,ot:0:0:3,t :7 |:1:10:6 ==转诊;,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时
检查所有实时/绑定响应,看看它们是如何变化的.数据是如何进入的?它看起来像是一些改变的JSON.我需要多少次连接才能获取数据?那里的活跃访客在哪里?这是一个样本数据转储:
19 [[151,["noop"]]] 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],"name":"Total"}]}}]]]] 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], "名":"总计"}]}}]]]]
如果您能提供上述任何项目,请告诉我们!

Vig*_*ati 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
使用谷歌浏览器,我可以在网络面板上看到数据.
请求端点是 https://www.google.com/analytics/realtime/bind
似乎连接保持打开2.5分钟,在此期间它只是不断获得越来越多的数据.
大约2.5分钟后,连接关闭,新的连接打开.
在"网络"面板上,您只能看到已终止的连接的数据.因此,将其打开5分钟左右,您就可以开始查看数据了.
我希望能给你一个开始的地方.
谷歌在循环中似乎是多余的.建议您使用仪表板服务器按需提供的公共元素,并在要为给定站点监视的所有页面上按绝对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);
?>
Run Code Online (Sandbox Code Playgroud)
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.
我需要/想要个人使用的实时数据,所以我对它们的系统进行了一些反向设计.
而不是绑定到/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
Run Code Online (Sandbox Code Playgroud)
您还可以通过逗号分隔它们(即q=t:1|2|:1|:10,t:6|:1|:10)在一个请求中组合多个查询.
按照上面的"文档",如果您想构建一个查询请求页面URL和前10位活跃访问者的城市,其中流量来源类型为CUSTOM位于美国,您将使用以下URL: https://www.google.com/analytics/realtime/realtime/getData?key={{propertyID}}&pageId&q=t:10|2|:1|:10:6==CUSTOM;1==United%20States
我希望我的答案是可读的(尽管有点晚),充分回答你的问题,并在将来帮助其他人.
| 归档时间: |
|
| 查看次数: |
16842 次 |
| 最近记录: |