Skip to content

Instantly share code, notes, and snippets.

@BarthV
Created December 22, 2015 09:37
Show Gist options
  • Save BarthV/72f9c4693b66fa41d1b2 to your computer and use it in GitHub Desktop.
Save BarthV/72f9c4693b66fa41d1b2 to your computer and use it in GitHub Desktop.
bonjour-madame.pl
#!/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