diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-06-30 16:18:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-30 16:18:24 +0100 |
| commit | f9e6f79c8717b7cb351dc2425b1876cbbb0de917 (patch) | |
| tree | 4f3ea505f6a5a4a60ba5f2527dc9893c2ca2970f | |
| parent | ab20c670ec85cf45f3e9d6b1076c0d6f3ae89274 (diff) | |
| parent | 23aba046102a54f4b3d7bfa749607956aad14a96 (diff) | |
| download | perlweeklychallenge-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.pl | 78 |
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! |
