Skip to content

Instantly share code, notes, and snippets.

@julianaito
Last active March 8, 2020 00:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save julianaito/b6fbfbdf308b6d74a7710b54db228e0d to your computer and use it in GitHub Desktop.
Save julianaito/b6fbfbdf308b6d74a7710b54db228e0d to your computer and use it in GitHub Desktop.
Récupère les niveaux de pollens pour un département donné (en France métropolitaine)
#!/usr/bin/env perl
# Requiert uniquement Perl (et wget ou curl ou lftp de préférence)
# l'aide est en bas, et peut s'afficher via `./pollens -h'
use strict;
use warnings;
use 5.010;
use utf8;
binmode( STDOUT, ':encoding(UTF-8)' );
use File::Fetch;
use JSON::PP;
use Term::ANSIColor;
use Pod::Usage qw( pod2usage );
my @colors =
( 'reset', 'green', 'bold green', 'yellow', 'bold yellow', 'bold red' );
my $base_url = 'https://pollens.fr/risks/thea/counties/';
sub cprint {
my ( $pollen, $level ) = @_;
print color $colors[$level];
printf "%-12s %d\n", $pollen, $level;
print color $colors[0];
}
unless ( defined $ARGV[0] and $ARGV[0] =~ /^\d{2}$/ ) {
pod2usage( -verbose => 3, -noperldoc => 1 );
exit 1;
}
my $ff = File::Fetch->new( uri => $base_url . $ARGV[0] );
my $result;
$ff->fetch( to => \$result ) or die $ff->error(1);
my $json = JSON::PP->new->decode($result);
printf "Situation en %s\n\n", $json->{countyName};
cprint "GLOBAL", $json->{riskLevel};
say "";
for ( reverse sort { $a->{level} <=> $b->{level} } @{ $json->{risks} } ) {
cprint $_->{pollenName}, $_->{level} if $_->{level};
}
__END__
=pod
=encoding utf8
=head1 USAGE
pollens numéro_département | -h
=head1 EXEMPLE
pollens 04
=head1 DESCRIPTION
Ce programme permet de connaître le risque d'allergies au pollen pour un
département métropolitain donné.
Le numéro de département doit être préfixé d'un "0" pour les départements
inférieurs à 10.
Si aucune alerte n'est émise pour un type de pollen, alors il ne sera
pas affiché.
=head1 ENVIRONNEMENT
=over 10
=item ANSI_COLORS_DISABLED
Si defini à 1, les couleurs seront désactivées.
=back
=head1 BUGS
Le retour de File::Fetch est pas super informatif - je vous recommande
d'avoir lftp(1), wget(1) ou curl(1) installé sur votre système.
=cut
@julianaito
Copy link
Author

julianaito commented Mar 8, 2020

A noter que j'ai préféré privilégier une approche sans module provenant du CPAN parce que Termux sous Android ne fournit pas de modules et que gérer CPAN sur mon smartphone m'arrange pas.

Si vous voulez faire les choses vraiment bien, il y a LWP::JSON::Tiny.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment