diff options
| -rwxr-xr-x | challenge-021/joelle-maslak/perl5/ch-3.pl | 61 | ||||
| -rwxr-xr-x | challenge-021/joelle-maslak/perl6/ch-3.p6 | 42 |
2 files changed, 103 insertions, 0 deletions
diff --git a/challenge-021/joelle-maslak/perl5/ch-3.pl b/challenge-021/joelle-maslak/perl5/ch-3.pl new file mode 100755 index 0000000000..d5c78eab2a --- /dev/null +++ b/challenge-021/joelle-maslak/perl5/ch-3.pl @@ -0,0 +1,61 @@ +#!/usr/bin/env perl +use v5.26; +use strict; +use warnings; + +# Gets the name of the most recent newsletter + +# Turn on method signatures +use feature 'signatures'; +no warnings 'experimental::signatures'; + +use autodie; +use Getopt::Long; +use Mojo::UserAgent; +use Mojo::Util qw(url_escape); +use Path::Tiny; +use Perl6::Slurp; + +MAIN: { + my $baseurl = 'https://news.api.gov.bc.ca/api/'; + my $newsletter_key = 'bc-stats-infoline'; + GetOptions( + "base-url=s" => \$baseurl, + "newsletter-key=s" => \$newsletter_key, + ); + if ( @ARGV > 0 ) { die("Invalid parameter") } + + say get_latest_newsletter( $baseurl, $newsletter_key ); +} + +sub get_latest_newsletter ( $baseurl, $newsletter_key ) { + my $ua = Mojo::UserAgent->new(); + + my $tx = + $ua->get( "${baseurl}Newsletters/" . url_escape($newsletter_key) . "?api-version=1.0", ); + + my $edition; + if ( ( $tx->result->code >= 200 ) && ( $tx->result->code <= 299 ) ) { + my $body = $tx->result->json; + die "No newsletters for key found" unless exists $body->[0]; + $edition = $body->[0]{editions}[0]{key}; + } else { + die "Error from API endpoint"; + } + + $tx = $ua->get( + "${baseurl}Newsletters/" + . url_escape($newsletter_key) + . "/Editions/" + . url_escape($edition) + . "?api-version=1.0", + ); + + if ( ( $tx->result->code >= 200 ) && ( $tx->result->code <= 299 ) ) { + my $body = $tx->result->json; + return $body->{name}; + } else { + die "Error from API endpoint"; + } +} + diff --git a/challenge-021/joelle-maslak/perl6/ch-3.p6 b/challenge-021/joelle-maslak/perl6/ch-3.p6 new file mode 100755 index 0000000000..a626c972c1 --- /dev/null +++ b/challenge-021/joelle-maslak/perl6/ch-3.p6 @@ -0,0 +1,42 @@ +#!/usr/bin/env perl6 +use v6; + +# Gets the name of the most recent newsletter + +use Cro::HTTP::Client; +use URI::Encode; + +sub MAIN( + Str:D :$base-url = 'https://news.api.gov.bc.ca/api/', + Str:D :$newsletter-key = 'bc-stats-infoline', +) { + my $news = get-latest-newsletter(:$base-url, :$newsletter-key); + + say $news; +} + +sub get-latest-newsletter(Str:D :$base-url, Str:D :$newsletter-key is copy) { + $newsletter-key = uri_encode_component($newsletter-key); + + my $client = Cro::HTTP::Client.new( :base-uri($base-url) ); + + my $resp = await $client.get("Newsletters/$newsletter-key?api-version=1.0"); + my $json = await $resp.body; + + die "No newsletters for key found" if $json.elems == 0; + my $edition = uri_encode_component($json[0]<editions>[0]<key>); + + $resp = await $client.get("Newsletters/$newsletter-key/Editions/$edition?api-version=1.0"); + $json = await $resp.body; + + return $json<name>; + + CATCH { + when X::Cro::HTTP::Error { + my $body = await .response.body; + die "Error from API endpoint"; + } + } +} + + |
