Created
December 22, 2015 09:37
-
-
Save BarthV/72f9c4693b66fa41d1b2 to your computer and use it in GitHub Desktop.
bonjour-madame.pl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
# | |
# Récupérer les photographies des jolies dames de www.bonjourmadame.fr. | |
# | |
# $Id : bonjour-madame.pl $ | |
# $HeadURL : https://bobotig.fr/contenu/contrib/scripts/bonjour-madame.pl $ | |
# $Source : https://bobotig.fr/contenu/contrib/scripts/bonjour-madame.pl $ | |
# $Author : BoboTiG $ | |
# $Revision : 16 $ | |
# $Date : 2013/06/27 $ | |
# | |
# ---------------------------------------------------------------------- | |
# | |
# La 1ère madame date du 19 mars 2009. | |
# | |
# Usage : perl bonjour-madame.pl | |
# | |
# ! Attention ! Ce script va télécharger toutes les images dans le | |
# dossier courant. | |
# | |
# ---------------------------------------------------------------------- | |
# | |
# Dépendance : | |
# - cpan -i LWP::UserAgent; | |
# | |
# ---------------------------------------------------------------------- | |
# | |
# Historique | |
# [ 20 août 2010 ] | |
# - vérifier que toutes les photos soient téléchargées | |
# - télécharger seulement les photos manquantes | |
# [ 25 août 2010 ] | |
# - script portable, utilisation de commandes perl plutôt que sh | |
# - regexp fixées, téléchargement des HD en priorité | |
# - code revu, plus court et pertinent | |
# [ 30 août 2010 ] | |
# - suppression du comptage des images déjà téléchargées (inutile) | |
# - ajout d'une variable pour ignorer certaines images | |
# [ 11 septembre 2010 ] | |
# - création des images en mode binaire | |
# - diverses modifications | |
# [ 04 avril 2011 ] | |
# - ajout d'un sleep si erreur | |
# [ 18 juin 2011 ] | |
# - correction de la détermination de l'extension | |
# - utilisation de say préférée à print | |
# [ 07 juillet 2011 ] | |
# - meilleure détermination de l'extension (et fonctionnelle... !) | |
# [ 12 décembre 2011 ] | |
# - mise à jour des regexp | |
# [ 29 janvier 2012 ] | |
# - amélioration de l'affichage | |
# [ 31 juillet 2012 ] | |
# - correction de l'affichage | |
# - correction des doublons de la 637 à 709 | |
# [ 04 août 2012 ] | |
# - correction de la récupération de certains images depuis la 1270 | |
# - correction de la regexp pour la récupération du lien de l'image | |
# - modification du shebang | |
# - revue du système d'erreur | |
# [ 06 août 2012 ] | |
# - prise en compte des images GIF | |
# - ajout des fonctions est_windows(), existe() et type() | |
# - prise en compte correcte du caractère de retour à la ligne | |
# [ 15 octobre 2012 ] | |
# - màj des regexp pour prendre en compte la nouvelle mise en page | |
# [ 16 mai 2013 ] | |
# - màj des regexp pour la capture des images | |
# - màj de l'user-agent | |
# [ 22 mai 2013 ] | |
# - màj de la regexp pour la capture du nombre total d'images | |
# - prise en compte des données compressées (GZIP) | |
# [ 27 juin 2013 ] | |
# - màj de la regexp pour la capture du lien de l'image | |
# | |
use 5.010; | |
use LWP::UserAgent; | |
use autodie 'close'; | |
use strict; | |
use warnings; | |
# Variables ------------------------------------------------------------ | |
our $VERSION = '1.4.1'; | |
my $ua; my $requete; | |
my $total; my $i; | |
my $ignorer = | |
':366:392:639:640:642:644:646:648:650:652:654:656:658:660:662:664'. | |
':666:668:670:672:678:680:682:684:686:688:690:692:692:694:696:698'. | |
':700:702:704:707:709:'; | |
my $agent = | |
'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) '. | |
'Gecko/20130515 Firefox/17.0 Iceweasel/17.0.6'; | |
my $lien = 'http://www.bonjourmadame.fr'; | |
my $retour = "\e[A"; | |
sub est_windows { | |
my $se = $^O; | |
return ( $se eq 'dos' or $se eq 'MSWin32' ); | |
} | |
sub existe($) { | |
my $img = shift; | |
return ( -e $img.'.gif' || -e $img.'.jpg' || | |
-e $img.'.png' || $ignorer =~ m/:($img):/ ); | |
} | |
sub type($) { | |
my $hex = shift; | |
my $trois_octets = | |
sprintf('%02x', ord(substr($hex, 0, 1))). | |
sprintf('%02x', ord(substr($hex, 1, 1))). | |
sprintf('%02x', ord(substr($hex, 2, 1))); | |
my $ext = undef; | |
if ( $trois_octets eq '474946' ) { | |
$ext = '.gif'; | |
} elsif ( $trois_octets eq 'ffd8ff' ) { | |
$ext = '.jpg'; | |
} elsif ( $trois_octets eq '89504e' ) { | |
$ext = '.png'; | |
} | |
return $ext; | |
} | |
# C'est parti mon kiki ! ----------------------------------------------- | |
say ' ~ bonjour-madame.pl v'.$VERSION.' { BoboTiG }.'; | |
$ua = LWP::UserAgent->new(); | |
$ua->agent($agent); | |
$requete = $ua->get($lien); | |
if ( !$requete->is_success ) { | |
say ' ! Connexion merdique... | Err : '.$requete->status_line; | |
exit 1; | |
} | |
($total) = $requete->decoded_content =~ m#Page 1 <em>sur</em> ([0-9]+)</div>#; | |
if ( !defined $total ) { | |
say ' ! Nombre de pages inconnu... Retente plus tard.'; | |
exit 1; | |
} | |
$i = $total - 1; | |
say ' > Total : '.$i.' ; c\'est parti mon kiki !'; | |
$retour = "\r" unless ! est_windows(); | |
while ( $i > 0 ) { | |
my $num = $total - $i; | |
if ( existe($num) ) { | |
say ' + '.$num.$retour unless est_windows(); | |
--$i; | |
next; | |
} | |
$requete = $ua->get($lien.'/page/'.$i); | |
if ( !$requete->is_success ) { | |
say ' ! Arf : '.$num.' | Err : '.$requete->status_line; | |
--$i; | |
next; | |
} | |
my $image; | |
($image) = $requete->decoded_content =~ m#class="photo-url" href="(.+)">View Separately</a>#m; | |
if ( !$image ) { ($image, undef) = $requete->decoded_content =~ m#<a href="(.+)"><img src="(.*)" alt=#m; } | |
if ( !$image ) { ($image, undef) = $requete->decoded_content =~ m#<img src="(.+)" alt="(.*)"\s*/>#m; } | |
if ( !$image ) { ($image) = $requete->decoded_content =~ m#<img src="(.+)" alt=""/>#m; } | |
if ( !$image ) { ($image) = $requete->decoded_content =~ m#\[<a href="(.+)">2D</a>]#m; } | |
if ( $image && $image =~ m#^http://www.bonjourmadame.fr/image/#m ) { | |
(undef, $image) = $ua->get($image)->decoded_content =~ m#<img id="image" class="(.*)" src="(.+)"/>#m; | |
} | |
if ( $image ) | |
{ | |
# Récupération de la photo | |
my $salut_toi = $ua->get($image); | |
if ( !$salut_toi->is_success ) { | |
say ' ! Arf : '.$num.' | Err : '.$salut_toi->status_line; | |
say $image; exit; | |
--$i; | |
next; | |
} | |
# Détermination de l'extension | |
my $ext = type(substr($salut_toi->content, 0, 3)); | |
if ( !$ext ) { | |
say ' ! Arf : '.$num.' | Err : extension pourrave.'; | |
--$i; | |
next; | |
} | |
# Création de l'image | |
my $img = $num.$ext; | |
if ( open my $SLT, '>>', $img ) { | |
binmode $SLT; | |
print {$SLT} $salut_toi->content; | |
close $SLT; | |
say ' + '.$num.$retour; | |
} else { | |
say ' ! Arf : '.$num.' | Err : '.$!; | |
} | |
} else { | |
say ' ! Arf : '.$num.' | Err : impossible de trouver l\'image.'; | |
say $requete->decoded_content | |
} | |
--$i; | |
} | |
say ' ^ Finito !'; | |
exit 0; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment