entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Duda en la forma de llevar las Estadísticas de mi Sitio Web

Hola Comunidad, el 28 de Noviembre del 2014 realicé esta pregunta cuando comenzaba a programar el sitio que casi termino la cual fue contestada por el maestro @Leonardo-Tadei actualmente ya tengo echa una buena normalización y diagrama entidad-relación de mi database y mientras termino los módulos enfocado en la administración de los datos CRUD de mi sitio tengo que hacerle una forma de llevar mis estadísticas y almacenarla en la database para luego mostrarla en visual para análisis con D3.JS y hacerle minería de datos para sugerencias predicciones y demas que se me ocurra de divertido jejejej.

Entonces a la hora de manejar mis datos no estoy seguro de como llevarlos y que dato podré obtener para enviar a mi api-rest desde Javascript con Angularjs 1.X tenía pensado hacer una conexión que enviarla el bloque de datos a mi api-rest como hace google analitycs para luego su análisis pero no se bien que hacer.

Los Datos que quiero tener son los siguientes:

  • Duración del visitante en la página que está visitando.
  • Dirección de la página que está visitando.
  • Desde donde fue que llegó a esta página.
  • Resolución del dispositivo que usa.
  • Fecha de la visita.
  • Momento en que comenzó la visita [hora:min:seg]

He pensado guardar todos esos datos en una única tabla para en un futuro migrarla para una db en MongoDB, pero bueno esa es mi idea y me gustaría conocer que piensan los más experimentados y si tienen alguna sugerencia o algo que me ayude.

Saludos Dairon.

PD: Mi api-rest actualmente está en php pero realmente ya me estroy preparando para aprender python y montarla en DJango.

0voto

bl4z3r comentado

¿Podrías definirme, dentro de tu negocio, que seria un visitante?

1voto

dairon comentado

bueno el sitio que estoy desarrollando es de noticias de una emisora local, actualmente hice este hace unos meses http://www.radiosantacruz.icrt.cu pero estoy trabajando en uno con api-rest y demas cosas.

1 Respuesta

2votos

bl4z3r Puntos16850

Bueno, viendo la pagina que pusiste en tu comentario, puedo deducir que un visitante es literalmente eso, incluyendo a los usuarios, si en un futuro se tiene la funcionalidad de registrar a los mismos.

Para hacer lo que quieres, es necesario que guardes los datos en cookies usando JS en un principio y, despues, veas el tema de actualizar los registros de la base de datos de alta performance, que despues hablaremos de eso.

En un principio vamos a contextualizar para dar sentido a la solución:

¿Que es un visitante?

El visitante es todo aquella computadora que esta conectada a Internet con una IP especifica a través de un ISP y que visita la pagina en cuestión. Cuando esta PC se desconecta y se vuelva a conectar, pueden ocurrir dos cosas:

  • Que mantenga su dirección IP,
  • Que se renueve la dirección IP.

Independientemente de estos dos comportamiento, vamos a considerar y asumir lo siguiente: Un visitante es toda aquella PC que visita el sitio con una IP determinada y, cuando su IP cambia por alguna razón, se lo considera un nuevo visitante.
Ademas, debemos considerar el comportamiento de una persona a la hora de usar un PC. Por lo general, uno enciende y usa la computadora durante el día y, por la noche, se apaga. Este punto es importante para determinar correctamente si entra un nuevo usuario o no y esto se debe por lo siguiente:

  1. En la fecha 1/1/2001 con IP 1.1.1.1 visita la web.
  2. En la fecha 2/1/2001 con IP 1.1.1.1 visita la web.

Entonces se plantea las siguientes dudas: La misma IP visito el sitio 2 días consecutivos. ¿Es la misma PC que visito el sitio o son 2 PC diferentes?.
Porque puede darse que la persona que uso ese PC haya apagado la computadora por la noche y cuando se conecte de nuevo tenga una IP nueva. Pero tambien puede darse que esa persona no se haya desconectado por que dejo la computadora toda la noche encendida. En ese caso, es el mismo usuario pero en el anterior no. También esta la opción de que si haya apagado la computadora pero el router este encendido siempre y entonces, este mantenga la IP hasta que se apague o reseteé.

Desde mi punto de vista, habiendo planteado todo lo anterior, yo consideraría que:

Un visitante es una computadora con una IP determinada en un día determinado. Si al siguiente día, la misma IP se visita el sitio, se lo debería considerar como un visitante nuevo".

Posibles soluciones

