Utilisateur:Poleta33/code academiciens
Apparence
use Date::Calc qw(:all);
use File::Copy;
use utf8;
use warnings;
use strict;
$| = 1; # why not
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla 8.0 blah...");
$ua->proxy(['http', 'ftp'], 'http://********.****-**.**:80/');
$ua->timeout(3);
my (@refrun,@ref);
my ($line,$fauteuil,$academicien,$fauteuilsort)=('','','');
my ($i,$j,$k,$ii)=(0);
my $result;
my $counter;
my ($initacam);
my @mois =('janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
my ($Daypast,$Monthpast,$Yearpast);
my $error=0;
sub formatacam()
{
my ($initacaminit,$initacam1,$ki)=($_[0]);
my (@caracteres,@tirets);
$initacaminit =~ s/\ \;/ /g;
@caracteres=@tirets=();
$ki=0;
$initacam1=$initacaminit;
if ( $initacaminit =~ m/-/ )
{
for $k ( 0 .. length($initacam1)-1 )
{
$result=index($initacam1,'-');
if ( $result != -1 )
{
$tirets[$ki]=$result;
$ki=$ki+1;
$initacam1 =~ s/-/ /;
}
else
{
last;
}
}
}
$initacam1='';
@caracteres = split(/-/, $initacaminit);
foreach (@caracteres)
{
$initacam1=$initacam1." ".ucfirst(lc($_));
}
$initacaminit=substr($initacam1,1);
$initacam1='';
@caracteres = split(/ /, $initacaminit);
foreach (@caracteres)
{
$initacam1=$initacam1." ".ucfirst(lc($_));
}
$initacaminit=substr($initacam1,1);
foreach (@tirets)
{
my $dummy = substr $initacaminit, $_, 1, '-' ;
}
$initacaminit =~ s/De /de /g;
return $initacaminit;
}
sub printfinal()
{
my ($pacam,$pfauteuil,$pdate)=($_[0],$_[1],$_[2]);
my ($pfday,$pfmonth,$pfyear);
$pfday=substr($pdate,6,2);
if ( substr($pfday,0,1) == 0) {$pfday=substr($pfday,1,1)};
$pfmonth=substr($pdate,4,2);
$pfyear=substr($pdate,0,4);
if ( substr($pfauteuil,0,1) == 0) {$pfauteuil=substr($pfauteuil,1,1)};
open(FILE1,">>:utf8","C:/Temp/resultdate3.html") or die "open: $!";
print "* Élection le $pfday $mois[$pfmonth - 1] $pfyear : [[$pacam]] ([[Liste_des_membres_de_l'Académie_française_par_fauteuil#Fauteuil_$pfauteuil|Fauteuil $pfauteuil]])\n";
print FILE1 "* Élection le $pfday $mois[$pfmonth - 1] $pfyear : [[$pacam]] ([[Liste_des_membres_de_l'Académie_française_par_fauteuil#Fauteuil_$pfauteuil|Fauteuil $pfauteuil]])\n";
close(FILE1);
}
sub almostprintfinal()
{
my ($pacam,$pfauteuil,$pdate)=($_[0],$_[1],$_[2]);
open(FILE1,">>:utf8","C:/Temp/resultdate2.html") or die "open: $!";
print FILE1 "$pdate:$pfauteuil:$pacam\n";
close(FILE1);
}
my $Day=31;
my $Month=12;
my $Year=2008;
open (LOGFILE, ">C:/Temp/test.log");
while ( $Year >= 2009 )
{
while ( $Month !=0 )
{
while ( $Day != 0 )
{
if (check_date($Year,$Month,$Day))
{
if (length($Day) == 1){$Day="0".$Day;}
if (length($Month) == 1){$Month="0".$Month;}
print "Date : $Day $mois[$Month-1] $Year \n";
print LOGFILE "Date : $Day $mois[$Month-1] $Year \n";
print " Begin - Searching source data\n";
print LOGFILE " Begin - Searching source data\n";
my $req = (POST 'http://www.academie-francaise.fr/immortels/base/academiciens/composition_af.asp',
["jour" => "$Day",
"mois" => "$Month",
"annee" => "$Year",
"Submit3322" => "validez"]);
my $request = $ua->request($req);
my $content = $request->content;
print " End - Searching source data\n";
print LOGFILE " End - Searching source data\n";
if ( $content =~ m/(.*)reponse_negative.asp(.*)/ )
{
for $j ( 1 .. 40 )
{
for $ii (0..10)
{
if ( defined $ref[$j][$ii] )
{
if ( $ref[$j][$ii] ne "Vacant" )
{
$initacam=&formatacam($ref[$j][$ii]);
if ( length($j) == 1)
{
$fauteuilsort="0$j";
}
else
{
$fauteuilsort="$j";
}
print "Election le $Daypast $mois[$Monthpast - 1] $Yearpast, fauteuil : $fauteuilsort, academicien : $initacam\n";
print LOGFILE " Election le $Daypast $mois[$Monthpast - 1] $Yearpast, fauteuil : $fauteuilsort, academicien : $initacam\n";
open(FILE1,">>:utf8","C:/Temp/resultdate.html") or die "open: $!";
print FILE1 "$fauteuilsort:$initacam:$Yearpast$Monthpast$Daypast\n";
close(FILE1);
}
}
else
{
last;
}
}
}
goto SORTIE;
}
if ( not $content =~ m/(.*)fiche.asp(.*)/ )
{
$error=1;
print $content;
print LOGFILE " $content\n";
print " Error ($Day $Month $Year) : again (sleeping 5)\n";
print LOGFILE " Error ($Day $Month $Year) : again (sleeping 5)\n";
sleep 5;
}
else
{
$error=0;
open (LOG, ">:encoding(ISO-8859-1)","C:/Temp/test.html");
print LOG $content;
close (LOG);
open(FILE, "<:encoding(ISO-8859-1)","C:/Temp/test.html") or die "open: $!";
$ii=0;
while( defined( $line = <FILE> ) )
{
chomp $line;
if ( $line =~ m/(.*)<td><b>(.*)<\/b><\/td>(.*)/ ){$fauteuil=$2;}
if ( $line =~ m/(.*)<td><a href(.*)>(.*)<\/a><\/td>(.*)/ ){$academicien=$3;}
if ( $fauteuil ne "" && $academicien ne "")
{
for $ii (0..10)
{
if ( not defined $refrun[$fauteuil][$ii] )
{
$refrun[$fauteuil][$ii]=$academicien;
$fauteuil="";
$academicien="";
last;
}
}
}
}
close(FILE);
for $j ( 1 .. 40 )
{
if ( not defined $refrun[$j][0] )
{
print " Printing fauteuil : $j, academicien : Vacant\n";
$refrun[$j][0]="Vacant";
}
}
for $j ( 1 .. 40 )
{
$counter=0;
for $ii (0..10)
{
if ( defined $refrun[$j][$ii] )
{
$counter=$counter+1;
}
}
if ( $counter >= 2 )
{
for $ii (0..10)
{
if ( not defined $refrun[$j][$ii] )
{
last;
}
else
{
# print LOGFILE " counter $counter, fauteuil : $j, academ : $refrun[$j][$ii]\n";
if ( $i == 0 )
{
$initacam=&formatacam($refrun[$j][$ii]);
if ( length($j) == 1)
{
$fauteuilsort="0$j";
}
else
{
$fauteuilsort="$j";
}
print "Election le $Day $mois[$Month - 1] $Year, fauteuil : $fauteuilsort, academicien : $initacam\n";
print LOGFILE " Election le $Day $mois[$Month - 1] $Year, fauteuil : $fauteuilsort, academicien : $initacam\n";
open(FILE1,">>:utf8","C:/Temp/resultdate.html") or die "open: $!";
print FILE1 "$fauteuilsort:$initacam:$Year$Month$Day\n";
close(FILE1);
}
else
{
$initacam=&formatacam($refrun[$j][$ii]);
if ( length($j) == 1)
{
$fauteuilsort="0$j";
}
else
{
$fauteuilsort="$j";
}
print "Election le $Day $mois[$Month - 1] $Year, fauteuil : $fauteuilsort, academicien : $initacam\n";
print LOGFILE " Election le $Day $mois[$Month - 1] $Year, fauteuil : $fauteuilsort, academicien : $initacam\n";
open(FILE1,">>:utf8","C:/Temp/resultdate.html") or die "open: $!";
print FILE1 "$fauteuilsort:$initacam:$Year$Month$Day\n";
close(FILE1);
}
}
}
$ref[$j][0]="Zarbi";
}
else
{
# print LOGFILE " counter $counter, fauteuil : $j, academ : $refrun[$j][0]\n";
if ( $i == 0 )
{
$ref[$j][0]=$refrun[$j][0];
}
else
{
print LOGFILE " Ligne ($j) : $ref[$j][0],$refrun[$j][0]\n";
if ( $ref[$j][0] ne $refrun[$j][0] && $ref[$j][0] ne "Vacant" && $ref[$j][0] ne "Zarbi" )
{
$initacam=&formatacam($ref[$j][0]);
if ( length($j) == 1)
{
$fauteuilsort="0$j";
}
else
{
$fauteuilsort="$j";
}
print "Election le $Daypast $mois[$Monthpast - 1] $Yearpast, fauteuil : $fauteuilsort, academicien : $initacam\n";
print LOGFILE " Election le $Daypast $mois[$Monthpast - 1] $Yearpast, fauteuil : $fauteuilsort, academicien : $initacam\n";
open(FILE1,">>:utf8","C:/Temp/resultdate.html") or die "open: $!";
print FILE1 "$fauteuilsort:$initacam:$Yearpast$Monthpast$Daypast\n";
close(FILE1);
}
$ref[$j][0]=$refrun[$j][0];
}
}
}
@refrun=();
$Daypast=$Day;
$Monthpast=$Month;
$Yearpast=$Year;
$i=$i+1;
}
}
if ( $error == 0 ) { $Day = $Day -1; }
}
$Day=31;
$Month = $Month -1;
}
$Month=12;
$Year = $Year -1;
}
SORTIE:
copy('C:/Temp/resultdate.html', 'C:/Temp/resultdate1.html');
my ($fauteuilref,$academicienref,$Dateref,$Datenew)=('','','','');
my @tri;
$i=0;
open(FILE,"<:utf8","C:/Temp/resultdate1.html") or die "open: $!";
@tri = sort { $b cmp $a } <FILE>;
foreach (@tri)
{
if ( $_ =~ m/(.*)\:(.*)\:(.*)/ )
{
$fauteuil=$1;$academicien=$2;$Datenew=$3;
if ($i == 0)
{
$Dateref=$Datenew;$fauteuilref=$fauteuil;$academicienref=$academicien;
}
else
{
if ( $fauteuilref ne $fauteuil )
{
&almostprintfinal($academicienref,$fauteuilref,$Dateref);
}
elsif ( $academicienref ne $academicien )
{
&almostprintfinal($academicienref,$fauteuilref,$Dateref);
}
$Dateref=$Datenew;$fauteuilref=$fauteuil;$academicienref=$academicien;
}
$i=$i+1;
}
}
&almostprintfinal($academicien,$fauteuil,$Datenew);
close(FILE);
open(FILE,"<:utf8","C:/Temp/resultdate2.html") or die "open: $!";
@tri = sort { $b cmp $a } <FILE>;
foreach (@tri)
{
if ( $_ =~ m/(.*)\:(.*)\:(.*)/ )
{
$Datenew=$1;$fauteuil=$2;$academicien=$3;
&printfinal($academicien,$fauteuil,$Datenew);
}
}
close(FILE);
close (LOGFILE);