#!/usr/bin/perl
#
# Récupérer toutes les photographies de jolies demoiselles du site www.bonjourmadame.fr.
#
# $Id       : bonjour-madame.pl $
# $HeadURL  : http://bobotig.fr/contenu/contrib/scripts/bonjour-madame.pl $
# $Source   : http://bobotig.fr/contenu/contrib/scripts/bonjour-madame.pl $
# $Author   : BoboTiG $
# $Revision : 9 $
# $Date     : 2012/01/29 $
#
# ----------------------------------------------------------------------
#
# 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;
#
# ----------------------------------------------------------------------
#
# Chronologie
#	[ 29 janvier 2012 ]
#		- amélioration de l'affichage
#	[ 12 décembre 2011 ]
#		- mise à jour des regexp
#	[ 07 juillet 2011 ]
#		- meilleure détermination de l'extension (et fonctionnelle... !)
#	[ 18 juin 2011 ]
#		- correction de la détermination de l'extension
#		- utilisation de say préférée à print
#	[ 04 avril 2011 ]
#		- ajout d'un sleep si erreur
#	[ 11 septembre 2010 ]
#		- création des images en mode binaire
#		- diverses modifications
#	[ 30 août 2010 ]
#		- suppression du comptage des images déjà téléchargées (inutile)
#		- ajout d'une variable pour ignorer certaines images
#	[ 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
#	[ 20 août 2010 ]
#		- vérifier que toutes les photos soient téléchargées
#		- télécharger seulement les photos manquantes
#

use 5.010;
use LWP::UserAgent;
use autodie 'close';
use strict;
use warnings;


# Variables ------------------------------------------------------------
our $VERSION = 0.99;
my $ua; 
my $requete;
my $total;
my $i;
my $erreur = 0;
my $ignorer = ':366:392:';
my $agent = 'Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0 Iceweasel/8.0';
my $lien = 'http://www.bonjourmadame.fr';


# 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...';
	exit 1;
}
($total) = $requete->content =~ m/<div id="pages">Page 1 of (.+)<\/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 !';
while ( $i > 0 ) {
	my $num = $total - $i;
	if ( -e $num.'.jpg' || -e $num.'.png' || $ignorer =~ m/:($num):/ ) {
		--$i;
		next;
	}
	$requete = $ua->get($lien.'/page/'.$i);
	if ( ! $requete->is_success ) {
		printf "\n".'    ! %4d (%d) *'."\n", $num, $i;
		$erreur = 1;
		--$i;
		next;
	}
	my ($image, undef, undef) = $requete->content =~ m#<a href="(.+)"><img src="(.*)" alt="(.*)" /></a>#m;
	if ( ! $image ) { ($image, undef) = $requete->content =~ m#<img src="(.+)" alt="(.*)" />#m; }
	if ( ! $image ) { ($image) = $requete->content =~ m#\[<a href="(.+)">2D</a>]#m; }
	if ( $image ) {
		# Récupération de la photo
		my $salut_toi = $ua->get($image);
		if ( ! $salut_toi->is_success ) {
			printf "\n".'    ! %4d (%d) **'."\n", $num, $i;
			--$i;
			$erreur = 1;
			next;
		}
		
		# Détermination de l'extension
		my $img; my $ext; my $trois_octets;
		$trois_octets  = sprintf '%02x', ord(substr($salut_toi->content, 0, 1));
		$trois_octets .= sprintf '%02x', ord(substr($salut_toi->content, 1, 1));
		$trois_octets .= sprintf '%02x', ord(substr($salut_toi->content, 2, 1));
		if ( $trois_octets eq 'ffd8ff' ) {
			$ext = '.jpg';
		} elsif ( $trois_octets eq '89504e' ) {
			$ext = '.png';
		} else {
			$ext = '.inc'
		}
		$img = $num.$ext;
		
		# Création de l'image
		if ( open my $SLT, '>>', $img ) {
			binmode $SLT;
			print {$SLT} $salut_toi->content;
			close $SLT;
			print "\r".'    + '.$num;
		} else {
			printf "\n".'    ! %04d (%d) ***'."\n", $num, $i;
			$erreur = 1;
		}
	}
	--$i;
}
if ( $erreur ) {
	say <<'EOF';

 _ Erreurs du type :  ! 0222 ($num) (*|**|***)
    $num : numéro de l'image sur le site
       * : impossible de récupérer le contenu de la page
           http://www.bonjourmadame.fr/page/$num
      ** : impossible de télécharger l'image
     *** : impossible de créer le fichier image $img.jpg ou $img.png
EOF
	sleep 10;
}
say "\n".' ^ Finito !';
exit 0;