En un principio, muchos de los datos que recolectas están del lado del cliente, o sea, el navegador. Por ende, recomendaría que captures la mayoría de los datos con JS y los guardes en cookies. Hay ciertas cosas, que posiblemente necesiten procesamiento por parte del servidor y se necesite una implementación híbrida para satisfacer las necesidades del sitio.
Voy a re-ordenar (y agregar) las necesidades por orden de implementación, para sea mas fácil, despues, integrar todo.

Aclaro, de entrada, que la cookie DEBE EXPIRAR en UN DÍA.

IP del navegador que me visita (la necesidad que quiero que agregues)
Esto es medio "tricky" ya que JS no lo podes hacer. Una manera para hacerlo es:

  1. Cuando el cliente solicita una pagina, por lo general, el servidor sabe desde donde se solicita.
  2. El servidor toma la IP del cliente y la guarda en una variable.
  3. Escribe ese variable en un input del tipo hidden en alguna lugar del sitio.
  4. Se renderiza la pagina donde ya se escribió la IP del cliente.
  5. JS lee ese input y lo guarda en una cookie.

Fecha de la visita y Momento en que comenzó la visita [hora:min:seg]

  1. Obtienes la desde el momento entra al sitio por primera vez. Esto es por que, cuando entra por primera vez al sitio no existe el cookie.
  2. La transformas a UTC.
  3. La guardas en el cookie.

Seria algo así:

var currentDate = new Date().now().toUTCString();
document.cookie = "entro:" + currentDate + "; ";

Desde donde fue que llegó a esta página.
Esto se puede conseguirse desde el campo referer la cabecera HTTP o desde el mismo JS con document.referer.

Resolución del dispositivo que usa.
Con las miembros del objeto screen: window.screen.width y window.screen.height.

Duración del visitante en la página que está visitando
Para esto, te diría que siempre guardes en la fecha de actual pagina visitada dentro del mismo dominio. Y despues puedes obtener el tiempo total de visita haciendo una simple resta:
[FechaHoraDeUltimaPaginaVisitadaDelDominio] - [FechaHoraDePrimerVisita].
Acá hay que ver un problema por que se plantea la siguiente duda: ¿Que pasa si el usuario en un día entra repetida veces pero en intervalos de tiempo?
Por ejemplo: De 9 a 10, 12 a 13, 17 a 18, 21 a 20.
Con la formula anterior el total de tiempo visitado nos daría 20 - 9 = 11 cuando en realidad el usuario estuvo: (10 - 9) + (13 - 12) + (18 - 17) + (21 -20) = 4.
Acá se debería aplicarse un umbral en el algoritmo de tiempo total de visita. Pongamos que el umbral sea que despues de 30 minutos(especulo, exageradamente, que una persona no puede permanecer en una pagina mas de 30 minutos).
Entonces quedaría algo así(en psuedo-código):

SI dia.ahora() - fechaHoraDeUltimaPaginaVisitada > 30 ENTONCES
    primeraVisita = dia.Ahora();
    fechaHoraDeUltimaPaginaVisitada = vacio;
SINO
    fechaHoraDeUltimaPaginaVisitada = dia.Ahora();
FIN SI

Ahora viene lo complicado...

Persistiendo las estadísticas

Recomiendo el uso obligatorio de AJAX para estas necesidades, debido a las posible sobrecarga del servidor debido a las repetidas y continuas llamadas de múltiples visitantes a guardar estos datos.

0voto

dairon comentado

Yo creo que sería mejor usar localstore para guardar una variable en el visitante y así comprovar si es nuevo o no, lo otro es que me interesa más el dominar las estadísticas para hacer seguimiento y probabilidades de conocer cuantos visitantes podría tener una noticia antes de ser publicada.
Lo de si es nuevo o no no me preocupa realmente mucho sino saber desde donde llegó para evaluar los links externos o el seo orgánico que se ha generado así como el alcance y cuantos me llegan desde redes sociales

0voto

bl4z3r comentado

Disculpa, @dairon . El sitio no me permite realizarte extender mas la pregunta por alguna razón. Debe ser un bug del sistema. Si te interesa, puedo terminar tu respuesta en una entrada de mi blog. Te parece?

0voto

dairon comentado

puedes hacerlo, pero no te centres en lo de las ip sino en los browser

1voto

Peter comentado

@bl4z3r @dairon Respuesta editada con la totalidad del contenido.

0voto

bl4z3r comentado

@dairon en mi blog me tomé mas tiempo para explicarlo. Si deseas, date una vuelta: Implementación de estadísticas de sitio web

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta