Google-API-Client

 view release on metacpan or  search on metacpan

lib/Google/API/Client.pm  view on Meta::CPAN

    my $base_url = URI->new($base);
    my $resource = $self->_create_resource($document, $base_url, $args); 
    return $resource;
}

sub _create_resource {
    my $self = shift;
    my ($document, $base_url, $args) = @_;
    my $root_resource_obj = Google::API::Resource->new;
    for my $resource (keys %{$document->{resources}}) {
        my $resource_obj;
        if ($document->{resources}{$resource}{resources}) {
            $resource_obj = $self->_create_resource($document->{resources}{$resource}, $base_url, $args);
        }
        if ($document->{resources}{$resource}{methods}) {
            unless ($resource_obj) {
                $resource_obj = Google::API::Resource->new;
            }
            for my $method (keys %{$document->{resources}{$resource}{methods}}) {
                $resource_obj->set_attr($method, sub {
                    my (%param) = @_;
                    return Google::API::Method->new(
                        ua => $self->{ua},
                        json_parser => $self->{json_parser},
                        base_url => $base_url,
                        doc => $document->{resources}{$resource}{methods}{$method},
                        opt => \%param,
                    );
                });
            }
        }
        $root_resource_obj->set_attr($resource, sub { $resource_obj } );
    }
    if ($document->{auth}) {
        $root_resource_obj->{auth_doc} = $document->{auth};
    }
    return $root_resource_obj;
}

sub _new_ua {
    my $class = shift;
    require LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
    return $ua;
}

sub _new_json_parser {
    my $class = shift;
    require JSON;
    my $parser = JSON->new;
    return $parser;
}

sub _replace_to_subdomain {
    my ($self, $service) = @_;

    # Following services are different from subdomains.
    # It needs to be converted.
    my %replacement = (
        'adexchangebuyer2'  => 'adexchangebuyer',
        'calendar'          => 'calendar-json',
        'content'           => 'shoppingcontent',
        'prod_tt_sasportal' => 'prod-tt-sasportal',
        'translate'         => 'translation',
    );
    if (grep { $service eq $_ } keys %replacement) {
        $service = $replacement{$service};
    }
    return $service;
}

sub _is_v1_discovery_url {
    my ($self, $service, $version) = @_;
    # Following services are still using V1 type URL
    if (($service eq 'compute' && $version eq 'alpha') ||
        ($service eq 'compute' && $version eq 'beta') ||
        ($service eq 'compute' && $version eq 'v1') ||
        ($service eq 'drive' && $version eq 'v2') ||
        ($service eq 'drive' && $version eq 'v3') ||
        ($service eq 'oauth2' && $version eq 'v2')) {
        return 1;
    }
    return;
}

1;
__END__

=encoding utf-8

=for stopwords

=head1 NAME

Google::API::Client - A client for Google APIs Discovery Service

=head1 SYNOPSIS

  use Google::API::Client;

  my $client = Google::API::Client->new;
  my $service = $client->build('urlshortener', 'v1');

  # Get shortened URL 
  my $body = {
      'longUrl' => 'http://code.google.com/apis/urlshortener/',
  };
  my $result = $url->insert(body => $body)->execute;
  $result->{id}; # shortened URL

=head1 DESCRIPTION

Google::API::Client is a client for Google APIs Discovery Service. You make using Google APIs easy.

=head1 METHODS

=over 4

=item new

=item build



( run in 1.254 second using v1.01-cache-2.11-cpan-13bb782fe5a )