Play Framework アプリケーションで Google Drive API ライブラリを使用しています。
チームドライブを検索し、フォルダーが存在するかどうかを確認し、存在しない場合はフォルダーを作成しようとしています。FileList
の前に オブジェクトを使用してTeamDriveList
いましたが、 を使用するFileList
と、チーム ドライブにフォルダーが存在していても常に作成されていました。既存のフォルダーは決して見つかりませんでした。フォルダを何度も複製します。
したがって、いくつかの投稿を読んだ後:
チーム ドライブ ファイルを反復処理する Google Drive API JAVA
Google Drive API - 重複するフォルダを作成する
に切り替える必要があったようですTeamDriveList
。
Google のドキュメントでこの例を使用しています: https://developers.google.com/drive/v3/web/manage-teamdrives#managing_team_drives_for_domain_administrators
ご覧のとおりsetQ
、検索を実行するために使用します。
TeamDriveList result = driveService.teamdrives().list()
.setQ("organizerCount = 0")
.setFields("nextPageToken, teamDrives(id, name)")
.setUseDomainAdminAccess(true)
.setPageToken(pageToken)
.execute();
ただし、私のコードでは、コンパイルしようとすると、setQ
存在しないエラーがスローされます。
これが私のコードです:
public static String getSubfolderID(Drive service, String parentFolderID, String folderKeyToGet) {
// We need to see if the folder exists based on the ID...
String folderID = "";
Boolean foundFolder = false;
TeamDriveList result = null;
File newFolder = null;
// Set the drive query...
String driveQuery = "mimeType='application/vnd.google-apps.folder' and '" + parentFolderID
+ "' in parents and name contains '" + folderKeyToGet
+ "' and trashed=false";
try {
result = service.teamdrives().list()
.setQ(driveQuery)
.execute();
} catch (IOException e) {
e.printStackTrace();
}
for (TeamDrive folder : result.getTeamDrives()) {
System.out.printf("Found folder: %s (%s)\n", folder.getName(), folder.getId());
foundFolder = true;
folderID = folder.getId();
}
if (foundFolder != true) {
// Need to create the folder...
File fileMetadata = new File();
fileMetadata.setName(folderKeyToGet);
fileMetadata.setTeamDriveId(parentFolderID);
fileMetadata.set("supportsTeamDrives", true);
fileMetadata.setMimeType("application/vnd.google-apps.folder");
fileMetadata.setParents(Collections.singletonList(parentFolderID));
try {
newFolder = service.files().create(fileMetadata)
.setSupportsTeamDrives(true)
.setFields("id, parents")
.execute();
} catch (IOException e) {
e.printStackTrace();
}
// Send back the folder ID...
folderID = newFolder.getId();
System.out.println("Folder ID: " + newFolder.getId());
}
return folderID;
}
問題のコード行は次のとおりです。
result = service.teamdrives().list()
.setQ(driveQuery)
.execute();
これが存在しない場合、次のクエリを使用して検索するにはどうすればよいですか。
String driveQuery = "mimeType='application/vnd.google-apps.folder' and '" + parentFolderID
+ "' in parents and name contains '" + folderKeyToGet
+ "' and trashed=false";
探しているフォルダーの場合、重複が発生しないようにフォルダーを見つけてください。
助けに感謝します。