source: trunk/biblehal-pop @ 2

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