Contar visitas al día.
Resumen.
Tener información clara y precisa sobre como evoluciona el trafico de nuestro sitio Web es algo fundamental, tanto que ni siquiera hay que explicarlo. Un problema que se suele presentar es que, aunque tenemos un registro de las visitas, muchas veces este valor no es relevante. El motivo que descubriremos es sencillo, si tenemos una publicación con 10.000 visitas y otra con 5.000, ¿cuál de las dos tiene mas tráfico?Artículo.
En términos absolutos no podemos decir que una publicación tiene más tráfico que otra únicamente en función del número de visitas registradas en nuestra base de datos. Alguien se preguntará ¿cómo que no? Pues no, y el motivo es mas que obvio, si una publicación tiene 10.000 visitas y otra tiene 5.000, de entrada la primera tiene mucho mas tráfico, pero si tenemos en cuenta que la primera se publico hace 10 meses y la segunda es de hace 20 días, las cosas cambian bastante, así tenemos:
Pues bien, de esto nos vamos a encargar en este artículo. Damos por supuesto que nuestras publicaciones se almacenan en una base de datos donde se recoge la fecha de registro de cada publicación y también tenemos un campo que anota las visitas, cada vez que un usuario entra, suma 1 al campo visitas de nuestra tabla de datos.
Hacer esto es sencillo, solo tenemos que recoger las visitas acumuladas hasta ese momento, como vimos en extraer filas y seguidamente a ese valor sumar 1, y actualizar ese campo, como vimos aquí. De igual manera que extrajimos las visitas, extraemos la fecha de publicación del artículo en cuestión con una consulta como esta:
Y con esta consulta, ya tenemos los dos datos que precisamos para hacer el cálculo objeto de interés.
Ahora viene una pregunta clave y es ¿cómo tenemos guardada la fecha de registro? Se puede decir que básicamente tenemos dos posibilidades: la primera y que mas fácil nos lo pondría todo, seria tenerla guardada como fecha Unix, dada por la función time().
En este caso, vamos a tener que pasar esta fecha a fecha Unix, lo demás, es seguir el mismo procedimiento.
La función seria la siguiente:
La función gmmktime() es la que nos permite cambiar una fecha expresada de manera convencional (2022-12-03 14:23) a fecha Unix (fecha en segundos). La función gmmktime(hora, minuto, segundo, mes, dia, año) recibe 6 parámetros, si alguno no estuviera incluido en nuestra fecha, como en este caso, los segundos, lo podemos dejar a 0, o bien, ponerlo a 30, que es el punto medio, eso ya es una decisión particular de cada uno.
Restando a la fecha Unix actual la de publicación, ya tenemos los segundos transcurridos, que si los dividimos por 3600 segundos que tiene una hora y 24 horas que tiene un día, ya tenemos el número de días que lleva la publicación en activo. Y ahora ya si que tenemos un valor adecuado para comparar el éxito de las diferentes publicaciones de nuestro sitio Web.
Lo siguiente seria crear un nuevo campo en nuestra tabla de datos y guardar el nuevo valor obtenido. Este campo podría ser de tipo DOUBLE, que permite valores decimales. Respecto a los decimales, recomiendo que se conserven todos en la tabla, luego si nos parece, los podemos redondear al número de decimales que nos parezca para la presentación en pantalla.
Por ultimo vamos a comentar un efecto estadístico que puede hacernos pensar que esta función sobreestima los datos de tráfico de un artículo.
Este efecto estadístico se va corrigiendo con el paso de los días en función del tráfico de la Web, entre 24 y 72 horas esta normalizado, aunque puede requerir algo mas de tiempo.
Para prevenir este efecto podemos tomar alguna medida, como por ejemplo un condicional que detecte cuando nosotros estamos conectados, y en función de nuestro nombre de usuario, no agregue nuevas visitas. También podemos guardar la IP de la última visita, y no sumar la visita si la IP es la misma.
10 meses = 300 días 10000/300 = 30 visitas al día.Ahora si vemos claramente que el primer artículo tiene casi 10 veces menos tráfico que el segundo, y es ahora cuando no nos engañan los números.
20 días 5000/20 = 250 visitas al día.
Pues bien, de esto nos vamos a encargar en este artículo. Damos por supuesto que nuestras publicaciones se almacenan en una base de datos donde se recoge la fecha de registro de cada publicación y también tenemos un campo que anota las visitas, cada vez que un usuario entra, suma 1 al campo visitas de nuestra tabla de datos.
Hacer esto es sencillo, solo tenemos que recoger las visitas acumuladas hasta ese momento, como vimos en extraer filas y seguidamente a ese valor sumar 1, y actualizar ese campo, como vimos aquí. De igual manera que extrajimos las visitas, extraemos la fecha de publicación del artículo en cuestión con una consulta como esta:
Donde la variable $cod_articulo es la clave primaria o valor único que identifica esa artículo en la tabla.$_Consul_Fila = "SELECT fecha_reg, visitas FROM $tb5 WHERE cod_articulo = '$cod_articulo' LIMIT 1";
Y con esta consulta, ya tenemos los dos datos que precisamos para hacer el cálculo objeto de interés.
Ahora viene una pregunta clave y es ¿cómo tenemos guardada la fecha de registro? Se puede decir que básicamente tenemos dos posibilidades: la primera y que mas fácil nos lo pondría todo, seria tenerla guardada como fecha Unix, dada por la función time().
La segunda es tenerla como una fecha convencional o gregoriana, 15-02-2023.$segundos_transcurridos = time() - $fecha_unix; $dias_transcurridos = ($segundos_transcurridos / 3600) / 24; $visitas_por_dia = $visitas / $dias_transcurridos;
En este caso, vamos a tener que pasar esta fecha a fecha Unix, lo demás, es seguir el mismo procedimiento.
La función seria la siguiente:
La función date_format() nos va a permitir extraer los datos de nuestra fecha, para lo cual precisa de ciertos parámetros que están recogidos aquí.<?php // Desarrollado por ArtesaniaWeb.ES // Mas info en: https://www.artesaniaweb.es/articulo.php?titulo=contar_visitas_al_dia-h62ao // Calcula las visitas por dia recibidas en una pagina function VisitasDia($Fecha,$visitas){ $fecha = date_create($Fecha); $anio = date_format($fecha,'Y'); $mes = date_format($fecha,'n'); $dia = date_format($fecha,'j'); $hora = date_format($fecha,'G'); $minuto = date_format($fecha,'i') * 1; // gmmktime(hora, minuto, segundo, mes, dia, año) $fecha_unix = gmmktime($hora, $minuto, 0, $mes, $dia, $anio); $segundos_transcurridos = time() - $fecha_unix; $dias_transcurridos = ($segundos_transcurridos / 3600) / 24; $visitas_por_dia = $visitas / $dias_transcurridos; return $visitas_por_dia; } // Aplicamos la funcion $fecha_publicacion = '2022-12-03 14:23'; $visitas = 10575; $visitas_por_dia = VisitasDia($fecha_publicacion,$visitas); echo "$visitas_por_dia visitas al dia"; ?>
La función gmmktime() es la que nos permite cambiar una fecha expresada de manera convencional (2022-12-03 14:23) a fecha Unix (fecha en segundos). La función gmmktime(hora, minuto, segundo, mes, dia, año) recibe 6 parámetros, si alguno no estuviera incluido en nuestra fecha, como en este caso, los segundos, lo podemos dejar a 0, o bien, ponerlo a 30, que es el punto medio, eso ya es una decisión particular de cada uno.
Restando a la fecha Unix actual la de publicación, ya tenemos los segundos transcurridos, que si los dividimos por 3600 segundos que tiene una hora y 24 horas que tiene un día, ya tenemos el número de días que lleva la publicación en activo. Y ahora ya si que tenemos un valor adecuado para comparar el éxito de las diferentes publicaciones de nuestro sitio Web.
Lo siguiente seria crear un nuevo campo en nuestra tabla de datos y guardar el nuevo valor obtenido. Este campo podría ser de tipo DOUBLE, que permite valores decimales. Respecto a los decimales, recomiendo que se conserven todos en la tabla, luego si nos parece, los podemos redondear al número de decimales que nos parezca para la presentación en pantalla.
Por ultimo vamos a comentar un efecto estadístico que puede hacernos pensar que esta función sobreestima los datos de tráfico de un artículo.
Aquí podemos ver que el cálculo de visitas se realiza segundo a segundo, por tanto, si el artículo acaba de ser publicado y entramos en él para verificar que todo esta correcto, seria fácil que en pocos minutos hiciéramos varias entradas, por lo que si en los 10 minutos siguientes hiciéramos 5 entradas, la función calcularía 30 por hora, y 30 * 24 = 720 al día, lo cual podría hacer que el artículo que se acaba de publicar apareciera como el mas visto.$segundos_transcurridos = time() - $fecha_unix; $dias_transcurridos = ($segundos_transcurridos / 3600) / 24;
Este efecto estadístico se va corrigiendo con el paso de los días en función del tráfico de la Web, entre 24 y 72 horas esta normalizado, aunque puede requerir algo mas de tiempo.
Para prevenir este efecto podemos tomar alguna medida, como por ejemplo un condicional que detecte cuando nosotros estamos conectados, y en función de nuestro nombre de usuario, no agregue nuevas visitas. También podemos guardar la IP de la última visita, y no sumar la visita si la IP es la misma.
Tags: Contador || visitas || tráfico || gmmktime || date_format || time