• Publicidad

Necesito Ayuda con Contador de Perl

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Necesito Ayuda con Contador de Perl

Notapor mydaboin » 2005-11-12 10:54 @495

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... :D

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 :D

#!/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 :lol: :lol: :lol: y daña para mostrar la información :roll:
@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 :(
$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 :roll:
print ESTADISTICA "$imageurl\t"; # mucho menos que nada :roll: , debería mostrarme el archivo donde se encuentra la imagen, si me ayudan en esto no me quejaria :D
print ESTADISTICA "$browcont\t"; # sirve, muestra el navegador utilizado y el sistema operativo
print ESTADISTICA "$idcont\t"; # no hace nada :roll:
print ESTADISTICA "$host\t"; # sirve, muestra el ip junto al host
print ESTADISTICA "$fecha\n"; # sirve, aunque esta atrasado por una hora :? :? :?
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;
}
MYRD
mydaboin
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2004-04-22 08:07 @380
Ubicación: Pues Aqui, Preguntando

Publicidad

Notapor monoswim » 2005-11-13 15:56 @705

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor mydaboin » 2005-11-15 08:42 @404

Gracias... :D ... 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 :? :? :? :?
MYRD
mydaboin
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2004-04-22 08:07 @380
Ubicación: Pues Aqui, Preguntando

Notapor explorer39 » 2005-11-15 10:19 @471

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

Notapor monoswim » 2005-11-15 10:45 @489

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor mydaboin » 2005-11-15 11:31 @521

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... :D :D :D :D


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
MYRD
mydaboin
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2004-04-22 08:07 @380
Ubicación: Pues Aqui, Preguntando

Notapor monoswim » 2005-11-15 14:25 @642

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor mydaboin » 2005-11-22 08:37 @400

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 :D
MYRD
mydaboin
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2004-04-22 08:07 @380
Ubicación: Pues Aqui, Preguntando

Notapor monoswim » 2005-11-22 09:16 @427

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor mydaboin » 2005-11-22 13:43 @613

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".. :D, lo del contador.. pues voy a comenzar a trabajar en ello.. mañana les escribo para decirles si hay buenas noticias 8) o malas :( ...
MYRD
mydaboin
Perlero nuevo
Perlero nuevo
 
Mensajes: 66
Registrado: 2004-04-22 08:07 @380
Ubicación: Pues Aqui, Preguntando


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados

cron