Google Drive API Добавить общую папку в мои файлы
Я создаю сценарий PHP, который будет создавать папки в учетной записи Google Drive. После того, как папка будет создана, я поделюсь ей с разрешениями с другими пользователями моего домена приложений Google.
Я успешно создал эту часть, теперь мне нужно добавить функцию, которая может быть выполнена через пользовательский интерфейс, но я не могу найти способ сделать это через API: я хочу добавить папку в раздел "Мои файлы" пользователей (возможно, в подпапке). Через пользовательский интерфейс можно перейти в раздел "Файлы, которыми поделились со мной", щелкнув правой кнопкой мыши и выбрав "Добавить в мой файл".
Как я могу сделать это программно? Есть способ?
РЕДАКТИРОВАТЬ
Я хочу сделать это программно в каталоге пользователей
на данный момент я могу создать файл и папку в каталоге пользователей, только я не знаю, как добавить папку, совместно используемую другими пользователями
3 ответа
Я нашел ответ на свой вопрос. Я оставил здесь, так что если кому-то это нужно;)
Чтобы добавить общую папку пользователя A, для пользователя B "мои файлы" необходимо получить доступ к API-интерфейсу диска, используя в качестве пользователя B, получить общую папку (она имеет тот же идентификатор, что и в экземпляре пользователя A), и добавить в качестве родительского для этой папки корневой каталог или папка внутри диска пользователя B.
$about = $userBServiceInstance->about->get();
$userBRootFolderId = $about->getRootFolderId();
$newParent = new Google_Service_Drive_ParentReference();
$newParent->setId($userBRootFolderId);
$userBServiceInstance->parents->insert($folderId, $newParent);
Это сделано путем добавления addParents
в файл / папку, с API V3 drive.files.update
PATCH https://www.googleapis.com/drive/v3/files/FILE_ID?addParents=PARENT_ID&key={YOUR_API_KEY}
Я не знаю, правильно ли я понял ваш вопрос, но для того, чтобы программно создать папку в корне Google Диска, вы можете использовать следующий код. В Google Диске папка имеет специальный тип файла (application/vnd.google-apps.folder
то есть), см. их документацию API для получения дополнительной информации.
$client = new Google_Client();
// set various parameters, including name, key and secret
$service = new Google_Service_Drive($client);
$about = $service->about->get();
$rootID = $about->getRootFolderId();
createFolderIfNotExists($service, $rootID, "stackfolder");
// creates a folder in the given rootID or returns the ID if it already exists
function createFolderIfNotExists($service, $rootID, $foldername) {
$search = "title='{$foldername}' AND '{$rootID}' in parents AND mimeType = 'application/vnd.google-apps.folder' AND trashed != true";
$parameters = array("q" => $search);
$files = $service->files->listFiles($parameters);
if (!empty($files["items"])) {
$folderID = $files["items"][0]->getId(); // the first element
} else {
// create a folder under root
$file = new Google_Service_Drive_DriveFile();
$file->setTitle($foldername);
// To create new folder, we need to set the mime type
$file->setMimeType('application/vnd.google-apps.folder');
// set parent folder
$parent = new Google_Service_Drive_ParentReference();
$parent->setId($rootID);
$file->setParents(array($parent));
$folder = $service->files->insert($file);
$folderID = $folder->getId();
}
return $folderID;
}