Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Contador de visitas avanzado

Estas en el tema de Contador de visitas avanzado en el foro de PHP en Foros del Web. Buenas. Quisiera hacer un contador de visitas en el que no se sumara una visita cada vez que le das a actualizar. Me explico, se ...
  #1 (permalink)  
Antiguo 04/02/2014, 03:29
 
Fecha de Ingreso: abril-2013
Ubicación: Barcelona
Mensajes: 78
Antigüedad: 7 años
Puntos: 2
Contador de visitas avanzado

Buenas.

Quisiera hacer un contador de visitas en el que no se sumara una visita cada vez que le das a actualizar.

Me explico, se hacer un contador de visitas pero es el de añadirle 1 a las visitas que ya habían cada vez que abres la pagina, también se como puedo coger la ip del usuario y decirle que si ya la a visitado hoy que no le sume a las visitas.

Es mas me estoy adaptando uno que vi en una de las respuestas de este foro buscando lo que necesito.
Código PHP:
<?php 
include "conexion.php"
include 
"geoiploc.php"

$fecha=time(); 
$fecha_formatdate "Y/m/d" $fecha ); 
$hora_format=date("H:i:s"$fecha); 

$ip $_SERVER["REMOTE_ADDR"]; 
$pagina=$_SERVER["REQUEST_URI"]; 
$pagina_viene=$_SERVER["HTTP_REFERER"]; 

$paisgetCountryFromIP($ip" NamE "); 

$sql="INSERT INTO visitas SET ip='$ip', fecha='fecha_format', hora='hora_format', pagina='$pagina', viene='$pagina_viene', pais='$pais'"

mysql_query($sql); 
?>
Lo malo es que con $ip = $_SERVER["REMOTE_ADDR"]; si le digo que si ya la a visitado hoy no se cuente mas por hoy, me quita a todos los ordenadores que estén dentro de su red y quisiera tener algo mas especifico.

De momento la única solución que le veo es hacerlo con una cookie que guarde el día y caduque en 24 horas.
Si el día es el mismo no se suma la visita y si es diferente se suma y de esta forma se cuenta por equipos.

¿Hay mas formas de hacerlo?
  #2 (permalink)  
Antiguo 04/02/2014, 08:48
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 7 años, 1 mes
Puntos: 8
Respuesta: Contador de visitas avanzado

Hola Sekafry, te comento, para hacer un buen contador de visitas "reales", tenés que tener en cuenta muchos factores.

Por ejemplo, si sabés lo que son los "bots, spiders". Sabrías que los indexadores como google revisan todos los sitios, y estas visitas cuentan como visitas, facebook también. Y asi.

Para distinguir entre ordenadores, tenés que usar cookies. Las cookies son únicas por navegador y por computador. Es decir si tenes 4 navegadores diferentes, y visitas con los 4 tendrías 4 visitas. Es la única falla! :P Pero esta bien, y es lo más aproximado.

Otra cosa, tenés que asegurarte que el visitante puede y tiene cookies activadas, sino, contaría todas las veces que refresque la web.

A los bots los ubicas por los USER_AGENT.. Por ejemplo Google firma sus visitas con Googlebot, de esa forma sabrías.

Es algo amplio. Yo he realizado para mis clientes un sistema de visitas, que diferencia navegadores, versiones, OS, resolución de pantalla, contabiliza aparte las visitas de Google, las visitas de Facebook, pero no es algo sencillo. Hay que revisar todas las fugas que el sistema tiene para darlo por finalizado.

Suerte con eso!
  #3 (permalink)  
Antiguo 04/02/2014, 09:39
 
Fecha de Ingreso: abril-2013
Ubicación: Barcelona
Mensajes: 78
Antigüedad: 7 años
Puntos: 2
Respuesta: Contador de visitas avanzado

Muchas gracias por tu sorprendente respuesta.
Voy a buscar todo lo que me as comentado ya que no se como hacer para contar por navegadores como dices, ni otras cosas de las que as dicho.
Ni me ayudas un poco aportando un poco del código necesario seria de gran ayuda =P
Muchas gracias de nuevo por compartir tus conocimientos.

