#!/usr/bin/perl
#
# gabriel 2010/06/03
# gabriel 2011/04/01 update to biblehal
#
# apt-get install libwww-mechanize-perl libwww-perl

use strict;

use WWW::Mechanize;
use Data::Dumper;
use HTML::Form;

my $laboratory = shift @ARGV;
my $year       = shift @ARGV;

die "Usage /usr/lib/biblehal/biblehal-pop laboratory year\n" if $year < 1990 or $year > 2020; 

mkdir '/var/cache/biblehal/download', 0750;

my $F = <<END_HTML;
<form>
<select name="wanted_meta[]" id="wanted_meta" class="formulaire"  size="20" multiple>
<option value="id_article">Identifiant de l'article</option>
<option value="domain">Domaine</option>
<option value="title">Titre</option>
<option value="auteur_nomprenom">Auteurs (nom prénom)</option>
<option value="auteur_nominitial">Auteurs (nom initial prénom)</option>
<option value="pauteur_etal">1er auteur et al.</option>
<option value="laboratoire">Laboratoire</option>
<option value="sstitle">Sous-titre</option>
<option value="abstract">Résumé</option>
<option value="abstract_ml">Résumé (autre langue)</option>
<option value="langue">Langue du texte intégral</option>
<option value="writing_date">Date de production, écriture</option>
<option value="collaboration">Projet(s), collaboration(s)</option>
<option value="researchteam">&Eacute;quipe(s) de recherche</option>
<option value="doi">DOI</option>
<option value="journal">Journal</option>
<option value="titouv">Titre de l'ouvrage</option>
<option value="audience">Audience</option>
<option value="datepub">Date de publication</option>
<option value="anneepub">Année de publication</option>
<option value="dateepub">Date de publication électronique</option>
<option value="volume">Volume</option>
<option value="issue">Numéro</option>
<option value="page">Page, identifiant, ...</option>
<option value="edcom">Éditeur commercial</option>
<option value="edsci">Éditeur scientifique</option>
<option value="serie">Série/Collection</option>
<option value="titconf">Titre de la conférence</option>
<option value="dateconf">Date de la conférence</option>
<option value="anneeconf">Année de la conférence</option>
<option value="datefinconf">Date de la conférence (fin)</option>
<option value="ville">Ville</option>
<option value="pays">Pays</option>
<option value="dircoll">Directeur de collection</option>
<option value="description">Description</option>
<option value="numbrevet">Numéro du brevet</option>
<option value="datebrevet">Date de publication</option>
<option value="keyword">Mots Clés</option>
<option value="keyword_ml">Mots Clés (autre langue)</option>
<option value="motcle">Thésaurus EIAH</option>
<option value="keyword_mesh">Descripteur(s) MeSH</option>
<option value="keyword_jel">Mots Clés du JEL</option>
<option value="classification">Classification</option>
<option value="comment">Commentaire</option>
<option value="ref_interne">Référence interne</option>
<option value="financement">Contrat, financement</option>
<option value="projetanr">Projet ANR</option>
<option value="projeteurope">Projet Européen</option>
<option value="defencedate">date de soutenance</option>
<option value="orgthe">organisme de délivrance</option>
<option value="thesis_school">école doctorale</option>
<option value="speciality">spécialit&eacute;</option>
<option value="directeurThese">directeur de th&egrave;se</option>
<option value="jury">composition du Jury</option>
<option value="presidentHDR">pr&eacute;sident du jury</option>
<option value="niveau">Niveau du cours</option>
<option value="lieucours">Lieu du cours</option>
<option value="arxivid">Identifiant arXiv</option>
<option value="typdoc">Type de publication</option>
<option value="havefile">Dépôt avec/sans fichier</option>
<option value="yearstamp">Date de dépôt</option>
<option value="file_url">URL fichier PDF</option>
<option value="contributor">Contributeur</option>
</select>
</form>
END_HTML

# On intègre le second formulaire qui se remplit normalement via un javascript
my $parser = HTML::Form->parse("$F", "http://hal.archives-ouvertes.fr/$laboratory");
    print($@) if $@;
#print Dumper $parser;


# Création du bot
my $url = "http://hal.archives-ouvertes.fr/$laboratory";
my $bot = WWW::Mechanize->new;
   $bot->env_proxy(); # Load proxy settings from *_proxy environment variables
 
# Hop, c'est parti, premiere page
$bot->get($url);

#my ( $firstoccur ) = grep /service_export/, split /\n/, $bot->content;
# &halsid=tgtdq7gpp47p64fd67u2imrfv1&label
#my ( $halsid ) = $firstoccur =~ m{ \& halsid = ([\w\d]+) \& label }xm;
#print "SESSIONID : $halsid\n";
#my $url2 = 'http://hal.archives-ouvertes.fr/view_by_stamp.php?&halsid='.$halsid.'&label=LEGI&langue=fr&action_todo=service_export';
#$bot->get($url2);

