Google-API-Client
    
    
  
  
  
view release on metacpan or search on metacpan
Revision history for Perl extension Google::API::Client
0.15 2021-11-08T15:32:53Z
0.15 2021-11-08T15:25:27Z
        - Fix Discovery URL template (Thanks, 7mho7 and robhammond)
0.14  2014-10-18 03:08:30 PDT
        - allow no redirect_uri to support cross-client exchange request #14 (Thanks, razsh)
        - Add SignedJWT support and Reseller API sample to Perl Client Library. #15 (Thanks, richieforeman)
        - calendar event deletion #16 (Thanks, ljanvier)
0.13  2013-11-27 00:59:57 JST
        - Add approve prompt and offline #12 (Thanks, chylli and finn)
0.12  2013-11-12 22:48:25 JST
        - Add .travis.yml
0.11  2013-11-12 01:57:03 JST
        - Update dependencies #11
        - Important changes: Rename OAuth2::Client to Google::API::OAuth2::Client #9
0.09  Fri Feb  8 22:13:43 JST 2013
        - Fixed an issue #4
0.08  Thu Sep 27 14:40:05 JST 2012
        - Fixed an issue #7
0.07  Fri Aug  3 23:25:39 JST 2012 
        - Fixed an issue #6
        - Added calendar events samples
0.06  Wed Aug  1 01:24:21 JST 2012
        - Fixed an issue #5 (Thanks, uehatsu)
0.05  Tue Feb 14 01:01:42 JST 2012
        - Fixed issues of URL delimiter at OAuth2::Client #1 #3 (uechoco, gnustavo)
        - Performance improvement for method lookup #2 (gnustavo)
0.04  Fri Oct 28 01:50:23 JST 2011
        - Fixed a bug that G::A::Client didn't have methods if Resource Document has both nested resources and methods like blogger v2.
