Acme-Free-API-ChuckNorris

 view release on metacpan or  search on metacpan

lib/Acme/Free/API/ChuckNorris.pm  view on Meta::CPAN

package Acme::Free::API::ChuckNorris;

use v5.10;
use strict;

our $VERSION = '1.0.1';

use HTTP::Tiny;
use JSON            qw/decode_json/;
use Util::H2O::More qw/baptise d2o h2o/;

use constant {
    BASEURL => "https://api.chucknorris.io/jokes",
};

sub new {
    my $pkg  = shift;
    my $self = baptise { ua => HTTP::Tiny->new }, $pkg;
    return $self;
}

sub categories {
    my $self = shift;
    my $URL  = sprintf "%s/%s", BASEURL, "categories";
    my $resp = h2o $self->ua->get($URL);
    my $ret  = d2o decode_json $resp->content;
    return scalar $ret;
}

sub random {
    my $self  = shift;
    my $args  = d2o {@_};
    my $query = ( $args->category ) ? sprintf( "?category=%s", $args->category ) : "";
    my $URL   = sprintf "%s/%s%s", BASEURL, "random", $query;
    my $resp  = d2o $self->ua->get($URL);
    die sprintf( "fatal cnq: API did not a useful response (status: %d)\n", $resp->status ) if ( $resp->status != 200 );
    my $ret = d2o decode_json $resp->content;
    return $ret->value;
}

sub search {
    my $self  = shift;
    my $args  = h2o {@_};
    my $terms = $args->terms;
    my $URL   = sprintf "%s/%s?query=%s", BASEURL, "search", $terms;
    my $resp = d2o $self->ua->get($URL);
    my $ret  = d2o decode_json $resp->content;
    return scalar $ret;
}

1;

__END__

=head1 NAME

Acme::Free::API::ChuckNorris - Perl API client for the Chuck Norris Quote API service, L<https://api.chucknorris.io>.

This module provides the client, "cnq", that is available via C<PATH> after install.

=head1 SYNOPSIS

  #!/usr/bin/env perl
    
  use strict;
  use warnings;
  
  use Acme::Free::API::ChuckNorris qw//;
  



( run in 1.031 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )