aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-021/joelle-maslak/perl5/ch-3.pl61
-rwxr-xr-xchallenge-021/joelle-maslak/perl6/ch-3.p642
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";
+ }
+ }
+}
+
+