Edito: He leído sobre googlebot, en mi pagina web solo hay una pagina que es la index.php y después se va cambiando el contenido dependiendo de si tienes una session o si tiene una variable GET en la url, mi duda es, si encuentra un enlace que lleve a http://url/?id=1273 ¿la indexa? ¿la visita el googlebot?, ya que no me importa que visite el index.php sin mas pero las demás no quiero que las visite, y si las visitas quisiera saber si se puede bloquear con el archivo robots.txt
De esta forma:
User-agent: *
Disallow: /*

Última edición por sekafry; 04/02/2014 a las 10:10
  #4 (permalink)  
Antiguo 04/02/2014, 10:25
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 7 años, 1 mes
Puntos: 8
Respuesta: Contador de visitas avanzado

Cita:
Iniciado por sekafry Ver Mensaje
Muchas gracias por tu sorprendente respuesta.
Voy a buscar todo lo que me as comentado ya que no se como hacer para contar por navegadores como dices, ni otras cosas de las que as dicho.
Ni me ayudas un poco aportando un poco del código necesario seria de gran ayuda =P
Muchas gracias de nuevo por compartir tus conocimientos.

Edito: He leído sobre googlebot, en mi pagina web solo hay una pagina que es la index.php y después se va cambiando el contenido dependiendo de si tienes una session o si tiene una variable GET en la url, mi duda es, si encuentra un enlace que lleve a http://url/?id=1273 ¿la indexa? ¿la visita el googlebot?, ya que no me importa que visite el index.php sin mas pero las demás no quiero que las visite, y si las visitas quisiera saber si se puede bloquear con el archivo robots.txt
De esta forma:
User-agent: *
Disallow: /*
Exactamente debes bloquear las visitas a las url que tengan parametros GET.

Mira, te doy un ejemplo de cómo sacar que OS es, y te pones a aprender bien el todo de user_agent..

Código PHP:
Ver original
  1. $agente     = strtolower($_SERVER['HTTP_USER_AGENT']);
  2.         $plataforma = "Desconocida";
  3.        
  4.         # Obtenemos el OS
  5.        if (strpos($agente,'android') !== false){
  6.             $plataforma = 'Android';
  7.         }elseif (strpos($agente,'linux') !== false){
  8.             $plataforma = 'Linux';
  9.         }elseif (strpos($agente,'macintosh') !== false){
  10.             $plataforma = 'Mac';
  11.         }elseif (strpos($agente,'windows') !== false){
  12.             $plataforma = 'Windows';
  13.         }elseif (strpos($agente,'win') !== false){
  14.             $plataforma = 'Windows';
  15.         }

De la misma forma tenés que averiguar que navegador es y demás.. Proba y probá si en algo te trabás consultás! :)

Suerte!
  #5 (permalink)  
Antiguo 04/02/2014, 12:59
 
Fecha de Ingreso: abril-2013
Ubicación: Barcelona
Mensajes: 78
Antigüedad: 7 años
Puntos: 2
Respuesta: Contador de visitas avanzado

Para probar he ejecutado en mi sistema esto:
Código PHP:
<?php 
 
echo $_SERVER['HTTP_USER_AGENT'];
 
?>
y me aparece esto:
Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36

Estoy usando Linux y Chrome pero me sale también mozilla y safari ¿por que?
  #6 (permalink)  
Antiguo 04/02/2014, 13:25
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 7 años, 1 mes
Puntos: 8
Respuesta: Contador de visitas avanzado

Cita:
Iniciado por sekafry Ver Mensaje
Para probar he ejecutado en mi sistema esto:
Código PHP:
<?php 
 
echo $_SERVER['HTTP_USER_AGENT'];
 
?>
y me aparece esto:
Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36

Estoy usando Linux y Chrome pero me sale también mozilla y safari ¿por que?
Asi es casi siempre va a aparecer esos dos, pero. NO es relevante, por eso hay un órden de comprobación.

Primero comprobá si contiene la palabra 'msie' (Explorer), despues:
- 'firefox'
- 'chrome'
- 'safari'
- 'opera'


:)

Así evitas que te digan que es porejemplo safari sin que lo sea...

Suerte!
  #7 (permalink)  
Antiguo 04/02/2014, 13:32
 
Fecha de Ingreso: abril-2013
Ubicación: Barcelona
Mensajes: 78
Antigüedad: 7 años
Puntos: 2
Respuesta: Contador de visitas avanzado

Muchas gracias por resolver mis dudas.

En php.net hay un código muy bueno que me va a resultar muy útil.

Lo dejo aquí por si alguien lo necesita.
Código PHP:
<?php
function getBrowser() 

    
$u_agent $_SERVER['HTTP_USER_AGENT']; 
    
$bname 'Unknown';
    
$platform 'Unknown';
    
$version"";

    
//First get the platform?
    
if (preg_match('/linux/i'$u_agent)) {
        
$platform 'linux';
    }
    elseif (
preg_match('/macintosh|mac os x/i'$u_agent)) {
        
$platform 'mac';
    }
    elseif (
preg_match('/windows|win32/i'$u_agent)) {
        
$platform 'windows';
    }
    
    
// Next get the name of the useragent yes seperately and for good reason
    
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
        
$bname 'Internet Explorer'
        
$ub "MSIE"
    } 
    elseif(
preg_match('/Firefox/i',$u_agent)) 
    { 
        
$bname 'Mozilla Firefox'
        
$ub "Firefox"
    } 
    elseif(
preg_match('/Chrome/i',$u_agent)) 
    { 
        
$bname 'Google Chrome'
        
$ub "Chrome"
    } 
    elseif(
preg_match('/Safari/i',$u_agent)) 
    { 
        
$bname 'Apple Safari'
        
$ub "Safari"
    } 
    elseif(
preg_match('/Opera/i',$u_agent)) 
    { 
        
$bname 'Opera'
        
$ub "Opera"
    } 
    elseif(
preg_match('/Netscape/i',$u_agent)) 
    { 
        
$bname 'Netscape'
        
$ub "Netscape"
    } 
    
    
// finally get the correct version number
    
$known = array('Version'$ub'other');
    
$pattern '#(?<browser>' join('|'$known) .
    
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
    if (!
preg_match_all($pattern$u_agent$matches)) {
        
// we have no matching number just continue
    
}
    
    
// see how many we have
    
$i count($matches['browser']);
    if (
$i != 1) {
        
//we will have two since we are not using 'other' argument yet
        //see if version is before or after the name
        
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            
$version$matches['version'][0];
        }
        else {
            
$version$matches['version'][1];
        }
    }
    else {
        
$version$matches['version'][0];
    }
    
    
// check if we have a number
    
if ($version==null || $version=="") {$version="?";}
    
    return array(
        
'userAgent' => $u_agent,
        
'name'      => $bname,
        
'version'   => $version,
        
'platform'  => $platform,
        
'pattern'    => $pattern
    
);


// now try it
$ua=getBrowser();
$yourbrowser"Your browser: " $ua['name'] . " " $ua['version'] . " on " .$ua['platform'] . " reports: <br >" $ua['userAgent'];
print_r($yourbrowser);
?>

Etiquetas: avanzado, contador, fecha, mysql, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:20.