Можно ли запросить несколько папок (родителей) с помощью Google Drive API v3? - PullRequest
1 голос
/ 09 февраля 2020

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

Моя проблема заключается в том, что при попытке строки вместе с запросом на получение файлов в any указанных идентификаторов папок в ответе API возвращается следующее: пустой files массив , несмотря на наличие изображений в каждой соответствующей папке, или files массив, содержащий только папку MIME-типов и ни одного изображения.

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


Вот пример моего запроса: '<folder-id-1>' in parents or '<folder-id-2>' in parents.

И фрагмент из моего кода:

const res = await this.drive.files.list({
    q: `(${encodeURIComponent(foldersChunk.map(folder => `'${folder.id}' in parents`).join(' or '))})`
});

Нужно ли запрашивать каждую отдельную папку по одному? Я надеялся найти лучшее решение, чтобы мне не приходилось совершать чрезмерные вызовы API в Google или, возможно, замедлять работу приложения для пользователя, запрашивая каждую отдельную папку, в отличие от получения изображений в нескольких папках один раз.

FWIW: Я посмотрел на этот пост на SO , где я и получил идею. Другой пользователь прокомментировал, как похожий запрос, вложив <folder-id> in parents вместе, работал для них, но, как я объяснил, это не для меня.

1 Ответ

1 голос
/ 10 февраля 2020

В google-api- nodejs -клиенте есть ошибка из-за того, что я мог проверить пробный код, потому что он вообще ничего не возвращает, как в вашем случае, но затем я использовал Попробуйте этот API для устранения неполадок. Таким образом, установив значение параметра q, как в вашем вызове ('<folder-id-1>' in parents), он будет работать как положено.

Поэтому в качестве обходного пути вы можете использовать ax ios, а затем Создайте вызов следующим образом:

const queryFoldersWithAxios = async () => {
  const dummyData = [{id: "folder-id-1"}, {id: "folder-id-2"}];
  const params = {
    q: dummyData.map(folder => `'${folder.id}' in parents`).join(' or ')
  };
  const headers = {
    "Authorization": "Bearer <YOUR_ACCESS_TOKEN>", 
    "Content-Type": "application/json"
  }
  return await axios.get("https://www.googleapis.com/drive/v3/files", {params, headers})
}

Уведомление

  • Вы можете использовать Google OAuth 2.0 Playground , чтобы легко получить токен доступа для тестирования .

  • Я создал проблему на Github, сообщая об ошибке, вы можете проверить ее здесь .

...