Java tutorial
/* * Copyright (c) 2012 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package w3bigdata.downloader; 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.googleapis.media.MediaHttpDownloader; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.DataStoreFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.drive.Drive; import com.google.api.services.drive.DriveScopes; import com.google.api.services.drive.model.*; import com.google.common.io.Resources; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.URL; import java.util.Collections; /** * A sample application that runs multiple requests against the Drive API. The requests this sample * makes are: * <ul> * <li>Does a resumable media upload</li> * <li>Updates the uploaded file by renaming it</li> * <li>Does a resumable media download</li> * <li>Does a direct media upload</li> * <li>Does a direct media download</li> * </ul> * * @author rmistry@google.com (Ravi Mistry) */ public class DriveSample { /** * Be sure to specify the name of your application. If the application name is {@code null} or * blank, the application will log a warning. Suggested format is "MyCompany-ProductName/1.0". */ private static final String APPLICATION_NAME = "W3bigdata-downloader"; private static final String DIR_FOR_DOWNLOADS = "C:/test/wtf"; /** * Directory to store user credentials. */ private static final java.io.File DATA_STORE_DIR = new java.io.File("C:/test/wtf", ".store/drive_sample"); /** * Global instance of the {@link DataStoreFactory}. The best practice is to make it a single * globally shared instance across your application. */ private static FileDataStoreFactory dataStoreFactory; /** * Global instance of the HTTP transport. */ private static HttpTransport httpTransport; /** * Global instance of the JSON factory. */ private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); /** * Global Drive API client. */ private static Drive drive; /** * Authorizes the installed application to access user's protected data. */ private static Credential authorize() throws Exception { // load client secrets URL resource = Resources.getResource("client_secrets.json"); GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(Resources.asByteSource(resource).getInput())); // set up authorization code flow GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, JSON_FACTORY, clientSecrets, Collections.singleton(DriveScopes.DRIVE)).setDataStoreFactory(dataStoreFactory) .build(); // authorize return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } public static void main(String[] args) { try { httpTransport = GoogleNetHttpTransport.newTrustedTransport(); dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); // authorization Credential credential = authorize(); // set up the global Drive instance drive = new Drive.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME) .build(); printFilesInFolder(drive, "0B4o7m0XMEBWuUUxMRGhIeUQxVTA"); // run commands View.header1("Success!"); return; } catch (IOException e) { System.err.println(e.getMessage()); } catch (Throwable t) { t.printStackTrace(); } System.exit(1); } /** * Print files belonging to a folder. * * @param service Drive API service instance. * @param folderId ID of the folder to print files from. */ private static void printFilesInFolder(Drive service, String folderId) throws IOException { FileList fileList = service.files().list().execute(); Drive.Children.List request = service.children().list(folderId); do { try { ChildList children = request.execute(); for (ChildReference child : children.getItems()) { System.out.println("File Id: " + child.getId()); } request.setPageToken(children.getNextPageToken()); } catch (IOException e) { System.out.println("An error occurred: " + e); request.setPageToken(null); } } while (request.getPageToken() != null && request.getPageToken().length() > 0); } /** * Downloads a file using either resumable or direct media download. */ private static void downloadFile(boolean useDirectDownload, File uploadedFile) throws IOException { // create parent directory (if necessary) java.io.File parentDir = new java.io.File(DIR_FOR_DOWNLOADS); if (!parentDir.exists() && !parentDir.mkdirs()) { throw new IOException("Unable to create parent directory"); } OutputStream out = new FileOutputStream(new java.io.File(parentDir, uploadedFile.getTitle())); MediaHttpDownloader downloader = new MediaHttpDownloader(httpTransport, drive.getRequestFactory().getInitializer()); downloader.setDirectDownloadEnabled(useDirectDownload); downloader.setProgressListener(new FileDownloadProgressListener()); downloader.download(new GenericUrl(uploadedFile.getDownloadUrl()), out); } }