API-Google
view release on metacpan or search on metacpan
lib/API/Google/GCal.pm view on Meta::CPAN
my ($self, $user, $name) = @_;
my $all = $self->get_calendars($user, ['id', 'summary']); # arr ref
my @n = grep { $_->{'summary'} eq $name } @$all;
my $full_id = $n[0]->{id};
return $full_id;
}
sub add_event {
my ($self, $user, $calendar_id, $event_data) = @_;
$self->api_query({
method => 'post',
route => $self->{api_base}.'/calendars/'.$calendar_id.'/events',
user => $user
}, $event_data);
}
sub busy_time_ranges {
my ($self, $params) = @_;
$self->api_query({
method => 'post',
route => $self->{api_base}.'/freeBusy',
user => $params->{user}
lib/API/Google/GCal.pm view on Meta::CPAN
my $event_start = DateTime->now->set_time_zone($timeZone);
my $event_end = DateTime->now->add_duration( DateTime::Duration->new( hours => 2) );
$gapi->refresh_access_token_silent($user); # inherits from API::Google
$gapi->get_calendars($user);
$gapi->get_calendars($user, ['id', 'summary']); # return only specified fields
$gapi->get_calendar_id_by_name($user, 'Contacts');
my $event_data = {};
$event_data->{summary} = 'Exibition';
$event_data->{description} = 'Amazing cats exibition';
$event_data->{location} = 'Angels av. 13';
$event_data->{start}{dateTime} = DateTime::Format::RFC3339->format_datetime($event_start); # '2016-11-11T09:00:00+03:00' format
$event_data->{end}{dateTime} = DateTime::Format::RFC3339->format_datetime($event_end);
$event_data->{start}{timeZone} = $event_data->{end}{timeZone} = $timeZone; # not obligatory
$gapi->add_event($user, $calendar_id, $event_data);
my $freebusy_data = {
user => $user,
calendarId => $calendar_id,
dt_start => DateTime::Format::RFC3339->format_datetime($event_start),
dt_end => DateTime::Format::RFC3339->format_datetime($event_end),
timeZone => 'Europe/Moscow'
};
$gapi->busy_time_ranges($freebusy_data);
$gapi->events_list($freebusy_data);
=head2 get_calendars
Get all calendars of particular Google account
=head2 get_calendar_id_by_name
$gapi->get_calendar_id_by_name($user, $name)
Get calendar id by its name. Name = "summary" parameter
=head2 add_event
$gapi->add_event($user, $calendar_id, $event_data)
# https://developers.google.com/google-apps/calendar/v3/reference/events/insert
=head2 busy_time_ranges
Return List of time ranges during which this calendar should be regarded as busy.
=head2 events_list
Return list of events in particular calendar
lib/API/Google/Server.pm view on Meta::CPAN
get "/" => sub {
my $c = shift;
app->log->info("Will store tokens at".$config->getFilename ($config->pathToFile));
if ($c->param('code')) {
app->log->info("Authorization code was retrieved: ".$c->param('code'));
my $tokens = $c->get_new_tokens($c->param('code'));
app->log->info("App got new tokens: ".Dumper $tokens);
if ($tokens) {
my $user_data;
# warn Dumper $user_data;
# you can use https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123 for development
if ($tokens->{id_token}) {
# my $jwt = Mojo::JWT->new(claims => $tokens->{id_token});
# warn "Mojo header:".Dumper $jwt->header;
# my $keys = $c->get_all_google_jwk_keys(); # arrayref
# my ($header, $data) = decode_jwt( token => $tokens->{id_token}, decode_header => 1, key => '' ); # exctract kid
# warn "Decode header :".Dumper $header;
$user_data = decode_jwt(
token => $tokens->{id_token},
kid_keys => $c->ua->get('https://www.googleapis.com/oauth2/v3/certs')->res->json,
);
warn "Decoded user data:".Dumper $user_data;
};
#$user_data->{email};
#$user_data->{family_name}
#$user_data->{given_name}
# $tokensfile->set('tokens/'.$user_data->{email}, $tokens->{access_token});
$config->addToHash('gapi/tokens/'.$user_data->{email}, 'access_token', $tokens->{access_token} );
if ($tokens->{refresh_token}) {
$config->addToHash('gapi/tokens/'.$user_data->{email}, 'refresh_token', $tokens->{refresh_token});
}
}
$c->render( json => $config->get('gapi') );
} else {
$c->render(template => 'oauth');
}
};
app->start;
( run in 0.295 second using v1.01-cache-2.11-cpan-8d75d55dd25 )