mschilli / net-google-drive-simple

Net::Google::Drive::Simple CPAN Module
Other
11 stars 22 forks source link

NAME

Net::Google::Drive::Simple - Simple modification of Google Drive data

SYNOPSIS

use feature 'say';
use Net::Google::Drive::Simple;

# requires a ~/.google-drive.yml file with an access token,
# see description below.
my $gd = Net::Google::Drive::Simple->new( 'version' => 3 ); # v3 interface (RECOMMENDED!)
my $gd = Net::Google::Drive::Simple->new();                 # v2 interface (OUTDATE!)

my $children = $gd->children( "/" ); # or any other folder /path/location

foreach my $item ( @$children ) {

    # item is a Net::Google::Drive::Simple::Item object

    if ( $item->is_folder ) {
        say "** ", $item->title, " is a folder";
    } else {
        say $item->title, " is a file ", $item->mimeType;
        eval { # originalFilename not necessary available for all files
          say $item->originalFilename(), " can be downloaded at ", $item->downloadUrl();
        };
    }
}

DESCRIPTION

Net::Google::Drive::Simple authenticates with a user's Google Drive and offers several convenience methods to list, retrieve, and modify the data stored in the 'cloud'. See eg/google-drive-upsync as an example on how to keep a local directory in sync with a remote directory on Google Drive.

All methods are documented based on the version you use:

GETTING STARTED

To get the access token required to access your Google Drive data via this module, you need to run the script eg/google-drive-init in this distribution.

Before you run it, you need to register your 'app' with Google Drive and obtain a client_id and a client_secret from Google:

https://developers.google.com/drive/web/enable-sdk

Click on "Enable the Drive API and SDK", and find "Create an API project in the Google APIs Console". On the API console, create a new project, click "Services", and enable "Drive API" (leave "drive SDK" off). Then, under "API Access" in the navigation bar, create a client ID, and make sure to register a an "installed application" (not a "web application"). "Redirect URIs" should contain "http://localhost". This will get you a "Client ID" and a "Client Secret".

Then, replace the following lines in eg/google-drive-init with the values received:

  # You need to obtain a client_id and a client_secret from
  # https://developers.google.com/drive to use this.
my $client_id     = "XXX";
my $client_secret = "YYY";

Then run the script. It'll start a web server on port 8082 on your local machine. When you point your browser at http://localhost:8082, you'll see a link that will lead you to Google Drive's login page, where you authenticate and then allow the app (specified by client_id and client_secret above) access to your Google Drive data. The script will then receive an access token from Google Drive and store it in ~/.google-drive.yml from where other scripts can pick it up and work on the data stored on the user's Google Drive account. Make sure to limit access to ~/.google-drive.yml, because it contains the access token that allows everyone to manipulate your Google Drive data. It also contains a refresh token that this library uses to get a new access token transparently when the old one is about to expire.

METHODS

Error handling

In case of an error while retrieving information from the Google Drive API, the methods above will return undef and a more detailed error message can be obtained by calling the error() method:

print "An error occurred: ", $gd->error();

LOGGING/DEBUGGING

Net::Google::Drive::Simple is Log4perl-enabled. To find out what's going on under the hood, turn on Log4perl:

use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($DEBUG);

LEGALESE

Copyright 2012-2019 by Mike Schilli, all rights reserved. This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

2019, Nicolas R. cpan@atoomic.org 2012-2019, Mike Schilli cpan@perlmeister.com