Exercises-API
view release on metacpan or search on metacpan
lib/Exercises/API.pm view on Meta::CPAN
# ABSTRACT: API Ninja's Exercises API
use v5.38;
use strict;
use warnings;
use Moose;
use LWP;
use JSON;
use Carp;
use Readonly;
use Exercises::API::Exercise;
our $VERSION = '0.001';
Readonly my $API_BASE_URL => 'https://api.api-ninjas.com/v1/exercises';
has 'ua' => (
isa => 'LWP::UserAgent',
is => 'ro',
lazy_build => 1,
);
has 'apikey' => (
required => 1,
isa => 'Maybe[Str]',
is => 'ro'
);
sub exercises( $self, %args ) {
my $path = $self->_build_path(%args);
my $exercises_list = $self->_request($path);
my @exercises;
for my $exercise (@$exercises_list) {
push @exercises, Exercises::API::Exercise->new($exercise);
}
return @exercises;
}
sub _build_path( $self, %args ) {
my $uri = URI->new($API_BASE_URL);
$uri->query( $uri->query_form(%args) ) if %args;
return $uri;
}
sub _build_ua($self) {
my $ua = LWP::UserAgent->new;
$ua->default_header( 'X-Api-Key' => $self->apikey );
return $ua;
}
sub _request( $self, $uri ) {
my $response = $self->ua->get($uri);
if ( $response->is_success ) {
return decode_json( $response->decoded_content );
}
else {
my $code = $response->code;
confess "Exercises API status code ($code)\n"
. "Error: "
. $response->status_line;
}
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Exercises::API - API Ninja's Exercises API
=head1 VERSION
version 0.001
=head1 SYNOPSIS
use Exercises::API;
# Set API Ninja Exercise API Key
my $ea = Exercises::API->new(apikey => $ENV{'AN_EXERCISES_APIKEY'});
# A list of exercises
my @exercises = $ea->exercises;
for my $exercise (@exercises){
print "Name: " . $exercise->name . "\n";
print "Type: " . $exercise->type . "\n";
print "Muscle: " . $exercise->muscle . "\n";
print "Equipment: " . $exercise->equipment . "\n";
print "Difficulty: " . $exercise->difficulty . "\n";
print "Instructions: " . $exercise->instructions . "\n";
}
# Specifying the parameters
my %args = (
name => 'press',
type => 'strength',
muscle => 'chest',
difficulty => 'beginner',
# offset => 0 (is a premium feature/parameter)
);
# A list of exercises based on the specified parameters
my @exercisesParams = $ea->exercises(%args);
for my $exercise (@exercises){
print "Name: " . $exercise->name . "\n";
print "Type: " . $exercise->type . "\n";
( run in 1.312 second using v1.01-cache-2.11-cpan-df04353d9ac )