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 )