EPFL-Sciper-List
view release on metacpan or search on metacpan
lib/EPFL/Sciper/List.pm view on Meta::CPAN
=head1 NAME
EPFL::Sciper::List - Retrieve a list of all public active sciper from EPFL.
=head1 VERSION
Version 1.02
=cut
our $VERSION = '1.02';
=head1 SYNOPSIS
Retrieve sciper from EPFL
use EPFL::Sciper::List qw/retrieveSciper toJson toTsv/;
my @listPersons = retrieveSciper();
print toJson(@listPersons);
print toTsv(@listPersons);
Via the command line epfl-sciper-list
=head1 DESCRIPTION
A simple module to retrieve a list of all public active sciper from EPFL.
=cut
use base 'Exporter';
our @EXPORT_OK =
qw/p_createUserAgent p_getUrl p_buildUrl retrieveSciper toJson toTsv/;
Readonly::Scalar my $TIMEOUT => 1200;
Readonly::Scalar my $MAXREDIRECT => 10;
Readonly::Scalar my $AUTOCOMPLETE_URL =>
'https://search.epfl.ch/json/autocompletename.action?maxRows=99999999&term=';
=head1 SUBROUTINES/METHODS
=head2 retrieveSciper( )
Return a list of persons from EPFL with information like:
(sciper => 999999, firstname => 'Taylor', name => 'Swift');
=cut
sub retrieveSciper {
my @listPersons = ();
my @alphabet = ( 'a' .. 'z' );
my $ua = p_createUserAgent();
foreach my $letter (@alphabet) {
my $response = p_getUrl( $ua, p_buildUrl($letter) );
if ( $response->is_success ) {
my $struct = from_json( $response->decoded_content );
push @listPersons, @{ $struct->{result} };
}
}
my %hash = ();
foreach my $per (@listPersons) {
$hash{ $per->{sciper} } = $per;
}
@listPersons = ();
foreach my $sciper ( sort { $a <=> $b } keys %hash ) {
push @listPersons, $hash{$sciper};
}
return @listPersons;
}
=head2 toJson
Return sciper list in JSON
=cut
sub toJson {
my @list = @_;
my $json = JSON->new->allow_nonref;
return $json->pretty->encode( \@list );
}
=head2 toTsv
Return sciper list in TSV
=cut
sub toTsv {
my @list = @_;
my $output = q{};
foreach my $per (@list) {
$output .=
$per->{sciper} . "\t" . $per->{firstname} . "\t" . $per->{name} . "\n";
}
return $output;
}
=head1 PRIVATE SUBROUTINES/METHODS
=head2 p_createUserAgent
Return a LWP::UserAgent.
LWP::UserAgent objects can be used to dispatch web requests.
=cut
sub p_createUserAgent {
my $ua = LWP::UserAgent->new;
$ua->timeout($TIMEOUT);
( run in 1.050 second using v1.01-cache-2.11-cpan-c221a9de4ec )