aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-06-30 16:18:24 +0100
committerGitHub <noreply@github.com>2019-06-30 16:18:24 +0100
commitf9e6f79c8717b7cb351dc2425b1876cbbb0de917 (patch)
tree4f3ea505f6a5a4a60ba5f2527dc9893c2ca2970f
parentab20c670ec85cf45f3e9d6b1076c0d6f3ae89274 (diff)
parent23aba046102a54f4b3d7bfa749607956aad14a96 (diff)
downloadperlweeklychallenge-club-f9e6f79c8717b7cb351dc2425b1876cbbb0de917.tar.gz
perlweeklychallenge-club-f9e6f79c8717b7cb351dc2425b1876cbbb0de917.tar.bz2
perlweeklychallenge-club-f9e6f79c8717b7cb351dc2425b1876cbbb0de917.zip
Merge pull request #320 from kianmeng/master
Add challenge #03 answer
-rw-r--r--challenge-014/kian-meng-ang/perl5/ch-3.pl78
1 files changed, 78 insertions, 0 deletions
diff --git a/challenge-014/kian-meng-ang/perl5/ch-3.pl b/challenge-014/kian-meng-ang/perl5/ch-3.pl
new file mode 100644
index 0000000000..72703ed030
--- /dev/null
+++ b/challenge-014/kian-meng-ang/perl5/ch-3.pl
@@ -0,0 +1,78 @@
+#!/usr/bin/env perl
+# vi:et:sw=4 ts=4 ft=perl
+
+use strict;
+use warnings;
+use utf8;
+use feature qw(say);
+
+use Carp;
+use Data::Dumper;
+use Furl;
+use URI::Escape;
+use JSON::MaybeXS;
+use HTTP::Request;
+
+use constant BASE_URL => 'http://geodb-free-service.wirefreethought.com/v1/geo/cities';
+
+MAIN: {
+ my $keywords = $ARGV[0] || croak q|Missing city!|;
+ my $cities = _find_cities($keywords);
+
+ if (@{$cities}) {
+ foreach (@{$cities}) {
+ say sprintf 'Country: %-15s City: %-15s Time: %-15s',
+ $_->{country}, $_->{name}, _find_city_time($_->{id})
+ }
+ } else {
+ say 'No city found!';
+ }
+}
+
+sub _find_cities {
+ my ($keywords) = @_;
+
+ my $endpoint = BASE_URL;
+ $endpoint .= '?namePrefix=' . uri_escape($keywords);
+ $endpoint .= '&limit=5&offset=0&hateoasMode=false';
+
+ return _request('get', $endpoint);
+}
+
+sub _find_city_time {
+ my ($city_id) = @_;
+
+ my $endpoint = BASE_URL;
+ $endpoint .= qq|/$city_id/time|;
+
+ return _request('get', $endpoint);
+}
+
+sub _request {
+ my ($method, $endpoint) = @_;
+
+ my $ua = Furl->new(
+ agent => 'Perl Weekly Challenge -(https://perlweeklychallenge.org)',
+ timeout => 10,
+ );
+
+ my $request = HTTP::Request->new(uc $method => $endpoint);
+ my $response = $ua->request($request);
+ return decode_json($response->content)->{data} if ($response->is_success);
+
+ croak $response->status_line;
+}
+
+1;
+
+__END__
+
+$ perl ch-3.pl kuala
+Country: Brunei City: Kuala Belait Time: 22:54:01.058183
+Country: Indonesia City: Kuala Tungkal Time: 21:54:01.637034
+Country: Indonesia City: Kualakapuas Time: 21:54:02.200661
+Country: Malaysia City: Kuala Kangsar Time: 22:54:02.769849
+Country: Malaysia City: Kuala Lumpur Time: 22:54:03.33483
+
+$ perl ch-3.pl xxx
+No city found!