Groups | Search | Server Info | Login | Register
Groups > fr.comp.usenet.serveurs > #5090
| From | Julien ÉLIE <iulius@nom-de-mon-site.com.invalid> |
|---|---|
| Newsgroups | fr.comp.usenet.serveurs |
| Subject | Re: Script de stats ? |
| Date | 2026-02-23 21:25 +0100 |
| Organization | Groupes francophones par TrigoFACILE |
| Message-ID | <10nid38$22q1k$1@news.trigofacile.com> (permalink) |
| References | <10nfl53$20sh8$1@news.trigofacile.com> <10nfqoj$2m0j$1@cabale.usenet-fr.net> |
Salut Olivier,
>> Est-ce que ça tente quelqu'un d'en remettre un en service ?
>
> C'est une bonne question. Pour ma part, même si techniquement je
> pourrais développer et lancer un tel robot, je n'en ai pas du tout
> l'envie.
Pareil, et en plus je n'utilise plus tradspool pour fr.* donc c'est techniquement plus compliqué pour récupérer les messages (mais ça se fait).
>> Ou sinon, si personne n'est motivé (je ne le suis pas non plus) ou que
>> ce genre de stats n'est plus jugé pertinent, alors on peut se demander
>> si le groupe fr.usenet.stats est toujours utile...
>
> C'est aussi une bonne question. Je suis d'accord avec toi que si
> personne n'est motivé alors autant supprimer le groupe.
À toute fin utile, le script que j'utilisais naguère, si quelqu'un est intéressé. C'est une bonne base de départ en tout cas.
./spoolstats -f groupes
où le fichier groupes contient les noms des groupes à traiter (un par ligne).
$spool="/home/news/spool/articles" pointe vers la racine du répertoire où sont stockés les messages au format tradspool.
Tout l'historique des articles présents sur le serveur va être traité. S'il faut restreindre à 1 mois par exemple, il faudrait adapter le script pour passer un fichier trop vieux.
#!/usr/bin/perl
# Modifié par Christophe Massiot le 3/07/98
# Légèrement adapté par Julien Élie le 31/05/06
use Getopt::Std;
use Encode qw/encode decode/;
# Seule variable à modifier
$spool="/home/news/spool/articles";
$version="0.00003";
%articles=();
$totalart=0;
sub usage {
printf STDERR
"
spoolstats $version (c) A.Thivillon Alain.Thivillon\@alma.fr
Usage : spoolstats -f groupfile
-f groupfile : groupfile contient la liste des groupes à traiter\n\n";
exit 0;
}
sub read_grp {
my($filename)=@_;
open(GROUPS,$filename) || return; #|| die ("Cannot open $filename");
while (<GROUPS>) {
chomp;
my($group)=split;
$groupname{$group}=$group;
$articles{$group}=0;
$crossposts{$group}=0;
$follows{$group}=0;
$followbad{$group}=0;
};
close(GROUPS);
};
sub process_group {
my($group)=@_;
$groupdir = $spool."/".$group;
$groupdir =~ s/\./\//g;
if (-e $groupdir) {
opendir(GROUPDIR,$groupdir) || die ("Bad directory $groupdir\n");
chdir($groupdir);
while ($entry=readdir(GROUPDIR)) {
next if( -d $groupdir."/".$entry);
open (ART,$groupdir."/".$entry) || die ("Impossible d'ouvrir $entry
dans le groupe $group\n");
@newsgroups= ();
@followup= ();
$localfromdone=0;
while (<ART>) {
s/\r?\n$//;
last if (/^$/); # Ne lisons pas le corps des articles.
@newsgroups=split(/,/,$1) if (/^Newsgroups: (.*)$/i);
@followup=split(/,/,$1) if(/^Followup-To: (.*)$/i);
#@path=split(/!/,$1) if (/^path: (.*)$/i);
if ($localfromdone) {
if (!(/:/)) {
$localfrom .= $_;
}
$localfromdone = 0;
}
if (/^From: (.*)$/i) {
$localfrom = $1;
$localfromdone = 1;
}
}
close ART;
$localfrom =~ s/^\s*(.*)\s+<(.*)>\s*$/$2/;
$localfrom =~ s/^\s*(\S+)\s+\((.*)\)\s*$/$1/;
$localfrom =~ s/^.*<(.*)>.*$/$1/;
$localfrom = decode('MIME-Header', $localfrom);
if ($#newsgroups eq 0) { #gt 0$newsgroups[0] eq $group) {
$articles{$group}++;
$arts{$localfrom}++;
$totalart++;
#$feeds{$path[1]}++;
}
else { #if ($#newsgroups gt 0) { # && $newsgroups[0] eq $group) {
if ($newsgroups[0] eq $group) {
$arts{$localfrom}++;
$artscr{$localfrom}++;
$totalart++;
}
$articles{$group}++;
$crossposts{$group}++;
}
if ($#followup ge 0) {
$follows{$group}++ if ($#newsgroups > 0);
if ($#followup ge 1) {
$followbad{$group}++;
next;
}
}
};
closedir(GROUPDIR);
};
};
getopts('f:') || &usage;
&usage if (!$opt_f);
&read_grp($opt_f);
printf("Ce tableau reflète le nombre d'articles qui ont été postés (sans
être annulés) dans chaque groupe de la hiérarchie au cours des deux
derniers mois (trois pour les forums modérés). Les colonnes suivantes
représentent respectivement le nombre d'articles crucipostés, leur
pourcentage, le pourcentage des précédents articles possédant un champ
« Followup-to: », et le nombre d'articles ayant plusieurs forums dans
le champ « Followup-to: ».\n\n");
printf("%-35.35s | Arts | Cross | %% Cr. | %% Fol. | Bad |\n","Groupe");
printf("------------------------------------|-------|-------|---------|---------|------|\n");
foreach $key (sort keys(%groupname)) {
process_group($groupname{$key});
if ($articles{$key} == 0) {
$percentcross=0;
}
else {
$percentcross=($crossposts{$key}*100.0)/$articles{$key};
};
if ($crossposts{$key} == 0) {
$percentfoll=0.0;
}
else {
$percentfoll=($follows{$key}*100)/$crossposts{$key};
};
printf("%-35.35s | %4d | %4d | %6.2f%% | %6.2f%% | %4d |\n"
,$key,$articles{$key},$crossposts{$key},$percentcross,
$percentfoll, $followbad{$key});
};
printf ("\n\nNombre total d'articles : %d\n",$totalart);
printf ("\n\nVoici la liste des posteurs de « fr.* » (seule l'adresse électronique
est utilisée). Ce tableau offre de précieux renseignements quant à la
composition des autochtones de cette hiérarchie.\n\n
(seuls les 100 premiers posteurs sont affichés)\n\n");
printf("%4s | %-29.29s| %5s | %7s | %8s |\n",
"Rang","Posteur","Arts","Poids","Cross");
printf("-----|------------------------------|--------|---------|----------|\n");
foreach $key (sort { $arts{$b} <=> $arts{$a} } keys(%arts)) {
$count++;
printf("%4d | %-29.29s| %5d | %6.2f%% | %7.2f%% |\n",
$count,$key,$arts{$key},($arts{$key}*100)/$totalart,
($artscr{$key}*100)/$arts{$key});
last if ($count == 100);
};
exit 0;
Et voilà, à voir comme le souligne Jean-Paul, si ce genre de stats intéresse du monde.
--
Julien ÉLIE
« Plus j'y pense, plus je me dis qu'il n'y a aucune raison pour que le
carré de l'hypoténuse soit égal à la somme des carrés des deux autres
côtés. » (San-Antonio)
Back to fr.comp.usenet.serveurs | Previous | Next — Previous in thread | Next in thread | Find similar
Script de stats ? Julien ÉLIE <iulius@nom-de-mon-site.com.invalid> - 2026-02-22 20:24 +0100
Re: Script de stats ? Olivier Miakinen <om+news@miakinen.net> - 2026-02-22 22:00 +0100
Re: Script de stats ? Gosseyn <gosseyn@gosseyn.net> - 2026-02-23 09:31 +0100
Re: Script de stats ? "M.V." <mv@gmail.com.invalid> - 2026-02-23 18:47 +0000
Re: Script de stats ? Olivier Miakinen <om+news@miakinen.net> - 2026-02-23 20:17 +0100
Re: Script de stats ? Gosseyn <gosseyn@gosseyn.net> - 2026-02-24 12:09 +0100
Re: Script de stats ? "M.V." <mv@gmail.com.invalid> - 2026-02-24 13:02 +0000
Re: Script de stats ? yves <yves@free.invalid> - 2026-02-24 13:42 +0000
Re: Script de stats ? Gosseyn <gosseyn@gosseyn.net> - 2026-02-24 17:50 +0100
Re: Script de stats ? yves <yves@free.fr.invalid> - 2026-02-24 18:39 +0100
Re: Script de stats ? Jean-Paul <contact@usenet.ovh> - 2026-02-24 23:28 +0100
Re: Script de stats ? "M.V." <mv@gmail.com.invalid> - 2026-02-25 08:03 +0000
aspect de la liste des groupes dans le lecteur de news (was: Script de stats ?) yves <yves@free.fr.invalid> - 2026-02-25 11:18 +0100
Re: Script de stats ? Gosseyn <gosseyn@gosseyn.net> - 2026-02-24 17:49 +0100
Re: Script de stats ? Julien ÉLIE <iulius@nom-de-mon-site.com.invalid> - 2026-02-23 21:25 +0100
Re: Script de stats ? Jean-Paul <contact@usenet.ovh> - 2026-02-23 00:36 +0100
Re: Script de stats ? The Mover <the.mover@bsdmail.invalid> - 2026-02-27 14:45 +0100
csiph-web