Google-OAuth
view release on metacpan or search on metacpan
samples/google.pm view on Meta::CPAN
my $package = shift ;
my $token = shift ;
my $self = bless { token => $token }, $package ;
return new XML::Parser::Nodes
$self->response( GET => $self->url )->content ;
}
sub url {
my $self = shift ;
my $url = join '/', 'https://www.google.com',
'm8/feeds/contacts',
Google::OAuth::CGI->encode(
$self->{token}->{emailkey} ),
'full' ;
return $url ;
}
sub headers {
my $self = shift ;
my @headers = ( 'Content-Type'
=> 'application/atom+xml; charset=UTF-8; type=feed',
'GData-Version' => '3.0',
) ;
my $token = sprintf 'AuthSub token="%s"',
$self->{token}->{access_token} ;
return ( @headers, Authorization => $token ) ;
}
package Google::Calendar ;
@Google::Calendar::ISA = qw( Google::Client ) ;
use Date::Parse qw( str2time ) ;
sub items {
my $self = shift ;
my @items = map { [ dates->new(
str2time( $_->{start}->{dateTime} ) ) => $_ ]
} @{ $self->{items} } ;
my %items = () ;
foreach ( @items ) {
my $k = $_->[0]->{midnight} ;
$items{$k} ||= [] ;
push @{ $items{$k} }, $_ ;
}
return map { $items{$_} } sort { $a <=> $b } keys %items ;
}
sub url {
my $package = shift ;
my $token = shift ;
my @args = @_ ;
my @parms = () ;
push @parms, [ singleEvents => 'true' ] ;
push @parms, [ orderBy => 'startTime' ] ;
## for bucc calendar
push @parms, [ timeMin => &sunday ] ;
push @parms, [ splice @args, 0, 2 ] while @args ;
my $url = join '/', 'https://www.googleapis.com',
'calendar/v3/calendars',
Google::OAuth::CGI->encode( $token->{emailkey} ),
'events' ;
return $url unless @parms ;
return join '?', $url, join '&', map { join '=',
$_->[0] => Google::OAuth::CGI->encode( $_->[1] )
} @parms ;
}
sub sunday {
return dates->sunday( dates->new )->google ;
return dates->tomorrow(
dates->sunday( dates->new )
)->google ;
}
package Google::Drive ;
@Google::Drive::ISA = qw(
NoSQL::PL2SQL::Simple
Google::Client
) ;
my @dsn = () ; ## Do not change this line
our $foldertype = 'application/vnd.google-apps.folder' ;
sub new {
return Google::Client::new( @_ ) ;
}
sub build {
my $package = shift ;
my $db = $package->db ;
$db->addTextIndex( qw( etag parent id title about ) ) ;
}
## data source subclasses override this dsn() method
sub dsn {
return @dsn if @dsn ; ## Do not change this line
push @dsn, new NoSQL::PL2SQL::DBI::MySQL 'DriveData' ;
$dsn[0]->mysql ;
push @dsn, $dsn[0]->table('DriveQueryData') ;
return @dsn ; ## Do not change this line
}
sub root {
my $package = shift ;
my $token = shift ;
return join '/', 'https://www.googleapis.com/drive/v2', @_ ;
}
sub url {
my $package = shift ;
my $token = shift ;
my @args = @_ ;
push @args, '?maxResults=200' unless @args ;
( run in 1.531 second using v1.01-cache-2.11-cpan-39bf76dae61 )