Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Necesito Ayuda con Contador de Perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Sab Nov 12, 2005 9:54 am
mydaboin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
Necesito Ayuda con Contador de Perl Responder citando

Hola, estuve viendo su contador de perl y otros más, inclusive estuve tratando de enterder el codigo de AWStats, he conseguido que guarde el numero de IP, el navegador, el Host y la fecha y hora.

Pero aún no he podido saber exactamente como incluir en mi archivo.dat, el nombre de los links internos, es decir, todos los .pl, imagenes, html que utiliza mi pagina u otras paginas de las cuales manejo.

aqui les dejo mi .PL.. como dije funciona guarda realiza el conteno de las visitas a la pagina principal.. pero de allí no pasa no cuenta si el usuario visita otro link...

es primera vez que manejo esta área en Perl, siempre he trabajado en el área interna, no se manejar el área externa de la web, es decir lo que hacen los visitantes al entrar a la misma..


me gustaria su ayuda gracias... Very Happy

Nota: este .pl es para guardar.. existe otro que mostrará en eso estoy más entrenada ya que es un uso interno de cada usuario para ver la estadisticas de su respectiva pagina y pues esa es mi área el manejo de la base de datos y mostrar su contenido Very Happy

#!/usr/bin/perl

print "Content-type: text/html\nPragma: no cache\n\n";
use CGI;
$req = new CGI;
$listado = $req->param("listado"); # aqui estan todos los enlaces de las paginas que manejo, ejemplo www.800guia.com/ansa
$volumen = $req->param("volumen");
$linkimg = $req->param("linkimg");
$mostrar_fecha = $req->param("mostrar_fecha");
$mostrar_banner = $req->param("mostrar_banner");
$vermenu = $req->param("vermenu");
@campos=("codigo","empresa","direccion","tlf","fax","email","www","colortexto","filter","colorlink","nosotros","claves","contacto","gerente","vendedor") # corte los campos son muchos Laughing Laughing Laughing y daña para mostrar la información Rolling Eyes
@colordef=("colorbanda","colortexto","colorlink","colorfondo","colortitulo","colorbotones");
@colorval=("eeeeee","black","green","white","navy","blue");
$codigo=$listado;
$archivo="../db/guia/empresas.dat";
open (DATOS, "$archivo") || &Error ($!, "$archivo");
while($linea=<DATOS>){
chop $linea;
@matriz=split("\t",$linea);
$cod=$matriz[0];
if ($cod eq $codigo){
$x=0;
foreach $item (@campos){
$$item=$matriz[$x];
$x++;
}
$x=0;
foreach $item (@colordef){
if ($$item eq ""){
$nam=$colorval[$x];
$$item=$nam;
}
$x++;
}
$claro="CCCCCC";
$oscuro="555555";
close DATOS;
}
}
close DATOS;

$ip = $ENV{'REMOTE_ADDR'};
$browser = $ENV{'HTTP_USER_AGENT'};
#$plboton = $ENV{'SCRIPT_ NAME'}; no lee el .pl, es decir, no hace NADA Sad
$user = $ENV{'REMOTE_USER'};
$id = $ENV{'REMOTE_IDENT'};

