source: trunk/biblehal-pop @ 6

Last change on this file since 6 was 6, checked in by g7moreau, 13 years ago
  • Delete ref to old LEGI proxy
  • Property svn:executable set to *
File size: 8.2 KB
Line 
1#!/usr/bin/perl
2#
3# gabriel 2010/06/03
4# gabriel 2011/04/01 update to biblehal
5#
6# apt-get install libwww-mechanize-perl libwww-perl
7
8use strict;
9
10use WWW::Mechanize;
11use Data::Dumper;
12use HTML::Form;
13
14my $laboratory = shift @ARGV;
15my $year       = shift @ARGV;
16
17die "Usage /usr/lib/biblehal/biblehal-pop laboratory year\n" if $year < 1990 or $year > 2020; 
18
19mkdir '/var/cache/biblehal/download', 0750;
20
21my $F = <<END_HTML;
22<form>
23<select name="wanted_meta[]" id="wanted_meta" class="formulaire"  size="20" multiple>
24<option value="id_article">Identifiant de l'article</option>
25<option value="domain">Domaine</option>
26<option value="title">Titre</option>
27<option value="auteur_nomprenom">Auteurs (nom prénom)</option>
28<option value="auteur_nominitial">Auteurs (nom initial prénom)</option>
29<option value="pauteur_etal">1er auteur et al.</option>
30<option value="laboratoire">Laboratoire</option>
31<option value="sstitle">Sous-titre</option>
32<option value="abstract">Résumé</option>
33<option value="abstract_ml">Résumé (autre langue)</option>
34<option value="langue">Langue du texte intégral</option>
35<option value="writing_date">Date de production, écriture</option>
36<option value="collaboration">Projet(s), collaboration(s)</option>
37<option value="researchteam">&Eacute;quipe(s) de recherche</option>
38<option value="doi">DOI</option>
39<option value="journal">Journal</option>
40<option value="titouv">Titre de l'ouvrage</option>
41<option value="audience">Audience</option>
42<option value="datepub">Date de publication</option>
43<option value="anneepub">Année de publication</option>
44<option value="dateepub">Date de publication électronique</option>
45<option value="volume">Volume</option>
46<option value="issue">Numéro</option>
47<option value="page">Page, identifiant, ...</option>
48<option value="edcom">Éditeur commercial</option>
49<option value="edsci">Éditeur scientifique</option>
50<option value="serie">Série/Collection</option>
51<option value="titconf">Titre de la conférence</option>
52<option value="dateconf">Date de la conférence</option>
53<option value="anneeconf">Année de la conférence</option>
54<option value="datefinconf">Date de la conférence (fin)</option>
55<option value="ville">Ville</option>
56<option value="pays">Pays</option>
57<option value="dircoll">Directeur de collection</option>
58<option value="description">Description</option>
59<option value="numbrevet">Numéro du brevet</option>
60<option value="datebrevet">Date de publication</option>
61<option value="keyword">Mots Clés</option>
62<option value="keyword_ml">Mots Clés (autre langue)</option>
63<option value="motcle">Thésaurus EIAH</option>
64<option value="keyword_mesh">Descripteur(s) MeSH</option>
65<option value="keyword_jel">Mots Clés du JEL</option>
66<option value="classification">Classification</option>
67<option value="comment">Commentaire</option>
68<option value="ref_interne">Référence interne</option>
69<option value="financement">Contrat, financement</option>
70<option value="projetanr">Projet ANR</option>
71<option value="projeteurope">Projet Européen</option>
72<option value="defencedate">date de soutenance</option>
73<option value="orgthe">organisme de délivrance</option>
74<option value="thesis_school">école doctorale</option>
75<option value="speciality">spécialit&eacute;</option>
76<option value="directeurThese">directeur de th&egrave;se</option>
77<option value="jury">composition du Jury</option>
78<option value="presidentHDR">pr&eacute;sident du jury</option>
79<option value="niveau">Niveau du cours</option>
80<option value="lieucours">Lieu du cours</option>
81<option value="arxivid">Identifiant arXiv</option>
82<option value="typdoc">Type de publication</option>
83<option value="havefile">Dépôt avec/sans fichier</option>
84<option value="yearstamp">Date de dépôt</option>
85<option value="file_url">URL fichier PDF</option>
86<option value="contributor">Contributeur</option>
87</select>
88</form>
89END_HTML
90
91# On intègre le second formulaire qui se remplit normalement via un javascript
92my $parser = HTML::Form->parse("$F", "http://hal.archives-ouvertes.fr/$laboratory");
93    print($@) if $@;
94#print Dumper $parser;
95
96
97# Création du bot
98my $url = "http://hal.archives-ouvertes.fr/$laboratory";
99my $bot = WWW::Mechanize->new;
100   $bot->env_proxy(); # Load proxy settings from *_proxy environment variables
101 
102# Hop, c'est parti, premiere page
103$bot->get($url);
104
105#my ( $firstoccur ) = grep /service_export/, split /\n/, $bot->content;
106# &halsid=tgtdq7gpp47p64fd67u2imrfv1&label
107#my ( $halsid ) = $firstoccur =~ m{ \& halsid = ([\w\d]+) \& label }xm;
108#print "SESSIONID : $halsid\n";
109#my $url2 = 'http://hal.archives-ouvertes.fr/view_by_stamp.php?&halsid='.$halsid.'&label=LEGI&langue=fr&action_todo=service_export';
110#$bot->get($url2);
111
112# On suit le lien pour exporter les publications du LEGI
113
114# <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>
115$bot->follow_link( text_regex => qr/Export\sd.une\sliste\sde\spublications/, url_regex => qr/action_todo=service_export/ );
116
117# Hop, seconde page, on choisis le premier (et seul) formulaire
118$bot->form_number(1);
119
120# Choix de l'année
121$bot->select( 'f_0' => 'YEAR' );
122$bot->select( 'p_0' => 'is_exactly' );
123$bot->field(  'v_0' => "$year" );
124
125# Format simplifié de la structure "current_form"
126#inputs
127#'name' => 'search_in_typdoc[]',
128#'menu' => [
129#            {
130#              'seen' => 1,
131#              'value' => undef,
132#              'name' => 'off'
133#            },
134#            {
135#              'value' => 'ART_ACL',
136#              'name' => 'Articles dans des revues avec comité de lecture'
137#            }
138#          ],
139#'name' => 'search_in_typdoc[]',
140
141# On récupère dans le formulaire la liste des types de documents
142my @typdoc = ();
143foreach my $item ( @{$bot->current_form->{inputs}} ) {
144   next if not $item->{'name'} eq 'search_in_typdoc[]';
145   
146   #print "TYPDOCi : ".$item->{'menu'}[1]{'value'}."\n";
147   push @typdoc, $item->{'menu'}[1]{'value'};
148   }
149#print "TYPDOC : @typdoc\n";
150
151$bot->select( 'search_in_typdoc[]' => \@typdoc );
152#$bot->select( 'search_in_typdoc[]' => [ 'THESE' ]);
153$bot->click( 'submit' );
154
155#print $bot->content;
156#print Dumper $bot->current_form;
157
158# Hop, troisième page, on prends le second formulaire
159$bot->form_number(2);
160
161#print Dumper $bot->current_form;
162
163# On intègre à la main les valeurs dans le formulaire
164# qui se fait en javascript via firefox
165foreach my $input ( @{$parser->{inputs}} ) {
166   push @{$bot->current_form->{inputs}}, $input;
167   }
168
169# On récupère dans le formulaire la liste des items à exporter
170my @wanted_meta = ();
171foreach my $item ( @{$bot->current_form->{inputs}} ) {
172   next if not $item->{'name'} eq 'wanted_meta[]';
173   
174   #print "WANTED_METAi : ".$item->{'menu'}[1]{'value'}."\n";
175   push @wanted_meta, $item->{'menu'}[1]{'value'};
176   }
177#print "WANTED_META : @wanted_meta\n";
178
179#print Dumper $bot->current_form;
180
181$bot->select( 'wanted_meta[]' => \@wanted_meta);
182#$bot->select( 'wanted_meta[]' => [ 'id_article', 'title', 'auteur_nomprenom','yearstamp'  ]);
183$bot->select( 'export_format' => [ 'BIBTEX' ]);
184$bot->click( 'submit' );
185 
186print $bot->content;
187
188# Hop, quatrième page. On récupère l'URL du fichier temporaire sur le serveur
189
190my ( $biburlline ) = grep /http\:\/\/hal\.archives-ouvertes\.fr\/tmp\/hal/, split /\n/, $bot->content;
191my ( $biburl ) = $biburlline =~ m{ ( http://hal\.archives-ouvertes\.fr/ tmp/ hal[\w\d]+\.bib ) }xm;
192$bot->get("$biburl", ':content_file' => "/var/cache/biblehal/download/hal-extract-auto-$year.bib" );
193print "URLLINE : $biburlline\n";
194print "URL : $biburl\n";
195
196#<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>
197#<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>
198#my $biburl = $bot->find_link(text_regex => qr/ici/, url_regex  => qr/http:\/\/hal\.archives-ouvertes\.fr\/tmp\/hal[\d\w]+\.bib/);
199##my $biburl = $bot->find_link(url_regex  => qr/http:\/\/hal\.archives-ouvertes\.fr\/tmp\/hal[\d\w]+\.bib/);
200##sleep 5;
201##$bot->get( $biburl->url(), ':content_file' => '/tmp/hal-extract-auto.bib' );
202
203# Hop, le fichier .bib est sauvé sous /tmp/hal-extract-auto.bib
204# Mission accomplie
Note: See TracBrowser for help on using the repository browser.