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

        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();

    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:

    *   V3 (recommended)

            # Create default V3 API:
            my $gd = Net::Google:Drive::Simple->new( 'version' => 3 );

        The methods available are documented in

    *   V2 (default, outdated)

            # Create default V2 API:
            my $gd = Net::Google:Drive::Simple->new();

            # or:
            my $gd = Net::Google:Drive::Simple->new( 'version' => 2 );

        The methods available are documented in

    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

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

    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
          # 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.

        Constructor, creates a helper object to retrieve Google Drive data

        While v2 (the outdated version) is still supported by Google, we
        recommend you use v3:

            # Returns object of Net::Google::Drive::Simple::V3
            my $gd = Net::Google::Drive::Simple->new( 'version' => 3 );

            # Returns object of Net::Google::Drive::Simple::V2
            my $gd = Net::Google::Drive::Simple->new( 'version' => 2 );
            # or:
            my $gd = Net::Google::Drive::Simple->new();

        Read up on the methods in each class: Net::Google::Drive::Simple::V3
        and Net::Google::Drive::Simple::V2.

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();

    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);

    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.

    2019, Nicolas R. <> 2012-2019, Mike Schilli