Java
GoogleDrive

Google Drive SDK 使ってみると便利

More than 3 years have passed since last update.

新しいネタではないですが、GoogleDriveにデータを流し込む処理をする時の手順などをまとめておきます

前提

  1. Google Developersにアクセスしてプロジェクトを新規作成しておく
  2. Google Drive API, Google Drive SDKを有効に、OAuthでClientId, Client secret を作成
  3. 動作確認用のサンプルコーディング

やってみる

サンプルソース

DriveCommandLine.java
package sample;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;

public class DriveCommandLine {

    private static String CLIENT_ID = "id.apps.googleusercontent.com";
    private static String CLIENT_SECRET = "key";

    private static String REDIRECT_URL = "urn:ietf:wg:oauth:2.0:oob";

    public static void main(String[] args) throws IOException {

        HttpTransport httpTransport = new NetHttpTransport();
        JsonFactory jsonFactory = new JacksonFactory();

        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport,
                jsonFactory,
                CLIENT_ID,
                CLIENT_SECRET,
                Arrays.asList(DriveScopes.DRIVE)
                ).setAccessType("online").setApprovalPrompt("auto").build();

        String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URL).build();
        System.out.println("Please open the following URL in your browser then type the autorization code:");
        System.out.println(" " + url);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String code = br.readLine();

        GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URL).execute();
        GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

        // 新規認証APIクライアントを作成
        Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build();

        // ファイルを挿入
        File body = new File();
        body.setTitle("My document");
        body.setDescription("A test document");
        body.setMimeType("text/plain");

        java.io.File fileContent = new java.io.File("サンプルurl/document.txt");
        FileContent mediaContent = new FileContent("text/plain", fileContent);

        File file = service.files().insert(body, mediaContent).execute();
        System.out.println("File ID: " + file.getId());
    }

}

pom.xmlのサンプル

pom.xml
        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-drive</artifactId>
            <version>v2-rev123-1.18.0-rc</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-guava</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.findbugs</groupId>
            <artifactId>jsr305</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>xpp3</groupId>
            <artifactId>xpp3</artifactId>
            <version>1.1.4c</version>
        </dependency>
        <dependency>
            <groupId>com.google.http-client</groupId>
            <artifactId>google-http-client-jackson2</artifactId>
            <version>1.18.0-rc</version>
        </dependency>

動作確認します

  • 実行すると出力されたURLにアクセス
  • input boxのキーをコンソールに貼付ければ許容したアカウントのドライブにファイルが上がっているはず
    Please open the following URL in your browser then type the autorization code:
    https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&client_id=id.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/drive

もし気になったら使ってみてはどうでしょうか、普通に便利なのでいい感じです

注意点

  • java.io.Fileで指定したパスにファイルがないともちろんドライブにアップロードはされないです
  • APIを有効にし忘れるとエラーになります