Sab Nov 12, 2005 9:54 am
|
 |
mydaboin
Perlero Nuevo

|
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
|
|
| Necesito Ayuda con Contador de Perl |
|
|
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...
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
#!/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 y daña para mostrar la información
@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
print ESTADISTICA "$imageurl\t"; # mucho menos que nada , debería mostrarme el archivo donde se encuentra la imagen, si me ayudan en esto no me quejaria
print ESTADISTICA "$browcont\t"; # sirve, muestra el navegador utilizado y el sistema operativo
print ESTADISTICA "$idcont\t"; # no hace nada
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;
} |
|
|
|

Dom Nov 13, 2005 2:56 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|
Mar Nov 15, 2005 7:42 am
|
 |
mydaboin
Perlero Nuevo

|
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
|
|
|
|
|
Gracias... ... 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  |
|

Mar Nov 15, 2005 9:19 am
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
|
|
|
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... |
|

Mar Nov 15, 2005 9:45 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|

Mar Nov 15, 2005 10:31 am
|
 |
mydaboin
Perlero Nuevo

|
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
|
|
|
|
|
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...
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 |
|

Mar Nov 15, 2005 1:25 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|

Mar Nov 22, 2005 7:37 am
|
 |
mydaboin
Perlero Nuevo

|
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
|
|
|
|
|
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  |
|

Mar Nov 22, 2005 8:16 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
|
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 |
|
Mar Nov 22, 2005 12:43 pm
|
 |
mydaboin
Perlero Nuevo

|
Registrado: 22 Abr 2004
Mensajes: 59
Ubicación: Pues Aqui, Preguntando
|
|
|
|
|
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".. , lo del contador.. pues voy a comenzar a trabajar en ello.. mañana les escribo para decirles si hay buenas noticias o malas ... |
|
Powered by phpBB © 2001, 2005 phpBB Group
|