# On suit le lien pour exporter les publications du LEGI

# <a class="niveau2" href="http://hal.archives-ouvertes.fr/view_by_stamp.php?&halsid=9ovethbls6kjlaje8ma9pf67b6&label=LEGI&langue=fr&action_todo=service_export" target="_self">Export d'une liste de publications</a>
$bot->follow_link( text_regex => qr/Export\sd.une\sliste\sde\spublications/, url_regex => qr/action_todo=service_export/ );

# Hop, seconde page, on choisis le premier (et seul) formulaire
$bot->form_number(1);

# Choix de l'année
$bot->select( 'f_0' => 'YEAR' );
$bot->select( 'p_0' => 'is_exactly' );
$bot->field(  'v_0' => "$year" );

# Format simplifié de la structure "current_form"
#inputs
#'name' => 'search_in_typdoc[]',
#'menu' => [
#            {
#              'seen' => 1,
#              'value' => undef,
#              'name' => 'off'
#            },
#            {
#              'value' => 'ART_ACL',
#              'name' => 'Articles dans des revues avec comitÃ© de lecture'
#            }
#          ],
#'name' => 'search_in_typdoc[]',

# On récupère dans le formulaire la liste des types de documents
my @typdoc = ();
foreach my $item ( @{$bot->current_form->{inputs}} ) {
   next if not $item->{'name'} eq 'search_in_typdoc[]';
   
   #print "TYPDOCi : ".$item->{'menu'}[1]{'value'}."\n";
   push @typdoc, $item->{'menu'}[1]{'value'};
   }
#print "TYPDOC : @typdoc\n";

$bot->select( 'search_in_typdoc[]' => \@typdoc );
#$bot->select( 'search_in_typdoc[]' => [ 'THESE' ]);
$bot->click( 'submit' );

#print $bot->content;
#print Dumper $bot->current_form;

# Hop, troisième page, on prends le second formulaire
$bot->form_number(2);

#print Dumper $bot->current_form;

# On intègre à la main les valeurs dans le formulaire 
# qui se fait en javascript via firefox
foreach my $input ( @{$parser->{inputs}} ) {
   push @{$bot->current_form->{inputs}}, $input;
   }

# On récupère dans le formulaire la liste des items à exporter
my @wanted_meta = ();
foreach my $item ( @{$bot->current_form->{inputs}} ) {
   next if not $item->{'name'} eq 'wanted_meta[]';
   
   #print "WANTED_METAi : ".$item->{'menu'}[1]{'value'}."\n";
   push @wanted_meta, $item->{'menu'}[1]{'value'};
   }
#print "WANTED_META : @wanted_meta\n";

#print Dumper $bot->current_form;

$bot->select( 'wanted_meta[]' => \@wanted_meta);
#$bot->select( 'wanted_meta[]' => [ 'id_article', 'title', 'auteur_nomprenom','yearstamp'  ]);
$bot->select( 'export_format' => [ 'BIBTEX' ]);
$bot->click( 'submit' );
  
print $bot->content;

# Hop, quatrième page. On récupère l'URL du fichier temporaire sur le serveur

my ( $biburlline ) = grep /http\:\/\/hal\.archives-ouvertes\.fr\/tmp\/hal/, split /\n/, $bot->content;
my ( $biburl ) = $biburlline =~ m{ ( http://hal\.archives-ouvertes\.fr/ tmp/ hal[\w\d]+\.bib ) }xm;
$bot->get("$biburl", ':content_file' => "/var/cache/biblehal/download/hal-extract-auto-$year.bib" );
print "URLLINE : $biburlline\n";
print "URL : $biburl\n";

#<td align="left" class="help"><a href="http://hal.archives-ouvertes.fr/tmp/hal4ba60dfe813c7.bib" target="_blank"><span style="font-size:14px;font-weight:bold;">TÃ©lÃ©charger le fichier crÃ©Ã© ici</span></a></td>
#<td align="left" class="help"><a href="http://hal.archives-ouvertes.fr/tmp/hal4bb4b8ed6cae6.bib" target="_blank"><span style="font-size:14px;font-weight:bold;">TÃ©lÃ©charger le fichier crÃ©Ã© ici</span></a></td>
#my $biburl = $bot->find_link(text_regex => qr/ici/, url_regex  => qr/http:\/\/hal\.archives-ouvertes\.fr\/tmp\/hal[\d\w]+\.bib/);
##my $biburl = $bot->find_link(url_regex  => qr/http:\/\/hal\.archives-ouvertes\.fr\/tmp\/hal[\d\w]+\.bib/);
##sleep 5;
##$bot->get( $biburl->url(), ':content_file' => '/tmp/hal-extract-auto.bib' );

# Hop, le fichier .bib est sauvé sous /tmp/hal-extract-auto.bib
# Mission accomplie
