aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Van Dam <rvandam00@gmail.com>2019-06-24 01:17:38 -0600
committerRob Van Dam <rvandam00@gmail.com>2019-06-24 01:17:38 -0600
commit77804452f1fc07db3b1c500d31e5ed89cdaf5241 (patch)
treeb8d05b90d5b996a82a8fe6a552b2ad4e434954b1
parent50cc249a52dab9ec3113fa3396b2382153deed02 (diff)
downloadperlweeklychallenge-club-77804452f1fc07db3b1c500d31e5ed89cdaf5241.tar.gz
perlweeklychallenge-club-77804452f1fc07db3b1c500d31e5ed89cdaf5241.tar.bz2
perlweeklychallenge-club-77804452f1fc07db3b1c500d31e5ed89cdaf5241.zip
Solution to Challenge #3, Week 014
-rw-r--r--challenge-014/rob-van-dam/perl5/ch-3.pl44
1 files changed, 44 insertions, 0 deletions
diff --git a/challenge-014/rob-van-dam/perl5/ch-3.pl b/challenge-014/rob-van-dam/perl5/ch-3.pl
new file mode 100644
index 0000000000..c4aa2e40a3
--- /dev/null
+++ b/challenge-014/rob-van-dam/perl5/ch-3.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use v5.10;
+
+use HTTP::Tiny;
+use URI::Escape;
+use JSON::PP qw(decode_json);
+use Data::Dumper;
+
+my $base = 'http://geodb-free-service.wirefreethought.com';
+my $find = '/v1/geo/cities?limit=10&offset=0&namePrefix=%s';
+my $time = '/v1/geo/cities/%d/time';
+
+my $search = shift @ARGV || 'New Orleans';
+my @cities = find_cities($search);
+
+binmode STDOUT, ":utf8"; # avoid wide character warnings on certain results
+foreach my $city (@cities) {
+ say $city->{'name'}, ', ', $city->{'regionCode'}, ', ', $city->{'countryCode'}, ': ', get_time($city->{'id'});
+}
+
+sub find_cities {
+ my $search = shift;
+
+ my $url = sprintf $base . $find, uri_escape($search);
+ return @{ _get($url) };
+}
+
+sub get_time {
+ my $city_id = shift;
+
+ my $url = sprintf $base . $time, $city_id;
+ return _get($url);
+}
+
+sub _get {
+ my $url = shift;
+
+ my $response = HTTP::Tiny->new->get($url);
+ my $parsed = decode_json($response->{'content'});
+ return $parsed->{'data'};
+}