2016-05-11 2 views
0

Я пытаюсь собрать все файлы и папки, которые являются потомками данной папки.files.list() возвращает неполный список при поиске q = 'FOLDER_ID' в родительском

Для этого я использую file.list() с q="'FOLDER_ID' in parent" and trashed=false с FOLDER_ID, являющимся идентификатором интересующей меня папки. По мере обработки результатов я отслеживаю все папки, которые возвращаются из этого запроса, а затем повторите вызов files.list(), используя новые папки в параметре q. Я объединяю несколько папок в один запрос с помощью or и продолжаю повторять это до тех пор, пока новые папки не будут возвращены.

Пример:

Initial Запрос: q="('FOLDER_ID' in parent) and trashed=false"
Все последующие запросы: q="('FOLDER_ID_1' in parent or 'FOLDER_ID_2' in parent or 'FOLDER_ID_3' in parent ...) and trashed=false"

(Для получения дополнительной информации о создании запросов см Drive REST API - Search for Files)

Иногда это возвращает все папки должно и в других случаях некоторые из них отсутствуют. Этого не происходит, если я удаляю параметр q, когда возвращаются каждый файл и папка, но отсутствуют.

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

Другая информация:

  • Это не проблема с разрешениями, я использую drive.readonly

  • Это не pageSize вопрос, как я пробовал разные значения для этого и получить разные результаты.

  • Это не вопрос pageToken, так как я обязательно отправлю запрос с указанным nextPageToken, когда он существует.

  • Я запускаю это в папке с чуть менее чем 4000 папками потомков и чуть менее чем 25 000 потомков.

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

ответ

0

Я предлагаю вам отказаться от подхода, который вы приняли. Сделать так много звонков на Диск потребуется навсегда и, возможно, даст вам проблемы с квотами.

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

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

+0

Спасибо за предложение. Просто выборка папок сначала кажется разумной альтернативой. Тем не менее, я не чувствую, что это должно быть необходимо на основе документации и руководств Google для Drive API, и я не думаю, что это намного проще, поскольку в обоих сценариях мне нужно построить иерархию памяти. Кроме того, полагайте, что это не займет много времени, чтобы завершить этот процесс, как правило, около 1 минуты с <100 вызовов приводов. – dunkmann00

+0

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

+0

Я проверю это. Я действительно думаю, что идея памперской папки звучит неплохо. Но в моей ситуации папки не создаются приложением, так что это не реально. Я также пытался сделать это очень общим сценарием, который мог бы работать в любой ситуации, поэтому я предпочел бы держаться подальше от этого. – dunkmann00

0

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

'[email protected]' in owners and trashed=false 

У меня есть около 5000 файлов и, как правило, я могу перебрать их все с помощью пагинацией. Однако в некоторые дни (например, сегодня) я получаю только < 100 результатов с указанным выше запросом. Когда я переписываю свой код для извлечения файлов для данного родительского идентификатора, а затем рекурсивно итерации по подпапкам, я получу все файлы. Впоследствии исходный запрос снова завершается.

Это похоже на какую-то проблему кэширования на сервере google-drive для меня.

+0

Интересно, поэтому, я думаю, вы сказали, что он не привязан к одному типу запросов. Определенно, проблема в конце Google. – dunkmann00

Смежные вопросы