Поиск в Google Диске API с помощью запроса «mimeType содержит» работает неправильно - PullRequest
0 голосов
/ 20 сентября 2019

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

  • файлы, которые не являются документами Google (приложение MIME не запускается из "приложения")/vnd.google-apps. "), например," text / plain "," image / bmp "и т. д.
  • Таблицы Google (тип mime -" application / vnd.google-apps.spreadsheet ")

Я хочу получить все эти файлы одним запросом.

Файлы из первой категории можно получить с помощью следующего подзапроса: not mimeType contains 'application/vnd.google-apps.'

Подзапрос длявторая категория: mimeType = 'application/vnd.google-apps.spreadsheet'

В результате я объединяю эти части с помощью оператора or, а затем с запросом идентификатора родительской папки: '<parentId>' in parents and (mimeType = 'application/vnd.google-apps.spreadsheet' or not mimeType contains 'application/vnd.google-apps.')

Но это не работает.Он возвращает только файлы электронных таблиц Google.Я пытался выполнить запросы для обеих категорий файлов по отдельности, и они отлично работают:

'<parentId>' in parents and (mimeType = 'application/vnd.google-apps.spreadsheet') возвращает все таблицы Google

и

'<parentId>' in parents and (not mimeType contains 'application/vnd.google-apps.') возвращает все не-Google Driveформаты.`

В качестве эксперимента я проверил другие случаи (немного упрощенные):

  • mimeType = 'application/vnd.google-apps.spreadsheet' or mimeType = 'text/plain' - возвращает таблицы + тексты, правильные
  • mimeType = 'application/vnd.google-apps.spreadsheet' or mimeType contains 'text/plain' - возвращает таблицытолько неверно
  • mimeType = 'application/vnd.google-apps.spreadsheet' or not mimeType = 'text/plain' - возвращает только электронные таблицы, неверно (у меня также есть изображения в папке)
  • mimeType contains 'text/plain' - возвращает тексты, правильно

Часть моего кода для запроса файлов (с заменой parentId, конечно):

Drive.Files.List filesRequest = service
      .files()
      .list()
      .setFields("files(id, name)")
      .setQ("'<parentId>' in parents " +
              "and (mimeType = 'application/vnd.google-apps.spreadsheet' " +
                "or not mimeType contains 'application/vnd.google-apps.')");
    FileList result = filesRequest.execute();
    List<File> files = result.getFiles();

Используемые версии зависимостей: google-api-services-drive от v3-rev162-1.23.0 до v3-rev173-1.25.0, JDK 1.8.0-91.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 сентября 2019
  • Вы хотите получить все файлы, кроме файлов, связанных с Google, за исключением таблицы Google.

    • файлов, которые не являются документами Google (тип mime не запускаетсяиз "application / vnd.google-apps."), например "text / plain", "image / bmp" и т. д.
    • Таблицы Google (тип mime - "application / vnd.google-apps.spreadsheet)")
  • Вы хотите добиться этого с помощью одного запроса с одним поисковым запросом.

Если мое пониманиеправильно, как насчет этого запроса?Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Исходя из вашей ситуации и ваших проверенных примеров запросов, как насчет запроса на игнорирование всех mimeTypes Документов Google, кроме application/vnd.google-apps.spreadsheet?Все mimeTypes файлов, связанных с Google, можно увидеть по адресу здесь .

Пример поискового запроса:

'<parentId>' in parents and (mimeType!='application/vnd.google-apps.audio' and mimeType!='application/vnd.google-apps.document' and mimeType!='application/vnd.google-apps.drawing' and mimeType!='application/vnd.google-apps.file' and mimeType!='application/vnd.google-apps.folder' and mimeType!='application/vnd.google-apps.form' and mimeType!='application/vnd.google-apps.fusiontable' and mimeType!='application/vnd.google-apps.map' and mimeType!='application/vnd.google-apps.photo' and mimeType!='application/vnd.google-apps.presentation' and mimeType!='application/vnd.google-apps.script' and mimeType!='application/vnd.google-apps.site' and mimeType!='application/vnd.google-apps.unknown' and mimeType!='application/vnd.google-apps.video' and mimeType!='application/vnd.google-apps.drive-sdk')

или

'<parentId>' in parents and not (mimeType='application/vnd.google-apps.audio' or mimeType='application/vnd.google-apps.document' or mimeType='application/vnd.google-apps.drawing' or mimeType='application/vnd.google-apps.file' or mimeType='application/vnd.google-apps.folder' or mimeType='application/vnd.google-apps.form' or mimeType='application/vnd.google-apps.fusiontable' or mimeType='application/vnd.google-apps.map' or mimeType='application/vnd.google-apps.photo' or mimeType='application/vnd.google-apps.presentation' or mimeType='application/vnd.google-apps.script' or mimeType='application/vnd.google-apps.site' or mimeType='application/vnd.google-apps.unknown' or mimeType='application/vnd.google-apps.video' or mimeType='application/vnd.google-apps.drive-sdk')

или

'<parentId>' in parents and not (mimeType='application/vnd.google-apps.audio' or mimeType contains 'application/vnd.google-apps.d' or mimeType contains 'application/vnd.google-apps.f' or mimeType contains 'application/vnd.google-apps.m' or mimeType contains 'application/vnd.google-apps.p' or mimeType='application/vnd.google-apps.script' or mimeType='application/vnd.google-apps.site' or mimeType='application/vnd.google-apps.unknown' or mimeType='application/vnd.google-apps.video')

Примечание:

  • Если при поиске по запросу имеется более 1000 файлов, для извлечения всех файлов необходимо использовать pageToken.В это время необходимо выполнить несколько запросов.Пожалуйста, будьте осторожны.

Ссылки:

Если это не то направление, которое вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...