0.03  Tue Sep 27 12:43:25 JST 2011
cpanfile.snapshot
dist.ini
eg/adsense/adclients_list.pl
eg/adsense/adunits_list.pl
eg/adsense/customchannels_list.pl
eg/adsense/reports_generate.pl
eg/adsense/urlchannels_list.pl
eg/analytics/cli_private_access.pl
eg/analytics/management_v3_reference.pl
eg/blogger/cli_public_access.pl
eg/calendar/calendarlist.pl
eg/calendar/calendars.pl
eg/calendar/events.pl
eg/client_secrets.json
eg/lib/Sample/Utils.pm
eg/plus/client_secrets.json
eg/plus/plus.pl
eg/plus/plus_with_clientsecrets.pl
eg/plus/sample.psgi
eg/plus/search.pl
eg/plus/search_simple.pl
eg/searchconsole/webmasters_sites_list.pl
eg/service_accounts/reseller.pl
eg/calendar/calendarlist.pl view on Meta::CPAN
use Google::API::Client;
use Google::API::OAuth2::Client;
use lib 'eg/lib';
use Sample::Utils qw/get_or_restore_token store_token/;
use constant MAX_PAGE_SIZE => 3;
my $client = Google::API::Client->new;
my $service = $client->build('calendar', 'v3');
my $file = "$FindBin::Bin/../client_secrets.json";
my $auth_driver = Google::API::OAuth2::Client->new_from_client_secrets($file, $service->{auth_doc});
my $dat_file = "$FindBin::Bin/token.dat";
my $access_token = get_or_restore_token($dat_file, $auth_driver);
my $page_token;
my $count = 1;
do {
    say "=== page $count ===";
    my %body = (
        maxResults => MAX_PAGE_SIZE,
    );
    if ($page_token) {
        $body{pageToken} = $page_token;
    }
    # Call calendarlist.list
    my $list = $service->calendarList->list(
        body => \%body,
    )->execute({ auth_driver => $auth_driver });
    $page_token = $list->{nextPageToken};
    for my $entry (@{$list->{items}}) {
        say '* ' . encode_utf8($entry->{summary});
        # Call calendarlist.get
        my $calendar = $service->calendarList->get(
            body => {
                calendarId => $entry->{id},
            }
        )->execute({ auth_driver => $auth_driver });
        if (my $description = $calendar->{description}) {
            say '  ' . encode_utf8($description);
        }
    }
    $count++;
} until (!$page_token);
store_token($dat_file, $auth_driver);
__END__
eg/calendar/calendars.pl view on Meta::CPAN
use Encode qw/encode_utf8/;
use FindBin;
use Google::API::Client;
use Google::API::OAuth2::Client;
use lib 'eg/lib';
use Sample::Utils qw/get_or_restore_token store_token/;
my $client = Google::API::Client->new;
my $service = $client->build('calendar', 'v3');
my $file = "$FindBin::Bin/../client_secrets.json";
my $auth_driver = Google::API::OAuth2::Client->new_from_client_secrets($file, $service->{auth_doc});
my $dat_file = "$FindBin::Bin/token.dat";
my $access_token = get_or_restore_token($dat_file, $auth_driver);
# Call calendarlist.list
my $res = $service->calendarList->list->execute({ auth_driver => $auth_driver });
my $calendar_id = $res->{items}->[0]->{id};
# Call calendars.get
$res = $service->calendars->get(
    body => {
        calendarId => $calendar_id,
    }
)->execute({ auth_driver => $auth_driver });
say encode_utf8($res->{summary});
store_token($dat_file, $auth_driver);
__END__
eg/calendar/events.pl view on Meta::CPAN
use Google::API::Client;
use Google::API::OAuth2::Client;
use lib 'eg/lib';
use Sample::Utils qw/get_or_restore_token store_token/;
use constant MAX_PAGE_SIZE => 50;
my $client = Google::API::Client->new;
my $service = $client->build('calendar', 'v3');
my $file = "$FindBin::Bin/../client_secrets.json";
my $auth_driver = Google::API::OAuth2::Client->new_from_client_secrets($file, $service->{auth_doc});
my $dat_file = "$FindBin::Bin/token.dat";
my $access_token = get_or_restore_token($dat_file, $auth_driver);
# Call calendarlist.list
my $res = $service->calendarList->list(
    body => {
        maxResults => MAX_PAGE_SIZE,
        minAccessRole => 'owner',
    }
)->execute({ auth_driver => $auth_driver });
my $calendar_id = $res->{items}->[0]->{id};
my $dest_calendar_id = $res->{items}->[1]->{id};
# Call events.list
my $page_token;
my $count = 1;
do {
    say "=== page $count ===";
    my %body = (
        calendarId => $calendar_id,
    );
    if ($page_token) {
        $body{pageToken} = $page_token;
    }
    $res = $service->events->list(
        body => \%body,
    )->execute({ auth_driver => $auth_driver });
    $page_token = $res->{nextPageToken};
    for my $event (@{$res->{items}}) {
        say encode_utf8($event->{summary});
eg/calendar/events.pl view on Meta::CPAN
  'summary'  => 'Appointment',
  'location' => 'Somewhere',
  'start' => {
    'dateTime' => '2012-08-03T10:00:00+09:00',
  },
  'end' => {
    'dateTime' => '2012-08-03T10:25:00+09:00',
  },
};
my $added_event = $service->events->insert(
    calendarId => $calendar_id,
    body => $new_event,
)->execute({ auth_driver => $auth_driver });
say $added_event->{id};
# Get an event
say '=== Get a event ===';
my $got_event = $service->events->get(
    body => {
        calendarId => $calendar_id,
        eventId    => $added_event->{id},
    }
)->execute({ auth_driver => $auth_driver });
say $got_event->{id};
# Update an event
say '=== Update an event ===';
$got_event->{summary} = 'Appointment at Somewhere';
my $updated_event = $service->events->update(
    calendarId => $calendar_id,
    eventId    => $got_event->{id},
    body       => $got_event,
)->execute({ auth_driver => $auth_driver });
say $updated_event->{updated};
# Update an event (patch)
say '=== Update an event (patch) ===';
my $patched_event = $service->events->patch(
    calendarId => $calendar_id,
    eventId    => $got_event->{id},
    body => {
        description => 'We will have a lunch',
    }
)->execute({ auth_driver => $auth_driver });
say $patched_event->{updated};
# Delete an event
say '=== Delete an event ===';
$service->events->delete(
    calendarId => $calendar_id,
    eventId    => $got_event->{id},
)->execute({ auth_driver => $auth_driver });
# QuickAdd
say '=== QuickAdd ===';
my $quickadded_event = $service->events->quickAdd(
    calendarId => $calendar_id,
    text => 'Appointment at Somewhere on June 3rd 10am-10:25am',
)->execute({ auth_driver => $auth_driver });
say $quickadded_event->{id};
# Move an event
say '=== Move an event ===';
$service->events->move(
    calendarId  => $calendar_id,
    eventId     => $quickadded_event->{id},
    destination => $dest_calendar_id,
)->execute({ auth_driver => $auth_driver });
# Recurring events
say '=== Make recurring events via patch ===';
$service->events->patch(
    calendarId => $dest_calendar_id,
    eventId    => $quickadded_event->{id},
    body => {
        start => {
            timeZone => 'Asia/Tokyo',
        },
        end => {
            timeZone => 'Asia/Tokyo',
        },
        recurrence => [
            'RRULE:FREQ=WEEKLY;UNTIL=20120831T100000Z',
        ],
    }
)->execute({ auth_driver => $auth_driver });
say $quickadded_event->{updated};
# instances
say '=== Get instances ===';
my $instances = $service->events->instances(
    calendarId => $dest_calendar_id,
    eventId    => $quickadded_event->{id},
)->execute({ auth_driver => $auth_driver });
for my $instance (@{$instances->{items}}) {
    say $instance->{id};
}
store_token($dat_file, $auth_driver);
__END__
lib/Google/API/Client.pm view on Meta::CPAN
    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;
}
use strict;
use Test::More;
use Google::API::Client;
my $service = Google::API::Client->new->build('calendar', 'v3');
ok($service);
is(ref(Google::API::Client->_new_ua), 'LWP::UserAgent');
is(ref(Google::API::Client->_new_json_parser), 'JSON');
done_testing();
t/discovery_url.t view on Meta::CPAN
    is($client->{ua}{response}->request->uri, 'https://gmail.googleapis.com/$discovery/rest?version=v1');
    $service = $client->build('analyticsreporting', 'v4');
    is($client->{ua}{response}->request->uri, 'https://analyticsreporting.googleapis.com/$discovery/rest?version=v4');
    $service = $client->build('searchconsole', 'v1');
    is($client->{ua}{response}->request->uri, 'https://searchconsole.googleapis.com/$discovery/rest?version=v1');
};
subtest 'without version' => sub {
    my $service = $client->build('calendar');
    is($client->{ua}{response}->request->uri, 'https://calendar-json.googleapis.com/$discovery/rest');
};
subtest 'backward compatibility' => sub {
    my $service = $client->build('compute', 'alpha');
    is($client->{ua}{response}->request->uri, 'https://www.googleapis.com/discovery/v1/apis/compute/alpha/rest');
    $service = $client->build('compute', 'beta');
    is($client->{ua}{response}->request->uri, 'https://www.googleapis.com/discovery/v1/apis/compute/beta/rest');
    $service = $client->build('compute', 'v1');
t/discovery_url.t view on Meta::CPAN
    $service = $client->build('oauth2', 'v2');
    is($client->{ua}{response}->request->uri, 'https://www.googleapis.com/discovery/v1/apis/oauth2/v2/rest');
};
subtest 'convert name to sub domain' => sub {
    my $service = $client->build('adexchangebuyer2', 'v2beta1');
    is($client->{ua}{response}->request->uri, 'https://adexchangebuyer.googleapis.com/$discovery/rest?version=v2beta1');
    $service = $client->build('calendar', 'v3');
    is($client->{ua}{response}->request->uri, 'https://calendar-json.googleapis.com/$discovery/rest?version=v3');
    $service = $client->build('content', 'v2.1');
    is($client->{ua}{response}->request->uri, 'https://shoppingcontent.googleapis.com/$discovery/rest?version=v2.1');
    $service = $client->build('prod_tt_sasportal', 'v1alpha1');
    is($client->{ua}{response}->request->uri, 'https://prod-tt-sasportal.googleapis.com/$discovery/rest?version=v1alpha1');
    $service = $client->build('translate', 'v3');
    is($client->{ua}{response}->request->uri, 'https://translation.googleapis.com/$discovery/rest?version=v3');
};
( run in 0.660 second using v1.01-cache-2.11-cpan-5dc5da66d9d )