JavaでGsuite共有ドライブのスプレッドシートに値を出力したいのですが、アクセスの仕方が分かりません。
apiは、GoogleSheetsApiとGoogleDriveApiを使用しており、マイドライブのスプレッドシートにアクセスして値を出力することはできます。また、共有ドライブ内にフォルダを作成し、googleCloudPlatForm・スプレッドシートの共有設定も済んでいます。
そこで以下についてお聞きしたいです。
①現在、サイトを参考に以下のコードで共有ドライブ内のファイルを読み込むか試しています。
共有ドライブ内のフォルダを認識することはできましたが、そこからどのようにそのフォルダ内のスプレッドシートにアクセスし、処理を渡すのか
②別の方法でアクセスする手段があるのか
したいことは共有ドライブにアクセスしてワークシートに値を書き込むだけです。
(eclipseで作成しているjavaのプログラムで、自動テストを実行し、該当のスプレッドシートにアクセスして処理結果を書き込むものです)
ご存知の方いらっしゃいましたら教えていただきたいです。
(変更点)
・src/main/resourcesにJsonファイルを、プロジェクトディレクトリ配下にbuild.gradleをそれぞれ配置
・CREDENTIALS_FILE_PATHを、OAuth2.0クライアントID作成時のJSONファイル名に変更
・APPLICATION_NAMEは独自で設定したものを使用
・authorize()の引数部分には、実際にアクセスするgoogleアカウントを使用
・SCOPESには全てのファイルを対象とするように追加(https://www.googleapis.com/auth/drive)
・tokensフォルダ内のstoredCredentialはスコープを変更した時に削除
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.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.drive.Drive; import com.google.api.services.drive.DriveScopes; import s.DriveQuickstart; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.security.GeneralSecurityException; import java.util.Collections; import java.util.List; public class SharedDrive { private static final String APPLICATION_NAME = "Google Drive API Java Quickstart"; private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); private static final String TOKENS_DIRECTORY_PATH = "tokens"; /** * Global instance of the scopes required by this quickstart. * If modifying these scopes, delete your previously saved tokens/ folder. */ private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE_METADATA_READONLY); private static final String CREDENTIALS_FILE_PATH = "/h.json"; /** * Creates an authorized Credential object. * @param HTTP_TRANSPORT The network HTTP Transport. * @return An authorized Credential object. * @throws IOException If the cc.json file cannot be found. */ private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException { // Load client secrets. InputStream in = DriveQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH); if (in == null) { throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH); } GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); // Build flow and trigger user authorization request. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH))) .setAccessType("offline") .build(); LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build(); return new AuthorizationCodeInstalledApp(flow, receiver).authorize("dummy@gmail.com"); } public static void main(String... args) throws IOException, GeneralSecurityException { // Build a new authorized API client service. final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT)) .setApplicationName(APPLICATION_NAME) .build(); service.teamdrives(); // Print the names and IDs for up to 10 files. DriveList result = service.drives().list() .execute(); List<com.google.api.services.drive.model.Drive> drives = result.getDrives(); if (drives == null || drives.isEmpty()) { System.out.println("No files found."); } } }
回答2件
あなたの回答
tips
プレビュー