Loading ...

Usare Google Drive in Java

Usare Google Drive in Java

Google mette a disposzione parecchie API per i suoi servizi; oggi vediamo come usare quelle per Google Drive con Java!

Il punto di partenza, per qualsiasi API, è creare un progetto; potete iniziare con il wizard ufficiale.

Poi andate nella sezione Libreria ed attivate le API che volete, GDrive richiede delle credenziali, che potete creare nella sezione Credenziali.

Create quelle di tipo OAuth; una volta fatto dovete scaricare il file in formato JSON (sempre dalla pagina Credenziali), e salvarlo nel vostro progetto (io uso Maven, e quindi l'ho messo dentro alla cartella resources).

A questo punto passiamo al codice; se usate Maven aggiungete queste librerie:

        <dependency>
            <groupId>com.google.api-client</groupId>
            <artifactId>google-api-client</artifactId>
            <version>1.23.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.oauth-client</groupId>
            <artifactId>google-oauth-client-jetty</artifactId>
            <version>1.23.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-drive</artifactId>
            <version>v3-rev110-1.23.0</version>
        </dependency>

Se usate Gradle:

dependencies {
	.......................
    compile 'com.google.api-client:google-api-client:1.23.0'
    compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
    compile 'com.google.apis:google-api-services-drive:v3-rev110-1.23.0'   
}

Questo il codice Java:

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.*;
import com.google.api.services.drive.Drive;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;


public class Main {

    private static final String APPLICATION_NAME = "Mp TEST DRIVE";
    private static final java.io.File DATA_STORE_DIR = new java.io.File(
            System.getProperty("user.home"), "Desktop/credentials");
    private static FileDataStoreFactory DATA_STORE_FACTORY;
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    private static HttpTransport HTTP_TRANSPORT;
    private static final List<String> SCOPES = Arrays.asList(
            DriveScopes.DRIVE_METADATA_READONLY);

    static {
        try {
            HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
            DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        } catch (Throwable t) {
            t.printStackTrace();
            System.exit(1);
        }
    }

    public static Credential authorize() throws IOException {
        InputStream in = Main.class.getResourceAsStream("/mp-test-drive.json");
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, 
                new InputStreamReader(in));
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(DATA_STORE_FACTORY)
                .setAccessType("offline")
                .build();
        Credential credential = new AuthorizationCodeInstalledApp(
                flow, new LocalServerReceiver()).authorize("user");
        System.out.println("Le credenziali sono state salvate nel file " + 
                DATA_STORE_DIR.getAbsolutePath());
        return credential;
    }

    public static Drive getDriveService() throws IOException {
        Credential credential = authorize();
        return new Drive.Builder(
                HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .build();
    }

    public static void main(String args[]) throws IOException {
        Drive service = getDriveService();
        FileList result = service.files().list()
                .setPageSize(10)
                .setFields("nextPageToken, files(id, name)")
                .execute();
        List<File> files = result.getFiles();
        if (files == null || files.size() == 0) {
            System.out.println("Nessun file trovato");
        } else {
            System.out.println("I TUOI FILES:");
            for (File file : files) {
                System.out.printf("%s (%s)n", file.getName(), file.getId());
            }
        }

    }

}

La prima volta che lanciate il programma, si aprirà il borwser per richiedere la vostra autorizzazione a collegare la app con il vostro account (quello con cui avete creato la app di Google e le credenziali).

Le credenziali verranno salvate in un file (che io messo nella mia home).

Se tutto è andato a buon fine, verrà mostrata la lista dei file:

Le credenziali sono state salvate nel file /home/matte/credentials
I TUOI FILES:
IMG-20180322-WA0005.jpg (1jPBL8CLiNGdinCdKPLeCuSwhnLSC1wdg)
IMG-20180322-WA0004.jpg (18zMRISgZC0H0qzSpbviPTYGiVrRHaBpW)
IMG-20180322-WA0006.jpg (1gXMHQH65cEmGLheqJL4KLSkdEjQUCifP)
IMG_20180304_125306.jpg (1sfjy_BB29_8WyP92M-4Ki-HXf3pr6ckT)
IMG_20180304_125240.jpg (1YaXoTnjeh7oIcXMvXedrJowqo8Re3cAX)
IMG_20180304_125257.jpg (1Cil-h1eXsAYgSh7d3V11tYjZnvhbn-kF)
IMG_20180304_125247.jpg (1Uu6-YXVbRv_j3laMpWOTgc1vvPKdz2uS)
IMG_20180214_174129.jpg (1Ny8nsms3cGgmWAPSiW1MMorisUY4v6Dl)
IMG-20180217-WA0011.jpg (1LjeRiksnZj9GB4O0bXUHqiGwJhA7Wrx0)

Forse la parte più noiosa è creare la app su Google; ma il processo è migliorato molto rispetto ad anni fa.

Enjoy!