ajax - scraping - web scraper chrome tutorial
Raspar visitantes en tiempo real de Google Analytics (4)
Con Google Chrome puedo ver los datos en el Panel de Red.
El punto final de la solicitud es https://www.google.com/analytics/realtime/bind
Parece que la conexión permanece abierta durante 2,5 minutos, y durante este tiempo solo sigue obteniendo más y más datos.
Después de aproximadamente 2,5 minutos, la conexión se cierra y se abre una nueva.
En el panel Red, solo puede ver los datos de las conexiones terminadas. Así que déjelo abierto durante 5 minutos aproximadamente y podrá comenzar a ver los datos.
Espero que pueda darte un lugar para comenzar.
Tengo muchos sitios y quiero crear un panel que muestre la cantidad de visitantes en tiempo real en cada uno de ellos en una sola página. (¿Alguien más querría esto?) En este momento, la única forma de ver esta información es abrir una nueva pestaña para cada sitio.
Google no tiene una API en tiempo real, por lo que me pregunto si es posible eliminar estos datos. Eduardo Cereto descubrió que Google transfiere los datos en tiempo real a través de la solicitud de red en tiempo real / vinculación. ¿Alguien más inteligente tiene una idea de cómo debería empezar? Esto es lo que estoy pensando:
- Averiguar cómo autenticar mediante programación
Inspeccione todas las solicitudes en tiempo real / vinculación para ver cómo cambian. ¿Cada solicitud tiene una clave única? De donde viene eso? A continuación se muestra mi desglose de la solicitud:
https://www.google.com/analytics/realtime/bind?VER=8
& key = [¿Qué es esto? ¿De dónde viene? Alfanumérico en minúscula de 21 caracteres, permanece igual cada solicitud]
& ds = [¿Qué es esto? ¿De dónde viene? Alfanumérico en minúscula de 21 caracteres, permanece igual cada solicitud]
& pageId = rt-standard% 2Frt-overview
& q = t% 3A0% 7C% 3A1% 3A0% 3A% 2Ct% 3A11% 7C% 3A1% 3A5% 3A% 2Ac% 3A0% 3A4% 2Cot% 3A0% 3A0% 3A3% 2At% 3A7% 7C% 3A10% 3A6% 3D% 3DREFERRAL% 3B% 2Ct% 3A10% 7C% 3A1% 3A10% 3A% 2Ct% 3A18% 7C% 3A1% 3A10% 3A10 2Ct% 3A4% 7C5% 7C2% 7C% 3A1% 3A10% 3A2! % 3Dzz% 3B% 2C & f
La variable q URI se decodifica a esto (¿qué?): T: 0 |: 1: 0:, t: 11 |: 1: 5:, ot: 0: 0: 4, ot: 0: 0: 3, t : 7 |: 1: 10: 6 == REFERENCIA;, t: 10 |: 1: 10:, t: 18 |: 1: 10:, t: 4 | 5 | 2 |: 1: 10: 2! = zz;, & f
& RID = rpc
& SID = [¿Qué es esto? ¿De dónde viene? Mayúsculas alfanuméricas de 16 caracteres, se mantiene igual cada solicitud]
& CI = 0
& AID = [¿Qué es esto? ¿De dónde viene? entero, comienza en 1, aumenta extrañamente a 150 y luego 298]
& TYPE = xmlhttp
& zx = [¿Qué es esto? ¿De dónde viene? 12 caracteres en minúscula alfanumérica, cambia cada solicitud]
& t = 1
Inspeccione todas las respuestas en tiempo real / vinculación para ver cómo cambian. ¿Cómo entran los datos? Parece un JSON alterado. ¿Cuántas veces necesito conectarme para obtener los datos? ¿Dónde están los visitantes activos en el número de sitio allí? Aquí hay un volcado de datos de muestra:
19 [[151, ["noop"]]] 388 [[152, ["rt", [{"ot: 0: 0: 4": {"timeUnit": "MINUTES", "overTimeData": [{" valores ": [49,53,52,40,42,55,49,41,51,52,47,42,62,86,71,81,66,81,86,71,66,65, 65,55,51,53,73,71,81], "name": "Total"}]}, "ot: 0: 0: 3": {"timeUnit": "SECONDS", "overTimeData": [ {"valores": [0,1,1,1,1,0,1,0,1,1,1,0,2,0,2,2,0,0,0,0,0,0, 2,1,1,2,1,2,0,5,1,0,2,1,1,2,2,2,1,0,5,1,1,2,0,0,0, 0,0,0,0,0,0,0,1,1,0,3,2,0], "name": "Total"}]}}]]]]] 388 [[153, ["rt ", [{" ot: 0: 0: 4 ": {" timeUnit ":" MINUTES "," overTimeData ": [{" valores ": [52,53,52,40,42,55,49,41, 51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,55,51,53,73,71,81], "name": " Total "}]}," ot: 0: 0: 3 ": {" timeUnit ":" SECONDS "," overTimeData ": [{" valores ": [2,1,1,1,1,1,0, 1,0,1,1,1,0,2,0,2,2,0,0,0,0,0,0,1,1,2,2,2,2,5,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,1, 0,3,2], "nombre": "Total"}]}}]]]]] 388 [[154, ["rt", [{"ot: 0: 0: 4": {"timeUnit": " MINUTES "," overTimeData ": [{" valores ": [53,53,52,40,42,55,49,51,52,47,42,62,82,76,71,81,66, 81,86,71,66,65,65,55,51,53,73,71,81], "name": "Total"}}}, "ot: 0: 0 : 3 ": {" timeUnit ":" SEGUNDOS "," overTimeData ": [{" valores ": [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,1, 2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0,1,1,0,3], "name": " Total "}]}}]]]]
¡Avísame si puedes ayudar con alguno de los artículos anteriores!
Necesitaba / quería datos en tiempo real para uso personal, por lo que diseñé un poco su sistema de ingeniería inversa.
En lugar de vincular a /bind
, obtengo datos de /getData
(no se pretende hacer un juego de palabras).
/getData
la solicitud mínima es: https://www.google.com/analytics/realtime/realtime/getData?pageId&key={{propertyID}}&q=t:0|:1
Aquí hay una breve explicación de los posibles parámetros de consulta y la sintaxis, recuerde que estas son todas las conjeturas y no las conozco todas:
Sintaxis de la consulta: pageId&key=propertyID&q=dataType:dimensions|:page|:limit:filters
Valores:
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
También puede combinar varias consultas en una solicitud por coma separándolas (es decir, q=t:1|2|:1|:10,t:6|:1|:10
).
Siguiendo la "documentación" anterior, si desea crear una consulta que solicite la URL de la página y la ciudad de los 10 principales visitantes activos con un tipo de fuente de tráfico CUSTOM ubicado en los Estados Unidos, usaría esta URL: https://www.google.com/analytics/realtime/realtime/getData?key={{propertyID}}&pageId&q=t:10|2|:1|:10:6==CUSTOM;1==United%20States
Espero que mi respuesta sea legible y (aunque sea un poco tarde) responda suficientemente su pregunta y ayude a otros en el futuro.
Para conseguir lo mismo, Google ha lanzado la nueva API en tiempo real. Con esta API puede recuperar fácilmente visitantes en línea en tiempo real, así como varios Google Analytics con las siguientes dimensiones y métricas. https://developers.google.com/analytics/devguides/reporting/realtime/dimsmets/
Esto es bastante similar a la API de Google Analytics. Para iniciar el desarrollo de esto, https://developers.google.com/analytics/devguides/reporting/realtime/v3/devguide
Tener google en el bucle parece bastante redundante. Sugiera que use un elemento común entregado desde el servidor del tablero de mandos e incluya este elemento mediante una URL absoluta en todas las páginas que se monitorearán para un sitio determinado. La secuencia de comandos que genera el elemento puede leer la IP del buscador y todos ellos pueden iniciar sesión en una base de datos y filtrarse para obtener un carácter único, lo que permite un recuento de cabezas en tiempo real.
<?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: una base de datos también puede agregar una marca de tiempo a cada fila de datos que almacena. Esto se puede usar para filtrar aún más los resultados y proporcionar el número de visitantes en la última hora o minuto.
Javascript del lado del cliente con AJAX para un ajuste fino o excesivo Los comandos onblur y onfocus de javascript se pueden usar para saber si la página está visible, pase los datos al servidor del tablero de instrumentos a través de Ajax. http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/
Cuando un visitante cierra una página, esto también puede ser detectado por la función javascript onunload en la etiqueta del cuerpo y Ajax puede usarse para enviar datos al servidor una última vez antes de que el navegador finalmente cierre la página.
Como es posible que también desee recopilar información sobre el visitante, como Google analytics, esta página https://panopticlick.eff.org/ tiene una gran cantidad de javascript que se puede examinar y adaptar.