A l'aideeeeeeeeeeeeeeeeeeeeeeeeee
***************************************
Les serveurs web enregistrent la trace des visites dans des fichiers de log. Chaque requète (demande d'une page par un navigateur internet) génère une ligne dans un fichier de log (normalement nommé access_log. Ce fichier est utilisé par le webmaster pour déterminer quels sont les pages les plus visitées, combien de visiteurs passent sur le site, etc.
Le but de ce projet est d'écrire un programme permettant d'aider un webmaster à analyser le comportement de ses visiteurs.
Voici un extrait du fichier de log du serveur web de l'IUT:
193.249.12.70 - - [31/Dec/2000:22:26:14 +0500] "GET /precamp.html HTTP/1.1" 200 4775
194.231.30.90 - - [31/Dec/2000:22:26:41 +0500] "GET / HTTP/1.0" 200 6266
193.249.12.70 - - [31/Dec/2000:22:27:01 +0500] "GET /gtr.html HTTP/1.1" 200 9010
64.39.31.110 - - [01/Jan/2001:11:35:08 +0500] "GET / HTTP/1.0" 200 6266
212.217.125.156 - - [01/Jan/2001:21:05:50 +0500] "GET /images/logoiut.gif HTTP/1.0" 200 646
212.217.125.156 - - [01/Jan/2001:21:05:50 +0500] "GET /images/logou2.jpeg HTTP/1.0" 200 3978
212.217.125.156 - - [01/Jan/2001:21:06:16 +0500] "GET /gea.html HTTP/1.0" 200 10052
64.39.31.110 - - [01/Jan/2001:23:26:34 +0500] "GET / HTTP/1.0" 200 6266
216.36.21.13 - - [02/Jan/2001:05:39:42 +0500] "GET / HTTP/1.1" 200 6266
216.36.21.13 - - [02/Jan/2001:05:39:43 +0500] "GET /images/fd.jpeg HTTP/1.1" 200 2089
Les lignes du fichier ont toujours la même structure~: adresse IP du visiteur, date de la requète, requète HTTP. On ignorera la suite de la ligne.
La requète HTTP est normalement GET (on ignorera les autres requètes) et permet de retrouver le nom de la page ou de l'image demandée. Ainsi "GET / HTTP/1.0" est une requète qui demande la page d'accueil (/) du site.
Notons qu'une page qui comporte des images demande plusieurs requètes pour être chargée.
Objectif du programme
Votre programme permettra, à partir d'un fichier de log que l'on vous fournira (fichiers access_log), d'afficher les informations suivantes:
nombre de visites: une visite est caractérisée par le passage d'un visiteur, qui demande quelques pages puis quitte le site. Attention, plusieurs visiteurs peuvent etre actifs simultanément. On introduira un seuil temporel réglable (par exemple, on considera une visite comme terminée s'il n'y a pas de requète depuis 3 minutes). Un visiteur est caractérisé par son adresse IP.
hit parade des pages: afficher la liste des pages vues, triée par nombre de visiteurs.
hit parade des visiteurs: afficher la liste des visiteurs, trié par nombre de visite effectuées.
hit parade des dates: afficher les dates où il y a eu le plus de visites.
Question subsidiaire (non facultative)
Chercher sur Internet des programmes gratuits faisant ce genre de traitements. Quels sont les fonctionnalités qui manquent au votre ?
Voila mon pb c que j'aimerais faire des structures pour selectionner l'ip puis la date et la page visite et ensuite les mettre dans un tabelau pour les trier
Pour le moment j'ai fait qunn truc qui compte le nombre de visite sans rien prendre en compte (pas de timer)
#include <stdio.h> // io access
#include <stdlib.h> // atoi
#include <string.h> // strtok
int nb_de_visites(int argc, char* argv[]);
/**************************************************************************
Procedure Principale
**************************************************************************/
void main ()
{
int toto;
char* titi;
printf("\n");
printf("-------------------------------------------------------------------------------\n");
printf("Analyseur des visites d'un site web \n");
printf("Crée par Nicolas Mrowczynski & Anthony Champalaune\n");
printf("-------------------------------------------------------------------------------\n");
nb_de_visites(toto,&titi); //appelle de la fonction qui donne le nombre de visites
}
/**************************************************************************
Sous Fonctions Utilis,es
**************************************************************************/
int nb_de_visites(int argc, char* argv[])
{
char line[4096];
int toknum = 0;
char * token;
int hits = 0;
FILE* logfile;
if(argv[1] != NULL)
{
logfile = fopen(argv[1], "r");
}
else
{
printf("Le fichier . analyser existe ,'web1.txt'\n");
logfile = fopen("c:\\web1.txt", "r"); //chemin du fichier
}
if(logfile == NULL)
{
printf("Le fichier n'a pas ,t, trouvé.\n");
return 0;
}
if(!(ferror(logfile)))
{
// on continue a lire le fichier jusqu'a la fin
while( fgets(line, 4096, logfile) != NULL )
{
if(line[0] != '#')
{
hits ++;
if ((hits%50000)==0) printf("Nombre de visites: %i\n", hits); //status
// on efface les informations de la ligne
toknum = 0;
strtok(line, " ");
for(toknum = 0; toknum < 9;
toknum ++) strtok(NULL, " ");
}
}
fclose(logfile); //on ferme le fichier
}
else
{
// Il y'a a une erreur
printf("ERREUR d'ouverture!\n");
}
// On montre le nombre de visites
printf("Le nombre de visites : %i\n", hits);
return 0;
}
Je pense crée des structures ou je vais sélectionner toute les addresses ip , puis une autre avec les dates et enfin une autre avec 'addresse visite puis je trirais cela ensuite mais je sais pas si ca va marche comme ca.
Je vois po comment je peux selectionner les partie qui m'interraise
thx pour l'aide