$archivo_estadistica="../db/$listado/estadistica.dat";# Aqui guardo la información de las visitas.
my ($ip_address,$ip_number,@numbers);
if ($ENV{'REMOTE_HOST'}) {
$host = $ENV{'REMOTE_HOST'};
} else {
$ip_address = $ENV{'REMOTE_ADDR'};
@numbers = split(/\./, $ip_address);
$ip_number = pack("C4", @numbers);
$host = (gethostbyaddr($ip_number, 2))[0];
}
if ($host eq "") {
$host = "$ENV{'REMOTE_ADDR'}";
}
if ($plboton ne ""){
$botones=$plboton;
}
if ($id ne ""){
$idcont=$id;
}
if ($browser ne ""){
$browcont=$browser;
}
if ($user ne ""){
$usercont=$user;
}
if ($ip ne ""){
$ipcont=$ip;
}
$fecha=&Fecha;
$archivo_contador="../db/$listado/contestad.dat";
if (-e $archivo_estadistica){
open (TEMPORAL, "$archivo_estadistica") || &Error ($!, "$archivo_estadistica");
@mat=<TEMPORAL>;
close TEMPORAL; # esto es para que cuando incluya una nueva visita, quede guardado la información anterior.
}
if (-e $archivo_contador){
open (CONTADOR, "$archivo_contador") || &Error ($!, "$archivo_contador");
@numero=<CONTADOR>;
$contador=$numero[0]+1;
close CONTADOR;
open (CONTADOR, ">$archivo_contador") || &Error ($!, "$archivo_contador");
print CONTADOR "$contador";
close CONTADOR;
}else{
open (CONTADOR, ">$archivo_contador") || &Error ($!, "$archivo_contador");
print CONTADOR "1";
close CONTADOR;
}
open (ESTADISTICA, ">$archivo_estadistica") || &Error ($!, "$archivo_estadistica"); # se borra el archivo se incluye la nueva visita y luego se pega el archivo temporal para que esten debajo de la nueva los demás, de esa manera siempre el primer archivo sera el ultimo visto ordenado de manera descendete.
print ESTADISTICA "$contador\t"; # sirve, guarda el numero de visita
print ESTADISTICA "$ipcont\t"; # sirve, muestra el ip
print ESTADISTICA "$botones\t"; # no hace nada Rolling Eyes
print ESTADISTICA "$imageurl\t"; # mucho menos que nada Rolling Eyes , debería mostrarme el archivo donde se encuentra la imagen, si me ayudan en esto no me quejaria Very Happy
print ESTADISTICA "$browcont\t"; # sirve, muestra el navegador utilizado y el sistema operativo
print ESTADISTICA "$idcont\t"; # no hace nada Rolling Eyes
print ESTADISTICA "$host\t"; # sirve, muestra el ip junto al host
print ESTADISTICA "$fecha\n"; # sirve, aunque esta atrasado por una hora Confused Confused Confused
print ESTADISTICA @mat;
close ESTADISTICA;
exit 0;
#==========================================================================
# Funcion Obtener la fecha y la hora del servidor
#==========================================================================
sub Fecha {
@days = ('Domingo','Lunes','Martes','Miercoles','Jueves','Viernes','Sabado');
@months = ('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');
($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
local ($ampm) ;
if ($hour > 12) {
$hour -= 12 ;
$ampm = 'pm';
}else{
$ampm = 'am'
}
$hora = sprintf("%02d:%02d",$hour,$min);
$time = "$hora $ampm";
$year += 1900;
$date = "$days[$wday] $mday de $months[$mon], $year - $hora $ampm";
return ("$date");
}
#==========================================================================
# funcion Error de archivo
#==========================================================================
sub Error{
print "Archivo: $_[1] / Error: $_[0]";
exit;
}
#===============================================================================
sub Banner{
#===============================================================================
$arch="../db/guia/empresas.dat";
open (BANNER, "$arch") || &Error ($!, "$arch");
while ($lin=<BANNER>){
@mat=split("\t",$lin);
$nom=$mat[0];
$fil=$mat[8];
$img="../imagenes/$nom-banner.gif";
if (-e $img){
if ($filtro eq ""){$fil="";}
if ($filtro eq $fil){
push (@banners,"$nom-$fil");
}
}
}
close BANNER;
$n=@banners;
$num=int(rand($n));
$cad=$banners[$num];
@cam=split("-",$cad);
$nom=$cam[0];
$fil=$cam[1];
$img="../imagenes/$nom-banner.gif";
print "<center><a href=\"/cgi-bin/guiaview.pl?codigo=$nom\&filtro=$fil\">";
print "<img src=\"$img\" border=1>";
print "</a></center>\n";
}
#==========================================================================
sub Mensaje{
#==========================================================================
$mensaje=$_[0];
$accion=$_[1];
print "<FORM ACTION=\"$ENV{'SCRIPT_NAME'}\" method=POST\>\n";
print "<input type=hidden name=listado value=\"$listado\">\n";
print "<table border=2 cellpadding=5 cellspacing=5 width=80% bgcolor=\"$colorbanda\"><tr>\n";
print "<td align=center bgcolor=$colortitulo><STRONG><font color=\"$colorfondo\">Información del Sistema</font></strong>\n";
print "</td></tr><tr>\n";
print "<td align=center bgcolor=\"$colorfondo\">$mensaje\n";
# print "<br><br><input type=submit value=Regresar>\n";
print "</td></tr></table>\n";
print "</form>\n";
exit;
}
Mensaje Dom Nov 13, 2005 2:56 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

a ver que quieres ? saber de que URL viene la consulta al script para saber de que página es que te visitaron ??? pues lo puedes hacer con las variables de entorno de perl...

Investiga sobre ellas, te pueden dar mucha info para tu contado...Espero que te sirva

Saludos
Mensaje Mar Nov 15, 2005 7:42 am
mydaboin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
Responder citando

Gracias... Very Happy ... bueno para explicar un poco más mi contador hace los siguiente:

- El Guarda la entrada a la pagina.. pero todo lo que hace el usuario despues no lo toma en cuenta, solo lee la entrada más no hace una recopilación de los html visitados y .pl, como haria para que siga leyendo lo que hace ese usuario dentro de mi pagina????... solo cuenta la entrada pero no lo que hace después Confused Confused Confused Confused
Mensaje Mar Nov 15, 2005 9:19 am
explorer39
Perlero Frecuente
Perlero Frecuente
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
Responder citando

Necesitas entonces analizar el registro de actividad del servidor web. Al script en perl le pasas este registro y, entonces, debes decidir los parámetros que definen una 'visita'.
Normalmente, se define una 'visita' de un internauta desde que aparece por primera vez una IP distinta a las anteriores hasta la última página visitada, con más de diez minutos de separación de la siguiente visita.
Durante esa visita, el usuario visita páginas o activa cgi o interactua con bases de datos. Puedes llevar un control del número de veces que pasa por una determinada página (revelando que, o esa página es muy interesante o es que hay un problema de navegación y el usuario la utiliza de punto de partida hacia las demás), el tiempo que tarda en pasar de una página a otra (revelando el interés que le ha despertado, si ha leído el contenido), ver si ha seguido la estructura lineal que le proponíamos (en caso de que nuestra web fuera de ese tipo) o ha ido al grano (ha pulsado en los índices o ha utilizado un servicio de búsqueda.
En fin, el grado de análisis puede ser muy alto. Hay herramientas comerciales que hasta dibujan el camino que ha seguido un usuario (desde la página de entrada hasta que se marcharon), un grupo de usuarios, o, estadisticamente, cuál es el recorrido que hacen los internautas que visitan la página web entre las 21:00 y las 22:00 horas.
En tu caso, si sólo quieres llevar la cuenta de páginas vistas por usuario, la solución sería:
Hacer un bucle por todo el registro
Por cada línea del registro, extraer sus componentes.
Si es una nueva visita, incluirla en el vector de visitas.
Si no lo es, actualizar el vector de visitas agregando la página visitada, como una vez más.
Fin del bucle
Presentación de resultados.
Vamos, creo que era eso lo que querías...
Mensaje Mar Nov 15, 2005 9:45 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Solo me cabe acotar que en la gran mayoría de los hostings por no decir todos, ya traen varios programas de estadísticas instalados, cosa que no necesites programar nada...El mio por ejemplo trae como 7 programas distintos, que muestran la misma info de distintas maneras...

Saludos
Mensaje Mar Nov 15, 2005 10:31 am
mydaboin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
Responder citando

Gracias Explorer... es interesante dejame analizar eso y ponerlo en practica.


Monoswim tienes razón en mi caso esta varios entre los cuales uno muy detallado es el AWStats, pero mis usuarios quieren tener acceso cada uno a sus respectivas estadisticas, guardar esa información dentro de su base de datos y visualizarla dentro del sistema privado que tiene cada uno, la solución más factible es que exista un contador interno en el cgi que trabaje con la base de datos de mis empresas eso se ve en el principio d emi cgi, busca la base de datos y ubica a mi usuario, todos estan en la raiz, pero cada uno tiene su dominio especifico el cual el index llama al principal que es la pagina cradora de paginas y base de datos manejada por perl.


He trato de adaptar otros stats pero se hace dificil a la hora de adaptarlos a mi sistema, no generan error fisico pero si logico, abre el .dat pero no guarda nada en él..

en cambio el que yo estoy realizando muestra señales de vida, lo que quiero es poder ver cuales .pl y html visitan en cada pagina que maneja mi base de datos.

Explorer me ha dado una idea, espero que la palique correctamente sino les vuelvo a echar un grito... Very Happy Very Happy Very Happy Very Happy


les mando un gran beso y abrazo a ambos por su gran ayuda e información, espero que ayudan también a los demás programadores que tengan problemas grandes o pequeños..

nuevamente muchas gracias.. atentamente Mayra (si una chica) YR Daboin.= mydaboin
Mensaje Mar Nov 15, 2005 1:25 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Una chica programadora ? el sueño de todo programador !!!

jajaja

Esto que hacemos lo hacemos por amor al arte, está bueno ayudar a los demás, te invito a que visites de vez en cuando el foro y verás como ayudar a otros usuarios no es tan complicado, ni hay que ser un craneo...

Saludos
Mensaje Mar Nov 22, 2005 7:37 am
mydaboin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
Responder citando

he estado ocupadisima con otros programas y actividades de las bases de datos de mis clientes... ahora es que voy a utilizar sus ideas... pero tengo otro problemilla con otro programa...

Tengo un .pl que manda correos de solicitud de información para un x producto, el manda una copia a uno de nuestros correos de yahoo, y el otro va al destinatario de la pagina en cuestion, tengo una pagina que no le llegan los correos.. ningún correos, en cambio a las otras si...

que creen que sucede.. problemas con el servidor para reconocer mi envio???? tengo que hacer otro cgi especial para este cliente???

como seria diferente al $archivo_correo = "/usr/lib/sendmail -t"; ???

no tengo respuestas por favor si me ayudan en esto... durante la tarde trabajare de nuevo con mi contador y les aviso que tal me fue con sus soluciones... saludos Very Happy
Mensaje Mar Nov 22, 2005 8:16 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Pues evidentemente si una misma función manda correos y aunos lellegan y a otro no, o está mal escrita la direccion o está funcionando mal esa página en especial...

Yo lo encararía por ese lado, pero no necesitas cambiar nada si funciona con los demás...

Saludos
Mensaje Mar Nov 22, 2005 12:43 pm
mydaboin
Perlero Nuevo
Perlero Nuevo
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
Responder citando

creo que se arreglo el problema de enviar el correo.. solo falta que el clinte llame, ya le envie un email... bueno había un error logico que ironicamente... no afectaba a los demás, eso fue lo más raro de todo... algo muy parecido a "Dimensión desconocida".. Very Happy, lo del contador.. pues voy a comenzar a trabajar en ello.. mañana les escribo para decirles si hay buenas noticias Cool o malas Sad ...
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group