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;
}
Другие вопросы по тегам