Projet:Suivi des articles de qualité des autres wikipédias/Tutoriel
BeBot effectue une mise à jour des listings chaque mois (voir le tableau des Équivalences).
Le bot ne fonctionne pas pour l'italien. Pour exécuter l'ancien script perl, se reporter au Tutoriel.
Mode de fonctionnement du script perl modifier
Facultatif : Établissement d'une liste modifier
Facultatif pour en, de, es, nl et it : la liste est récupérée de manière automatique. Si le mode automatique échoue, la liste des AdQs d'une Wikipédia donnée doit être fournir dans un fichier de la forme suivante (exemple pour l'allemand) :
==Geographie== [[Elbe]] ==Kunst und Kultur== [[Frederik Chopin|Chopin]]
Il existe plusieurs méthode pour créer ce fichier :
Langue | Liste brut | Méthode |
---|---|---|
de | de:Wikipedia:Exzellente Artikel |
|
en | en:Wikipedia:Featured_articles |
|
es | es:Wikipedia:Artículos_destacados/Índice |
|
it | it:Wikipedia:Vetrina |
|
nl | nl:Wikipedia:Etalage |
|
Exécution du script modifier
Un script en Perl permet de faire la mise en page et le tri facilement :
#!/usr/bin/perl
=encoding utf-8
=head1 NOM
Adq.pl
=head2 NECESSITE
use POSIX qw(ceil floor);
wget
=cut
use strict;
use warnings;
use POSIX qw(ceil floor);
######### Localisation #########
my %espace_image = ( en => "File", fr => "Image",
de => "Bild", es => "Archivo",
nl => "Bestand", it => "Immagine" );
my %M_adq = ( en => "Link FA", fr => "Lien AdQ",
de => "Link FA", es => "Destacado",
nl => "Link FA", it => "Link AdQ" );
#Attention, pour les redirections aussi : voir &read_adq().
######### Init #########
#Variables et valeurs par défaut
my ($LANG, $NAME, $ligne, $adq, $ratio_char, $message, $sep, $avancement,
$statut, @liste_adq, $debut_liste_adq, $fin_liste_adq, $en_traduction,
$liste, $categorie, $date);
(my $origin_LANG, my $FILE, my $style_ligne) = @ARGV;
my $dest_LANG = "fr";
my $origin_LANGUAGE = ""; # Langue d'origine en toutes lettres
my $FLAG_first_line = "true"; # Première ligne écrite dans $OUTtableau ?
my $SEM_html = 0; # Délimite l'environnement d'une balise html à ignorer (de)
my $adq_vu = 0; # Nombre d'adq repéré
my $previous_notes = ""; # Note précédemment publiée
my $iw = ""; # Ligne (affichage) pour l'interwiki
# Listes
my @l_ARTICLE; # Liste nettoyée des articles
my @Rapport_precedant ; # Rapport actuellement publié sur le projet
my @A_inexistants ; # Articles inexistants en français
my @A_double_label ; # Articles labellisés dans les deux langues
my @A_en_traduction ; # Articles en cours de traduction
my @F_additifs; # Articles (non-labellisés) à prendre aussi en compte
# Fichiers de sortie
my $OUTtableau = "PSAdQ-pageapublier";
my $OUTlog = "PSAdQ.log";
=head2 DESCRIPTION
Génère des comparaisons entre les articles de qualités de wikipédias étrangers (en, de, es, it, nl) avec ceux en français.
Script original de Jmfayard-fauxnez L<http://fr.wikipedia.org/wiki/Utilisateur:Jmfayard-fauxnez/Adq.pl>
modifié par Romainhk L<http://fr.wikipedia.org/wiki/Utilisateur:Romainhk>
Le fichier F<PSAdQ-pageapublier> contient le résultat de l'execution du script.
=head1 PARAMETRES
C<Adq.pl code_langue_étranger [liste_des_AdQ] [style_des_lignes]>
=over
=item I<code_langue_étranger>
Code ISO-639-3 qui caractérise le wiki à analyser (parmis : en, de, es, nl ou it).
=item I<[liste_des_AdQ]>
Fichier contenant la liste des articles de qualité à analyser. Si omis, le script va essayer de retrouver tout seul la liste.
=item I<[style_des_lignes]>
Style pour un wikitableau, appliqué à chaque ligne des tableaux de comparaison de la forme C<|style="background-color:#DDDDDD;">
=back
=cut
#Initialisation
sub init() {
if ($#ARGV<0 || $#ARGV>3) {
print "Usage : perl Adq.pl code_langue_étranger [liste_des_AdQ] [style_des_lignes]\n"
."Voir la documentation : perldoc -L fr Adq.pl";
exit 1;
}
if (not $style_ligne) { $style_ligne = ""; }
if (not $FILE) { $FILE = ""; }
#Listage des pages d'adq à analyser selon la langue
if ( $origin_LANG eq "en" ) {
$origin_LANGUAGE = "Anglais";
$liste_adq[0] = "Wikipedia:Featured_articles";
$debut_liste_adq = ".*colspan.*width.*valign.*";
$fin_liste_adq = ".*Contents pages.*";
} elsif ( $origin_LANG eq "de" ) {
$origin_LANGUAGE = "Allemand";
push @liste_adq, "Wikipedia:Exzellente Artikel/Geographie";
push @liste_adq, "Wikipedia:Exzellente Artikel/Geschichte";
push @liste_adq, "Wikipedia:Exzellente Artikel/Gesellschaft";
push @liste_adq, "Wikipedia:Exzellente Artikel/Kunst und Kultur";
push @liste_adq, "Wikipedia:Exzellente Artikel/Religion";
push @liste_adq, "Wikipedia:Exzellente Artikel/Sport";
push @liste_adq, "Wikipedia:Exzellente Artikel/Technik und Verkehr";
push @liste_adq, "Wikipedia:Exzellente Artikel/Wissenschaft";
$debut_liste_adq = "InhaltLinks";
$fin_liste_adq = "^}}";
} elsif ( $origin_LANG eq "es" ) {
$origin_LANGUAGE = "Espagnol";
$liste_adq[0] = "Wikipedia:Artículos_destacados/Índice";
$debut_liste_adq = "<!--- INICIO LISTA DESTACADOS --->";
$fin_liste_adq = "<!--- FIN LISTA DESTACADOS --->";
} elsif ( $origin_LANG eq "nl" ) {
$origin_LANGUAGE = "Néerlandais";
$liste_adq[0] = "Wikipedia:Etalage";
$debut_liste_adq = ".*width.*100.*div.*";
$fin_liste_adq = ".*__NOTOC__";
} elsif ( $origin_LANG eq "it" ) {
$origin_LANGUAGE = "Italien";
$liste_adq[0] = "Wikipedia:Vetrina";
$debut_liste_adq = ".*colspan.*div.*Arte.*Biografie.*div";
$fin_liste_adq = ".*colspan.*style";
} else {
die "Langue \"$origin_LANG\" non supportée.\n";
}
if ( $liste_adq[0] eq "" && $FILE eq "" ) {
die "Mode automatique non disponible pour cette langue ($origin_LANG)\n";
}
$categorie = "\n[[Catégorie:Liste de suivi des articles de qualité des autres wikipédias|$origin_LANG]]";
$debut_liste_adq = &protect_regexp($debut_liste_adq);
$fin_liste_adq = &protect_regexp($fin_liste_adq);
@Rapport_precedant = `wget \"http://$dest_LANG.wikipedia.org/w/index.php?title=Projet:Suivi_des_articles_de_qualité_des_autres_wikipédias/$origin_LANGUAGE&action=raw\" -O - 2>/dev/null` ;
$date = `date +\"%-d %B %Y\"`;
chomp $date;
}
######## Procédures #########
=head1 FONCTIONS
=head2 clean_line( ligne )
Nettoie la ligne fournie
=cut
sub clean_line() {
($ligne) = @_ ;
chomp $ligne;
if ( $ligne =~ m/^<!--/ ) { return ""; }
#Traitements spécifiques
if ( $origin_LANG eq "nl" ) { # nl
if ( $ligne =~ m/<\/div>/ ) { return ""; }
if ( $ligne =~ m/\{\{Wikipedia.*\// ) { return ""; }
$ligne =~ s/===/==/g ;
$ligne =~ s/\[\[Portaal:[^\|]+\|([^\]]*)\]\]/$1/g ;
} elsif ( $origin_LANG eq "en" ) { # en
$ligne =~ s/\{\{.*\|(.*)\}\}/$1/ ;
} elsif ( $origin_LANG eq "it" ) { # it
if ( $ligne =~ m/^\[\[Immagine:.*$/ ||
$ligne =~ m/^\[\[Image:.*$/ ) { return ""; }
} elsif ( $origin_LANG eq "es" ) { # es
$ligne =~ s/<span id=[^<>]+>(.*)<\/span>/$1/g ; #titre contenant un span
}
$ligne =~ s/\|.*\]\]/\]\]/g ; #lien interne renommé
$ligne =~ s/#[^\]]*//g ; #ancre
if ( $ligne =~ m/^\{\|/ || $ligne =~ m/\|\}/ ) { return ""; } #tableau
if ( $ligne =~ m/^\|/ ) { return ""; } #<tr> / <td>
if ( $ligne =~ m/<?[A-Za-z0-9]*>/ ) {
die ("Erreur : balise html à la ligne $. :\n$ligne\n");
}
if ( $ligne =~ m/==.*==/ ) {
return $ligne;
} elsif ( $ligne =~ m/\[\[(.*)\]\]/ ) {
return $1;
}
return "";
}
=head2 lire_additifs( page_contenant_les_additifs )
Lit les articles (hors AdQ) à ajouter depuis une page WP
=cut
sub lire_additifs() {
my ($ADDITIFS) = @_ ;
my @resultat; my @a;
open(IN, "wget \"http://$dest_LANG.wikipedia.org/w/index.php?title=$ADDITIFS&action=raw\" -O - 2>/dev/null |") ;
PRE: while( $ligne=<IN> ) {
last PRE if ( $ligne =~ m/<!-- ADDITIF:$origin_LANG -->/ ); }
ADD: while( $ligne=<IN> ) {
last ADD if ( $ligne =~ m/<!-- ADDITIF.*/ || not $ligne =~ m/[a-zA-Z0-9]/ );
if ( $ligne =~ m/==/ ) { next; }
@a = split(/;/, $ligne);
$a[0] =~ s/.*:(.*)\]\].*/$1/;
$a[1] =~ s/.*"(.*)".*/$1/;
push @resultat, [ $a[1], $a[0] ];
}
close IN;
return @resultat;
}
=head2 inserer_additifs( thème )
Ajoute les additifs avec les autres AdQ du même thème (mode auto uniquement)
=cut
sub sousliste_additifs() {
my ($THEME) = @_ ;
my @tab;
my $n, my $test;
foreach $n ( 0..$#F_additifs ) {
$test = $F_additifs[$n][0];
if ( $THEME =~ m/$test/ ) {
push @tab, $F_additifs[$n][1];
print $F_additifs[$n][1]."---\n";
}
}
return @tab;
}
=head2 articles_auto( liste_des_adq )
Liste les AdQ de manière automatique
=cut
sub articles_auto() {
($liste) = @_ ;
my ($ligne, $l, $m, @result, @add);
if ( $origin_LANG eq "de" ) {
@add = &sousliste_additifs( (split(/\//, $liste))[1] );
foreach $m ( @add ) {
push @result, $m;
}
}
open(IN, "wget \"http://$origin_LANG.wikipedia.org/w/index.php?title=$liste&action=raw\" -O - 2>/dev/null |") ;
PRE: while( $ligne=<IN> ) {
last PRE if ( $ligne =~ m/$debut_liste_adq/ ); }
TRAIT: while( $ligne=<IN> ) {
last TRAIT if ( $ligne =~ m/$fin_liste_adq/ );
if ( $origin_LANG eq "de" ) {
$ligne =~ s/·/\r/g;
$ligne =~ s/•/\r/g;
#/<imagemap>\_[^>]*imagemap>//g ; /<!--\_[^"]*->//g
if ( $ligne =~ m/<imagemap>/i || $ligne =~ m/<!--/ ) {
$SEM_html++ ; }
if ( $SEM_html ) {
if ( $ligne =~ m/<\/imagemap>/i || $ligne =~ m/-->/ ) {
$SEM_html-- ;
}
next;
}
} elsif ( $origin_LANG eq "es" ) {
$ligne =~ s/ ?-/\r/g;
$ligne =~ s/ ?–/\r/g;
} elsif ( $origin_LANG eq "it" ) { $ligne =~ s/ ·/\r/g; }
foreach $l ( split(/\r/, $ligne) ) {
$l = &clean_line($l);
if ( $l eq "" ) { next; }
push @result, $l;
# Additifs
if ( $l =~ m/==(.*)==/ ) {
@add = &sousliste_additifs($1);
foreach $m ( @add ) {
push @result, $m;
}
}
}
}
return @result;
}
=head2 articles_in_file( [liste_des_adq] )
Créer une liste propre des articles à analyser
=cut
sub articles_in_file() {
($FILE) = @_ ;
my @result=(); my $l;
if ( $FILE eq "" ) {
print LOG "\n#### Mode automatique...";
foreach $l (@liste_adq) {
if ( $origin_LANG eq "de" ) {
push @result, "==".(split(/\//, $l))[1]."==";
}
push @result, &articles_auto($l) ;
}
} else {
print LOG "\n#### Mode manuel par $FILE...";
open(IN, "$FILE");
while( $ligne=<IN> ) {
$ligne = &clean_line($ligne);
if ( $ligne eq "" ) { next; }
push @result, $ligne;
}
close IN;
}
return @result;
}
=head2 round( nombre )
Donne une valeur arrondie sans décimale
=cut
sub round { return sprintf("%.0f", @_); }
=head2 as_an_image( ligne )
Détecte si une ligne contient une image
=cut
sub as_an_image() {
my ($ligne) = @_ ;
if (
($ligne =~ m/\[\[$espace_image{$origin_LANG}:/) ||
($ligne =~ m/\[\[Fichier:/) ||
($ligne =~ m/\[\[File:.*px/) ||
($ligne =~ m/\[\[Image:/) ||
($ligne =~ m/\.jpg/i) ||
($ligne =~ m/\.jpeg/i) ||
($ligne =~ m/\.png/i) ||
($ligne =~ m/\.svg/i)
) { return "true"; } else { return 0; }
}
=head2 exist( url )
Vérifie qu'une URL existe belle et bien
=cut
sub exist() {
my ($url) = @_ ;
open(IN, "wget --spider \"".&protect_url($url)."\" -O - 2>&1 |") ;
while( $ligne=<IN> ) {
#selon la version de wget : /broken/ ou /lien mort/
if ( $ligne =~ /lien mort/ || $ligne =~ /broken/ ) { return ""; }
}
return "true";
}
=head2 previous_notes( nom de l'article à rechercher)
Recherche les anciennes notes publiées
=cut
sub previous_notes() {
my ($ARTICLE) = @_ ;
my $index = 0;
my $offset = 3;
$ARTICLE = &protect_regexp($ARTICLE) ;
foreach $ligne (@Rapport_precedant) {
if ( $ligne =~ m/\{\{Col-début\}\}/) { last; }
if ( $ligne =~ m/$ARTICLE\]\]/g ) {
my $ret = $Rapport_precedant[$index+2];
$ret =~ s/^\|.*\|\|//g ;
while ( not $Rapport_precedant[$index+$offset] =~ m/^\|[\-\}]$/ ) {
$ret .= $Rapport_precedant[$index+$offset];
$offset++;
}
chomp $ret;
return $ret;
}
$index++;
}
return "";
}
=head2 read_adq( nom de l'article à analyser )
Traitement central donnant la taille et le nombre d'images des articles
et le statut AdQ de l'article en français
=cut
sub read_adq() {
my ($ARTICLE) = @_ ;
my ($interwiki, $interwiki_label, $nb_images, $nb_images_interwiki,
$nb_char, $nb_char_interwiki) = ("", "", 0, 0, 0, 0);
open(IN, "wget \"http://$origin_LANG.wikipedia.org/w/index.php?title=".&protect_url($ARTICLE)."&action=raw\" -O - 2>/dev/null |") ;
while( $ligne=<IN> ) {
#Si on a une redirection
if ( $ligne =~ m/#REDIRECT *\[\[(.*)\]\]/i ||
$ligne =~ m/#REDIRECTION *\[\[(.*)\]\]/i ||
$ligne =~ m/#REDIRECCIÓN *\[\[(.*)\]\]/i ||
$ligne =~ m/#WEITERLEITUNG *\[\[(.*)\]\]/i ) {
# en = it = nl = REDIRECT
#... On reouvre le flux avec $1
close IN;
$ARTICLE = $1;
$ARTICLE =~ s/#.*//g ; #pour les ancres internes
open(IN, "wget \"http://$origin_LANG.wikipedia.org/w/index.php?title=".&protect_url($ARTICLE)."&action=raw\" -O - 2>/dev/null |") ;
$nb_char = $nb_images = 0;
next;
}
$nb_char += length($ligne) ;
if ( &as_an_image($ligne) ) { $nb_images++; }
while ( $ligne =~ m/\[\[$dest_LANG:([^\]]+)\]\]/g ) {
$interwiki = $1;
$interwiki =~ s/\|.*$// ;
$interwiki =~ s/#.*// ;
}
if ( $ligne =~ m/\{\{$M_adq{$origin_LANG}\|$dest_LANG\}\}/i ) {
$interwiki_label = "AdQ";
}
} close IN;
#Traitement pour l'article en français ("interwiki")
# Si l'article existe et s'il n'est pas déjà un AdQ
if ( $interwiki && not $interwiki_label ) {
open(IN, "wget \"http://$dest_LANG.wikipedia.org/w/index.php?title=".&protect_url($interwiki)."&action=raw\" -O - 2>/dev/null |") ;
while( $ligne=<IN> ) {
$nb_char_interwiki += length($ligne);
if ( &as_an_image($ligne) ) { $nb_images_interwiki++; }
} close IN;
} elsif ( $interwiki_label ) {
push @A_double_label, [ $interwiki , $ARTICLE ];
}
return ($ARTICLE, $interwiki, $interwiki_label, $nb_images,
$nb_images_interwiki, round($nb_char/1000),
round($nb_char_interwiki/1000) );
}
=head2 read_trad( page de traduction)
Lit le statut et l'avancement d'une page de traduction
=cut
sub read_trad() {
my ($pagetraduction) = @_ ;
my ($statut, $avancement) = ("0", "0") ;
$pagetraduction =~ s/#.*//g ;
open(IN, "wget \"http://fr.wikipedia.org/w/index.php?title=".&protect_url($pagetraduction)."&action=raw\" -O - 2>/dev/null |") ;
while( $ligne=<IN> ) {
if ( ($ligne =~ m/^\| *status *= *(\d{1})/) ||
($ligne =~ m/^\| *status *= *([^\|\[\]]*)$/) ) {
$statut = $1;
chomp $statut;
} elsif ( $ligne =~ m/^\|avancement_traduction *= *(\d{1,3}) *$/ ) {
$avancement = $1;
}
}
return ($statut, $avancement);
}
=head2 protect_url( url )
Renvoie une version protégée de l'url passée en paramètre
=cut
sub protect_url() {
my ($url) = @_ ;
$url =~ s/&/%26/g ;
$url =~ s/'/%27/g ;
$url =~ s/"/%22/g ;
$url =~ s/ /_/g ;
#Merci à [[1 − 2 + 3 − 4 + · · ·]]
$url =~ s/·/%C2%B7/g ;
$url =~ s/−/%E2%88%92/g ;
$url =~ s/\+/%2B/g ;
return $url;
}
=head2 protect_regexp( regexp )
Renvoie une version protégée de l'expression régulière passée en paramètre
=cut
sub protect_regexp() {
my ($exp) = @_ ;
$exp =~ s/\(/\\\(/g ; $exp =~ s/\)/\\\)/g ;
$exp =~ s/\$/\\\$/g ;
$exp =~ s/\{/\\\{/g ; $exp =~ s/\}/\\\}/g ;
return $exp;
}
######## Exécution ########
open(LOG, "> $OUTlog");
print LOG "## Initialisation...";
&init();
print LOG "Ok\nTraitement du $date pour WP:$origin_LANG\n## Création de la liste des articles...";
@F_additifs = &lire_additifs( "Projet:Suivi des articles de qualité des autres wikipédias/Additif" );
@l_ARTICLE = &articles_in_file( $FILE );
$OUTtableau .= "-".$origin_LANG;
open(OUT, "> $OUTtableau");
print LOG "Ok\n## Rendu (présentation par chapitre)\n";
foreach $adq (@l_ARTICLE) {
if ($adq =~ m/==/) {
# Si on est à la première ligne du fichier
if ($FLAG_first_line) {
$FLAG_first_line = "";
print OUT "<noinclude>''Page générée le ".$date."''\n\n"
."== Comparaisons des AdQ ".lcfirst($origin_LANGUAGE)
." avec leur équivalent en français ==\n";
} else {
print OUT "|}\n\n";
}
$adq =~ s/==/===/g ;
print LOG $adq."\n";
print OUT <<SECTION
$adq
{| class="wikitable sortable"
! scope=col | Article original !! scope=col | Article français
!! scope=col class="unsortable" | Traduction
!! scope=col | Ratio !! scope=col | Notes
SECTION
; next;
}
my ($article, $interwiki, $interwiki_label, $nb_images,
$nb_images_interwiki, $nb_char, $nb_char_interwiki)
= &read_adq( $adq );
if ( not $interwiki_label ) {
if ($interwiki eq "") {
$interwiki=$article;
push @A_inexistants, [ $interwiki , $article ];
$iw = " ";
} else {
$iw="[[$interwiki]] ($nb_char_interwiki ko, $nb_images_interwiki imgs)";
}
}
#Traduction
my $pagetraduc="Discussion:$interwiki/Traduction";
if ( &exist("http://$dest_LANG.wikipedia.org/wiki/$pagetraduc") ) {
($statut, $avancement) = &read_trad($pagetraduc);
push @A_en_traduction,
[ $interwiki, $pagetraduc, $statut, $avancement ];
$pagetraduc = "[[$pagetraduc|sous-page]]";
} else { $pagetraduc = ""; }
if ( not $interwiki_label ) {
#Ratio
if ( $nb_char_interwiki eq 0 ) {
$ratio_char = "nil";
} else {
$ratio_char = round( ($nb_char - $nb_char_interwiki)*10 / ($nb_char + $nb_char_interwiki) );
$ratio_char =~ s/-/−/g
}
$adq_vu++;
#Notes
if ( $origin_LANGUAGE ) { $previous_notes = &previous_notes($article); }
print OUT <<ITEM
|-$style_ligne
|[[:$origin_LANG:$article|$article]] ($nb_char ko, $nb_images imgs)
|$iw||$pagetraduc
|$ratio_char||$previous_notes
ITEM
;
}
}
print OUT "|}\n";
### Statistiques
print LOG "## Statistiques...";
$en_traduction = scalar @A_en_traduction;
$message = "* ".$adq_vu." articles de qualité sur WP:".$origin_LANG
." qui ne le sont pas sur WP:".$dest_LANG." ;\n* "
.scalar @A_double_label." qui le sont sur les deux ;\n* "
.scalar @A_inexistants." AdQ n'existent pas en français ;\n* "
.scalar @A_en_traduction." sont en cours de traduction/traduit";
if ( $en_traduction != 0 ) {
$message .= " (".sprintf("%.2f", $en_traduction*100/scalar @A_double_label+$adq_vu)." % du total)";
}
$message .= ".\n";
print "Le script a repéré :\n".$message ;
my $ind;
#== Articles équivalents inexistants en français ==
$sep = ceil(scalar @A_inexistants / 2);
print OUT "\n== Articles équivalents inexistants en français ==\n"
."{{Col-début}}\n{{Col-2}}\n";
for $ind ( 0..$#A_inexistants ) {
if ( $ind eq $sep ) { print OUT "{{Col-2}}\n"; }
print OUT "* [[".$A_inexistants[$ind][0]."]] ? ([[:".$origin_LANG.":"
.$A_inexistants[$ind][1]."|".$origin_LANG."]])\n" ;
}
print OUT "{{Col-fin}}\n";
#== Articles labellisés dans les deux langues ==
#$sep = ceil(scalar @A_double_label / 2);
#print OUT "\n== Articles labellisés dans les deux langues ==\n"
# ."{{Col-début}}\n{{Col-2}}\n";
#for $ind ( 0..$#A_double_label ) {
# if ( $ind eq $sep ) { print OUT "{{Col-2}}\n"; }
# print OUT "* [[".$A_double_label[$ind][0]."]] et [[:".$origin_LANG.":"
# .$A_double_label[$ind][1]."]]\n" ;
#}
#print OUT "{{Col-fin}}\n";
#== AdQ et traduction ==
if ( scalar @A_en_traduction > 0 ) {
print OUT "\n== AdQ et traduction ==\n"
."</noinclude".">{| class=\"wikitable sortable\" style=\"margin:auto;\"\n"
."! scope=col | Article !! scope=col | Statut !! scope=col | Avancement\n";
@A_en_traduction = sort { $a->[2] cmp $b->[2] } @A_en_traduction;
$ind = 0;
while ( $A_en_traduction[$ind][2] < 5 ) {
my $statut;
SWITCH: for ($A_en_traduction[$ind][2]) {
/^1/ && do { $statut = "Demande trad."; last; };
/^2/ && do { $statut = "En trad."; last; };
/^3/ && do { $statut = "Demande rel."; last; };
/^4/ && do { $statut = "En rel."; last; };
print LOG "SWITCH: Valeur inconue $_ (statut illisible pour "
.$A_en_traduction[$ind][0].")\n";
$statut = "Statut illisible" ;
}
print OUT "|-\n|[[".$A_en_traduction[$ind][0]."]]||"
.$statut."||[[".$A_en_traduction[$ind][1]
."|".$A_en_traduction[$ind][3]." %]]\n";
$ind++;
}
print OUT "|}<noinclude>\n";
print OUT "\n=== Traductions terminées à labelliser ===\n"
."{| class=\"wikitable sortable\" style=\"margin:auto;\"\n"
."! scope=col | Article !! scope=col class=unsortable | Statut !! scope=col | Avancement\n";
while ( $ind <= $#A_en_traduction ) {
print OUT "|-\n|[[".$A_en_traduction[$ind][0]."]]||"
."Terminée||[[".$A_en_traduction[$ind][1]."|"
.$A_en_traduction[$ind][3]." %]]\n";
$ind++;
}
print OUT "|}\n";
}
#== Statistiques ==
print OUT "\n== Statistiques ==\nSur ".(scalar @A_double_label+$adq_vu)
." AdQ traités (dont ".scalar @F_additifs." additifs) :\n"
."$message$categorie</noinclude".">";
close OUT;
print LOG "Ok\n\nLe programme s'est bien terminé.\n";
close LOG;
=head1 VERSION
20100811
=head1 TODO
=over
=item * remontée d'erreurs pour le mode auto
=item * rendre compatible avec ja, ru et pt
=item * Additifs : utiliser les commentaires
=item * Traiter les redirections pour les articles fr (interwiki indirect)
=back
=cut
L'exécution du script nécessite l'installation et le démarrage d'outils (voir infra).
On peut :
- soit contacter un membre technique du projet ;
- soit lancer le script soit même avec la syntaxe :
perl ./Adq.pl code langue
Le fichier "PSAdQ-pageapublier-code langue
" ainsi créé contient la page à publier.
Le script peut être long à générer selon le poids de la liste constituée (pour 2 600 articles en anglais, le script génère plus de 360 000 caractères sur 11 000 lignes!) : il faut compter environ 15 minutes pour l'italien et au moins 1h10 pour l'anglais.
Publication de la nouvelle liste modifier
Il ne reste plus qu'à publier le fichier PSAdQ-pageapublier-code langue
sur la page correspondante du projet.
Pour les grosses pages, le serveur peut parfois donner l'impression de refuser la publication mais il faut patienter : la page est actualisée en différée.
Tutoriel modifier
Voici un tutoriel rapide et illustré pour une exécution sur la langue anglaise :
Installation des outils modifier
- Sous linux, les outils perl et wget sont probablement déjà installés. Sinon, se reporter au gestionnaire de paquets de la distribution.
- Sous windows, il faut installer un cygwin (un cli incluant perl et wget) : setup.exe
- Pendant l'installation, sélectionner "Web > wget" et "Perl > perl".
Exécution modifier
- Recopier le script plus haut dans un fichier "
Adq.pl
". - Ouvrir un interpréteur de commandes (sous windows : lancer cygwin).
- Se déplacer dans le dossier contenant
Adq.pl
(sous cygwin, taper :cd /cygwin/c/Documents ans Settings/........
) - Exécuter le script avec les bons paramètres :)
- Recopier le script plus haut dans un fichier "
perl Adq.pl en
- Selon la taille de la liste, laisser tourner entre une demi-heure et deux heures.
- Copier le fichier "
PSAdQ-pageapublier-en
" dans la page qui correspond à la langue sur WP : Projet:Suivi des articles de qualité des autres wikipédias/Anglais.
Références modifier
- Un fichier contenant une structure-type :
==Geographie== ==Geschichte== ==Gesellschaft== ==Kunst und Kultur== ==Religion== ==Sport== ==Technik und Verkehr== ==Wissenschaft==
- Ce script est une version modifiée du script de Jmfayard toujours disponible à l'adresse Utilisateur:Jmfayard-fauxnez/Adq.pl