package WWW::Giraffi::API; use strict; use warnings; use 5.010000; use Class::XSAccessor constructor => "new", accessors => { apikey => "apikey", timeout => "timeout", default_endpoint => "default_endpoint", applogs_endpoint => "applogs_endpoint", monitoringdata_endpoint => "monitoringdata_endpoint", verbose => "verbose", ssl_verify_hostname => "ssl_verify_hostname", use_time_piece => "use_time_piece", }, #true => [qw(verbose)], replace => 1; #has apikey => ( is => "rw", isa => "Str" ); #has timeout => ( is => "rw", isa => "Num" ); #has verbose => ( is => "rw", isa => "Num" ); #has ssl_verify_hostname => ( is => "rw", isa => "Num"); use Module::Pluggable search_path => [__PACKAGE__]; our $VERSION = '0.2_04'; our $AGENT = sprintf "%s/%s", __PACKAGE__, $VERSION; our $SSL_VERIFY_HOSTNAME = 1; our $TIMEOUT = 30; our $USE_TIME_PIECE = 1; our $DEFAULT_ENDPOINT = "https://papi.giraffi.jp"; our $MONITORINGDATA_ENDPOINT = "https://okapi.giraffi.jp:3007"; our $APPLOGS_ENDPOINT = "https://lapi.giraffi.jp:3443"; sub import { my $class = shift; foreach my $pkg ( $class->plugins ) { next if $pkg eq "${class}::Request"; $pkg =~ /^${class}::([a-zA-Z]+)$/; my $method = lc $1; no strict "refs"; ## no critic no warnings "redefine"; ## no critic *{ __PACKAGE__ . "::$method" } = sub { my $self = shift; my %options = ( apikey => $self->apikey, agent => $AGENT, ssl_verify_hostname => $self->ssl_verify_hostname // $SSL_VERIFY_HOSTNAME, use_time_piece => $self->use_time_piece // $USE_TIME_PIECE, timeout => $self->timeout // $TIMEOUT, default_endpoint => $self->default_endpoint // $DEFAULT_ENDPOINT, monitoringdata_endpoint => $self->monitoringdata_endpoint // $MONITORINGDATA_ENDPOINT, applogs_endpoint => $self->applogs_endpoint //$APPLOGS_ENDPOINT, verbose => $self->verbose, ); return $self->_require_request_method( $pkg, %options ); }; } } { my %cached; ## static hash sub _require_request_method { my ( $self, $pkg, %options ) = @_; ( my $file = $pkg ) =~ s/::/\//g; if ( !exists $cached{$pkg} ) { eval "require '$file.pm'" or die $@; ## no critic $pkg->import; $cached{$pkg} = $pkg->new(%options); } return $cached{$pkg}; } } 1; __END__ =head1 NAME WWW::Giraffi::API - Giraffi API Access Module =head1 VERSION 0.2_04 =head1 SYNOPSIS use strict; use warnings; use WWW::Giraffi::API; my $apikey = "ilovenirvana_ilovekurtcobain"; my $g = WWW::Giraffi::API->new(apikey => $apikey); # get all media data my $arrayref = $g->media->find; foreach $ref(@{$arrayref}) { ## anything to do... } =head1 DESCRIPTION WWW::Giraffi::API is Giraffi API Access Module ruby giraffi https://github.com/giraffi/giraffi perl binding =head1 GLOBAL VARIABLE =head2 $AGENT WWW::Giraffi::API/$VERSION =head2 $SSL_VERIFY_HOSTNAME for LWP::UserAgent ssl_opts(verify_hostname => $this_value). 1 =head2 $TIMEOUT for LWP::UserAgent timeout. 30 =head2 $USE_TIME_PIECE convert unix timestamp fields in json response to Time::Piece Object. default 1 =head2 $DEFAULT_ENDPOINT https://papi.giraffi.jp =head2 $MONITORINGDATA_ENDPOINT https://okapi.giraffi.jp:3007 =head2 $APPLOGS_ENDPOINT https://lapi.giraffi.jp:3443" =head1 ACCESSOR METHOD =head2 apikey =head2 timeout =head2 default_endpoint =head2 applogs_endpoint =head2 monitoringdata_endpoint =head2 verbose =head2 ssl_verify_hostname =head2 use_time_piece =head1 METHOD =head2 new Create WWW::Giraffi::API Object Example: my $apikey = "ilovenirvana_ilovekurtcobain"; my $g = WWW::Giraffi::API->new(apikey => $apikey); Options apikey giraffi apikey timeout connection timeout. default 30sec default_endpoint default_endpoint. default $DEFAULT_ENDPOINT applogs_endpoint applogs_endpoint. default $APPLOGS_ENDPOINT monitoringdata_endpoint monitoringdata_endpoint. default $MONITORINGDATA_ENDPOINT verbose verbose output. default 0 ssl_verify_hostname ssl_verify_hostname(for LWP::UserAgent). default 1 use_time_piece use_time_piece. default $USE_TIME_PIECE =head2 media Create WWW::Giraffi::API::Media Object Example: my $g = WWW::Giraffi::API->new(apikey => $apikey); my $media = $g->media; =head2 axion Create WWW::Giraffi::API::Axion Object Example: my $axion = $g->axion; =head2 item Create WWW::Giraffi::API::Item Object Example: my $item = $g->item; =head2 service Create WWW::Giraffi::API::Service Object Example: my $service = $g->service; =head2 trigger Create WWW::Giraffi::API::Trigger Object Example: my $trigger = $g->trigger; =head2 log Create WWW::Giraffi::API::Log Object Example: my $log = $g->log; =head2 applog Create WWW::Giraffi::API::AppLog Object Example: my $applog = $g->applog; =head2 trend Create WWW::Giraffi::API::Trend Object Example: my $trend = $g->trend; =head2 region Create WWW::Giraffi::API::Region Object Example: my $region = $g->region; =head2 monitoringdata Create WWW::Giraffi::API::MonitoringData Object Example: my $monitoringdata = $g->monitoringdata; =head1 AUTHOR Akira Horimoto Eemperor@gmail.comE =head1 API REFERENCE L =head1 SEE ALSO L L L =head1 LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut