#!/usr/bin/perl -w
#Recupere les infos du jour donné en argument (date sous forme yyyy-mm-dd) puis genere une page
use strict;
use POSIX qw(strftime);
use POSIX qw(mktime);
use POSIX qw(locale_h);

# Pour avoir des dates en francais !
setlocale(LC_TIME,"fr_FR.utf8");


my $rooturl = "http://www.programme-tv.net/";
my $outdir="/srv/www/int/services/tv/programmes/";
my $wgetpath="/usr/bin/wget";
my $tempfileprefix = "/tmp/outprog.";
#doit on downloader les descriptions des programmes (300 pages a dl par jour environ) 1: actif, 0: inactif
my $download_descriptions = 0;

my $jour;
if($#ARGV < 0) {
	die("usage : ./getinfos <yyyy-mm-dd>");
} else {
	#on prend n jour de plus que aujourd'hui
	my $aavoir = 0;
	my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday);
	if($ARGV[0] =~ /\+(\d)/) {
		$aavoir = time+$1*24*3600;
		($sec,$min,$hour,$day,$mon,$year,$wday,$yday) = gmtime($aavoir);
		$year += 1900;
		$mon += 1;
		if($mon < 10) { $mon = "0".$mon; }
		if($day < 10) { $day = "0".$day; }

#		my @tbl = ("dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi");
#		$jour = $tbl[$wday];
#		@tbl = ('janvier','fevrier','mars','avril','mai','juin','juillet','ao&ucric;t','septembre','octobre','novembre','decembre');
#		$jour.=" ".$day." ".$tbl[$mon-1];
		
		$ARGV[0] = $year."-".$mon."-".$day ;
		$jour = $ARGV[0];
		
	} elsif($ARGV[0] =~ /\d\d\d\d\-\d\d\-\d\d/) {
		$jour = $ARGV[0];
	}
	
}

