The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

NAME

Net::Google::Drive - simple Google drive API module

SYNOPSIS

This module use to upload, download, share file on Google drive use Net::Google::Drive;

#Create disk object. You need send in param 'access_token', 'refresh_token', 'client_id' and 'client_secret'.
#Values of 'client_id' and 'client_secret' uses to create Net::Google::OAuth object so that update value of 'access_token'.
my $disk = Net::Google::Drive->new(
-client_id => $client_id,
-client_secret => $client_secret,
-access_token => $access_token,
-refresh_token => $refresh_token,
);
# Search file by name
my $file_name = 'upload.doc';
my $files = $disk->searchFileByName( -filename => $file_name ) or croak "File '$file_name' not found";
my $file_id = $files->[0]->{id};
print "File id: $file_id\n";
#Download file
my $dest_file = '/home/upload.doc';
$disk->downloadFile(
-file_id => $file_id,
-dest_file => $dest_file,
);
#Upload file
my $source_file = '/home/upload.doc';
my $res = $disk->uploadFile( -source_file => $source_file );
print "File: $source_file uploaded. File id: $res->{id}\n";

METHODS

new(%opt)

Create Net::Google::Disk object

%opt:
-client_id => Your app client id (Get from google when register your app)
-client_secret => Your app client secret (Get from google when register your app)
-access_token => Access token value (Get from L<Net::Google::OAuth>)
-refresh_token => Refresh token value (Get from L<Net::Google::OAuth>)

searchFileByName(%opt)

Search file on google disk by name. Return arrayref to info with found files. If files not found - return empty arrayref

%opt:
-filename => Name of file to find
Return:
[
[0] {
id "1f13sLfo6UEyUuFpn-NWPnY",
kind "drive#file",
mimeType "application/x-perl",
name "drive.t"
}
]

searchFileByNameContains(%opt)

Search files on google drive by name contains value in param '-filename' Param and return value same as in method searchFileByName

downloadFile(%opt)

Download file from google dist to -dest_file on local system. Return 1 if success, die in otherwise

%opt:
-dest_file => Name of file on disk in which you will download file from google disk
-file_id => Id of file on google disk

deleteFile(%opt)

Delete file from google disk. Return 1 if success, die in otherwise

%opt:
-file_id => Id of file on google disk

uploadFile(%opt)

Upload file from local system to google drive. Return file_info hashref if success, die in otherwise

%opt:
-source_file => File on local system
-parents => Optional arrayref of parent ids
Return:
{
id "1LVAr2PpqX9m314JyZ6YJ4v_KIzG0Gey2",
kind "drive#file",
mimeType "application/octet-stream",
name "gogle_upload_file"
}

setFilePermission(%opt)

Set permissions for file on google drive. Return permission hashref, die in otherwise

%opt:
-file_id => Id of file on google disk
-type => The type of the grantee. Valid values are: (user, group, domain, anyone)
-role => The role granted by this permission. Valid values are: (owner, organizer, fileOrganizer, writer, commenter, reader)
Return:
{
allowFileDiscovery JSON::PP::Boolean {
Parents Types::Serialiser::BooleanBase
public methods (0)
private methods (0)
internals: 0
},
id "anyoneWithLink",
kind "drive#permission",
role "reader",
type "anyone"
}

getFileMetadata(%opt)

Get metadata of file. Return hashref with metadata if success, die in otherwise

%opt:
-file_id => Id of file on google disk
Return:
appDataContents JSON::PP::Boolean {
Parents Types::Serialiser::BooleanBase
public methods (0)
private methods (0)
internals: 0
},
capabilities {
canCopy JSON::PP::Boolean {
Parents Types::Serialiser::BooleanBase
public methods (0)
private methods (0)
internals: 1
},
canEdit var{capabilities}{canCopy}
},
copyable var{capabilities}{canCopy},
copyRequiresWriterPermission var{appDataContents},
createdDate "2018-10-04T12:05:15.896Z",
gf/1538654400000/10526805100525201667/10526805100525201667/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut?e=download&gd=true",
editable var{capabilities}{canCopy},
etag ""omwGuTP8OdxhZkubyp-j43cFdJQ/MTUzODY1NDcxNTg5Ng"",
explicitlyTrashed var{appDataContents},
fileExtension "",
fileSize 1000000,
headRevisionId "0B4HgPHxdPy22UmZXSFVRTkRLbXhFakdzZjFSUGkrNWZIVFN3PQ",
id "10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut",
kind "drive#file",
labels {
hidden var{appDataContents},
restricted var{appDataContents},
starred var{appDataContents},
trashed var{appDataContents},
viewed var{appDataContents}
},
lastModifyingUser {
displayName "Ларри Уолл",
emailAddress "perlgogledrivemodule@gmail.com",
isAuthenticatedUser var{capabilities}{canCopy},
kind "drive#user",
permissionId 10526805100525201667
},
lastModifyingUserName "Ларри Уолл",
markedViewedByMeDate "1970-01-01T00:00:00.000Z",
md5Checksum "ded2a2983b3e1743152d8224549510e1",
mimeType "application/octet-stream",
modifiedByMeDate "2018-10-04T12:05:15.896Z",
modifiedDate "2018-10-04T12:05:15.896Z",
originalFilename "gogle_upload_file",
ownerNames [
[0] "Ларри Уолл"
],
owners [
[0] {
displayName "Ларри Уолл",
emailAddress "perlgogledrivemodule@gmail.com",
isAuthenticatedUser var{capabilities}{canCopy},
kind "drive#user",
permissionId 10526805100525201667
}
],
parents [
[0] {
id "0AIHgPHxdPy22Uk9PVA",
isRoot var{capabilities}{canCopy},
kind "drive#parentReference",
}
],
quotaBytesUsed 1000000,
shared var{appDataContents},
spaces [
[0] "drive"
],
title "gogle_upload_file",
userPermission {
etag ""omwGuTP8OdxhZkubyp-j43cFdJQ/N52l-iUAo-dARaTch8nQXOzl348"",
id "me",
kind "drive#permission",
role "owner",
type "user"
},
version 2,
writersCanShare var{capabilities}{canCopy}
}

shareFile(%opt)

Share file for download. Return download link if success, die in otherwise

%opt:
-file_id => Id of file on google disk

DEPENDENCE

Net::Google::OAuth, LWP::UserAgent, JSON::XS, URI, HTTP::Request, File::Basename

AUTHORS

  • Pavel Andryushin <vrag867@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2018 by Pavel Andryushin.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.