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) -refresh_token => Refresh token value (Get from L) 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: { alternateLink "https://drive.google.com/file/d/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/view?usp=drivesdk", 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", downloadUrl "https://doc-0g-7o-docs.googleusercontent.com/docs/securesc/ck8i7vfbvef13kb30b8mkrcjv4ihp2uj/3mfn1kbr655euhlo7tctg5mmn8oirg gf/1538654400000/10526805100525201667/10526805100525201667/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut?e=download&gd=true", editable var{capabilities}{canCopy}, embedLink "https://drive.google.com/file/d/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/preview?usp=drivesdk", etag ""omwGuTP8OdxhZkubyp-j43cFdJQ/MTUzODY1NDcxNTg5Ng"", explicitlyTrashed var{appDataContents}, fileExtension "", fileSize 1000000, headRevisionId "0B4HgPHxdPy22UmZXSFVRTkRLbXhFakdzZjFSUGkrNWZIVFN3PQ", iconLink "https://drive-thirdparty.googleusercontent.com/16/type/application/octet-stream", 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", parentLink "https://www.googleapis.com/drive/v2/files/0AIHgPHxdPy22Uk9PVA", selfLink "https://www.googleapis.com/drive/v2/files/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/parents/0AIHgPHxdPy22Uk9PVA" } ], quotaBytesUsed 1000000, selfLink "https://www.googleapis.com/drive/v2/files/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut", shared var{appDataContents}, spaces [ [0] "drive" ], title "gogle_upload_file", userPermission { etag ""omwGuTP8OdxhZkubyp-j43cFdJQ/N52l-iUAo-dARaTch8nQXOzl348"", id "me", kind "drive#permission", role "owner", selfLink "https://www.googleapis.com/drive/v2/files/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/permissions/me", type "user" }, version 2, webContentLink "https://drive.google.com/uc?id=10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut&export=download", 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 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.