#Recuperation des fichiers temporaires principaux (c'est a dire la liste des programmes sans les descriptions)
my $useragent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050511";
if($rooturl !~ /\/$/) { $rooturl.='/'; }
my $nomfic = "tnt.html";
my $i = 1;
my $ligne;
while($i < 6) {
	my $url = $rooturl.$ARGV[0]."/2/".$i."/".$nomfic;
	system($wgetpath." -O ".$tempfileprefix.$ARGV[0].".".$i.".html -U '".$useragent."' ".$url." 2> /dev/null");
	$i++;
}
#parsing des fichiers temporaires
#les donnees sont stoquée dans %PROG ($PROG{$chaine}[$progind]{$attribut})
#attribut = 
#	nom
#	type
#	duree
#	heure
#	extras
#	liens
#	desc
my %PROG;
my @list_chaines;
my $chaine = "";
my %pind;
my $j = 1;
$i = 1;
my $fichier = "";
while($i < 5+1) {
	$fichier = $tempfileprefix.$ARGV[0].".".$i.".html";
	my $status = "OUT";
	my $total = "";
	$chaine = "";
	open(INFOS,$fichier) or die("Erreur : $fichier inexistant");
		# $ligne;
		while($ligne = <INFOS>) {
			if($ligne =~ /<div id="programme">/) {
				$status="IN";
				$total .= $ligne;
			} elsif($ligne =~ /<div id=bottom">/) {
				$status = "OUT";
			} elsif($status eq "IN") {
				$total .= $ligne;
			}
		}
	close(INFOS);
	my @ch = split(/<h2 class="grille"><em>\d+ programmes?<\/em>/,$total);
	$j = 1;

	while($j < $#ch+1) {
		my @pgm = split(/<span class="horaire">/,$ch[$j]);
		my ($heure,$nom,$type,$duree,$liens,$extras,$desc) = ("","","","","","","");
		#pgm[0] contient l'info de la chaine le reste sont les programmes effectifs de la chaine
		if($pgm[0] =~ /^<img src=".+" alt="(.+)" \/><\/h2>.+<a href="\/(.+)" title=".+">/) {
			$liens = $rooturl.$2;
			$chaine = $1;
			$list_chaines[$j-1] = $chaine;
			$chaine =~ s/\s//g;
			$chaine =~ s/LaCha&icirc;neparlementaire/LCP/;
			$chaine =~ s/Canal\+/Canalplus/;
			
			if(!defined($pind{$chaine})) { $pind{$chaine} = 0; }
			my $k = 1;
			while($k < $#pgm+1) {
				if($pgm[$k] =~ s/^(\d\d)h<span class="minute">(\d\d)<\/span>\s//) {
					$heure = $1.":".$2;
					if($pgm[$k] =~ s/^<span class="nomProgramme">(.+)<\/span><\/span>//) {
						$nom = $1;
						if($pgm[$k] =~ s/^<em>(.*)<\/em>//) {
							$type = $1;
							if($pgm[$k] =~ s/.+\((.+)\)\s*(<strong>.*<\/strong>)?\s*\|?\s*<br\/>//) {
								$duree = $1;
								$extras = $2;
								if(defined($extras)) {
									$extras =~ s/<strong>//;
									$extras =~ s/<\/strong>//;
								} else {
									$extras = "";
								}
								#get_parse() definie en fin de fichier
								$desc = "";
								if($download_descriptions == 1) { $desc = get_parse($liens); }
								$PROG{$chaine}[$pind{$chaine}] = { nom=>$nom,type=>$type,heure=>$heure,duree=>$duree,liens=>$liens,extras=>$extras,desc=>$desc };
								$pind{$chaine}++;
#								print $nom."\n".$liens."\n";
								$liens = "";
								if($pgm[$k] =~ s/.+<a href="\/(.+)" title=".+">//) { $liens = $rooturl.$1; }
							} else {
								print "cas 1 : \n".$pgm[$k]."\n";
							}
						} else {
							print "cas 2 : \n".$pgm[$k]."\n";
						}
					}
				}
				$k++;
			}
		}
		$j++;
	}
	$i++;
}

#les chaines sont (dans l'ordre) :
#TF1
#France2
#France3
#Canal+
#France5
#Arte
#M6
#NT1
#Direct8
#W9
#NRJ12
#TMC
#LaChaineParlementaire
print "Mise en forme :\n";
print "State\t--\tNpgm\t--\tNom\n";
#voila on a charger dans %PROG une serie d'objet comportant les programmes, plus qu'a afficher
my $ladate = $ARGV[0];
$ladate =~ s/\-//g;
my ($elem,$nomchaine) = ("","");
foreach $chaine (@list_chaines) {
	$nomchaine = $chaine;
	$chaine =~ s/\s//g;
	$chaine =~ s/LaCha&icirc;neparlementaire/LCP/;
	$chaine =~ s/Canal\+/Canalplus/;
	$fichier = $outdir.$chaine.$ladate.".xml";
	open(CHOUT,">".$fichier) or die("Echec d'ouverture/ecriture pour $fichier");

		my $mday = substr($jour,8,2);
		my $mon = substr($jour,5,2) - 1;
		my $year = substr($jour,0,4) - 1900;
		my $date_du_prog=strftime "%A %e %B %Y", localtime(mktime(1,0,0,$mday,$mon,$year,-1,0,-1));

		print CHOUT "<h2>Liste des programmes du ".$date_du_prog." de la cha&icirc;ne $nomchaine</h2>\n\n";
#		print CHOUT "<p>Le tableau ci-dessous pr&eacute;sente la liste des programmes sur la chaine $chaine.</p>\n\n";
		print CHOUT "<table class='progtv'>\n";
		print CHOUT "<tr>\n";
		for($j = 0;$j<$pind{$chaine};$j+=1) {
			$elem = "";
			if($j+1>=$pind{$chaine}) {
				$elem = " colspan=2";
			}
			print CHOUT "<td class='progtv'".$elem."><div class='progtv'>\n<h3>".$PROG{$chaine}[$j]{'heure'}." -- ".$PROG{$chaine}[$j]{'nom'}."</h3>\n<p>";
			print CHOUT $PROG{$chaine}[$j]{'type'}." ";
			if(!($PROG{$chaine}[$j]{'extras'} eq '')) { print CHOUT "(".$PROG{$chaine}[$j]{'extras'}.")"; }
			print CHOUT " de ".$PROG{$chaine}[$j]{'duree'};
			print CHOUT "<br/>\n";
			if($PROG{$chaine}[$j]{'desc'} eq "") {
				print CHOUT "<a href='".$PROG{$chaine}[$j]{'liens'}."' title='Description de $PROG{$chaine}[$j]{'nom'}'>Description</a>\n";
			} else {
				print CHOUT $PROG{$chaine}[$j]{'desc'}."\n";
			}
			print CHOUT "</p>\n</div></td>\n";
			if($j % 2 == 1) {
				print CHOUT "</tr>\n";
				if($j+1<$pind{$chaine}) {
					print CHOUT "<tr>\n";
				}
			}
		}
		print CHOUT "</table>\n";
		print CHOUT '<p>Cette cha&icirc;ne peut ne pas &ecirc;tre diffus&eacute;e actuellement par le ResEl. Le choix des cha&icirc;nes est laiss&eacute; &agrave; la discr&eacute;tion du ResEl.<br />Vous pouvez cependant nous contacter occasionnellement sur <a href="mailto:tv@resel.fr">tv@resel</a>.</p>'."\n"."<hr /><p><em>Page cr&eacute;&eacute;e par St&eacute;phane Cance, promo 2007</em></p>";
	close(CHOUT);
	print "Done.\t--\t$j\t--\t$chaine\n";
}
#suppréssion des fichiers temporaires
for($i=1;$i<5+1;$i++) {
	unlink($tempfileprefix.$ARGV[0].".".$i.".html");
}


#get_parse(liens) doit downloader un fichier de description (fourni en argument) puis le parser et renvoyer la description
#ici $contenu dispose des infos suivantes :
#Durée (déjà connue), Son (stereo|mono), VOst ou non (déjà connu), ss titre malentendant, ratio, direct, clair (semble non pertinent), CSA (public autorisé)
#je n'ai pas jugé important de le parser, c'est pas compliqué a rajouter.
sub get_parse {
	my ($liens) = @_;
#	if(($liens !~ /tmc-charme/)&&($liens !~ /bonanno/)) { return ""; 	} 
	my $description = "";
	my $contenu = "";
	my $ligne = "";
	my $record = 0;
	open(DESCFILE,$wgetpath." -q -U '".$useragent."' -O - ".$liens." |");
		while($ligne = <DESCFILE>) { 
			if($ligne =~ /<p style="margin(\-bottom)?:(\s|\d|em)+">/) { $record = 1; }
			if($ligne =~ /<div id="sidePubTableau">/) { $record = 0; }
			if($record == 1) { $contenu.=$ligne; }
		}
	close(DESCFILE);
#	if($liens !~ /bonanno/) { print $contenu; }
	my $contenu2 = $contenu;
	if($contenu =~ s/(^<p style="margin(\-bottom)?:(\s|\d|em)+">(.|\n)+<\/p>)[\n\s]*<table//) {
		$description = $1;
		$description =~ s/<p style="margin(\-bottom)?:[\s\dem]+">/<p class='descprogtv'>/g;
	}
	if($description eq "") { print "oups $liens\n\n";exit(1); }
	return $description;
}
