with tutorial scraping pricing plugin google extensions chrome apify apifier ajax google-analytics screen-scraping web-scraping google-analytics-api

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:

  1. Averiguar cómo autenticar mediante programación
  2. 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

  3. 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


Documentation

Documentacion 2


Espero que mi respuesta sea legible y (aunque sea un poco tarde) responda suficientemente su pregunta y ayude a otros en el futuro.



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.