Google Drive API: поиск всех файлов, которые я могу редактировать, в том числе на общих дисках

Я думаю, что название довольно ясное. Я прочитал и прочитал (и прочитал) документ файлы поиска , безуспешно.

Проблема в том, что я пытаюсь перечислить файлы, которые могу редактировать, потому что я являюсь участником или менеджером общего диска, на котором они находятся: у меня нет прямого разрешения на файлы, я могу редактировать их благодаря наследованию.

Я пытался выполнить запрос files.list с помощью q = 'myadress' in writers or 'myadress' in owners и возвращает все файлы, которые я могу редактировать, кроме случая, описанного выше.

(Да, я установил для всех параметров, относящихся к общему диску, значение true).

В этот поиск включены:

  • файлы на обычном диске, которые я могу редактировать
  • файлы на общем диске, когда у меня есть явное разрешение на запись для файла

Исключены:

  • файлы, которые я могу редактировать, потому что они находятся на общем диске, которым я управляю (или соавтор)

Есть ли способ получить все эти файлы одним снимком?

изменить: чтобы было понятно, меня интересуют только файлы, которые я могу редактировать. Я мог бы перечислить все файлы, видимые мне, а затем проверить объект ответа, могу ли я их редактировать или нет, но это означало бы, что в списке будет намного больше файлов, чем необходимо.

Спасибо !


person Valentin Coudert    schedule 07.10.2020    source источник


Ответы (1)


Вы правы, это невозможно

Я считаю, что у меня есть результаты, похожие на вас:

Параметр q

условия поискового запроса

Для поиска файлов используйте параметр q в files: files.list.

В цитированной выше статье есть много параметров для файлов на вашем основном диске, например: writers, owners, readers.

Но если бы я сделал какой-либо запрос с запросом, содержащим in writers или in owners, если бы я мог редактировать файл только потому, что я был членом родительского общего диска, он бы не отобразился. Это могло бы появиться только в том случае, если бы кто-то вошел в отдельный документ и дал мне разрешение на редактирование.

Я мог бы использовать другие q параметры, такие как fullText, и это без проблем возвращало бы элементы общего диска.

ОБНОВЛЕНИЕ: похоже, Google теперь осведомлен об этой проблеме, https://issuetracker.google.com/171363628. Пойдите и поставьте ☆, чтобы они знали, что это влияет на вас.


Возможные обходные пути

Вы, вероятно, хорошо их знаете, но я все равно перечислю их для будущих пользователей.

Ограничьте поля

Справочник

Например, используя запрос со следующими параметрами:

corpora = allDrives
includeItemsFromAllDrives = true
pageSize = 1000
supportsAllDrives = true
fields = files/id, files/name, files/capabilities/canEdit
key = [YOUR_API_KEY]

Что включает в себя значительное ограничение возвращаемых полей для повышения производительности и эффективности. В этом случае возвращаются только идентификатор, имя и логическое значение, указывающее, может ли пользователь редактировать. В этом запросе pageSize установлено на максимально допустимое значение.

Получив этот ответ, вы можете отфильтровать его в памяти. Как ты и предположил.

Сделайте несколько запросов

Я не уверен, возникают ли у вас проблемы с квотами, и в этом случае этот вариант может оказаться для вас непрактичным.

Если вы не прочь сделать несколько вызовов API, стоит определить общие диски, к которым у вас есть доступ для редактирования. По необходимости у вас будет доступ для редактирования в файлы, содержащиеся в нем. После того, как вы определили, можете ли вы редактировать определенный общий диск. Вы можете сделать запрос для каждого общего диска и для вашего основного диска. Что в зависимости от того, сколько у вас общих дисков и как часто они меняются, может быть для вас достаточно практичным.

Если общие диски вообще не меняются очень часто, вы можете просто сохранить список идентификаторов общих дисков, который вы можете периодически обновлять с помощью автоматического сценария. Значит, вы делаете на один запрос меньше.

person iansedano    schedule 14.10.2020
comment
Привет, @iansedano, да, я подтверждаю, что смог перечислить все файлы, для которых у меня есть явное разрешение на запись, независимо от того, находятся ли они на обычном или общем диске. Вероятно, потому что независимо от того, где находится документ, в ответе все еще есть массив писателей. Конечно, вам нужно добавить в запрос 'your_adress' in writers. - person Valentin Coudert; 14.10.2020
comment
Странно, воспроизвести не могу, много раз пробовал. Вы правы в том, что во всех документах есть массив писателей, но система запросов работает иначе и, по крайней мере, в проводнике API не возвращает никаких результатов с общего диска с вашим запросом. Откуда вы отправляете запрос? - person iansedano; 14.10.2020
comment
если вы выполните простой GET только для этого документа (files.get), вы сможете увидеть себя в массиве writers? - person Valentin Coudert; 14.10.2020
comment
Нет, например, в файле, который я создал, на общем диске, который я также создал, нет массива writers, есть массив permissionId. Если я выполняю GET для самого разрешения, не будет массива writers или просто permissionDetails, который перечисляет меня как member и organizer. Собственно, в обычном файле на моем обычном диске тоже нет writers массива, только permissions. Вот почему я говорю, что параметр q работает иначе. - person iansedano; 15.10.2020