Как вывести список файлов в папке ярлыков в GDrive v3

Я пытаюсь использовать GDrive API v3 для вывода списка всех файлов и папок в папке с ярлыками.

При использовании API я могу перечислить все файлы, используя следующий запрос:

curl \
  'https://www.googleapis.com/drive/v3/files?q=%27root%27%20in%20parents&supportsAllDrives=true&supportsTeamDrives=true&key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

Что возвращает что-то вроде:

{
    "kind": "drive#file",
    "id": "xxxxxxxxxxxxxx",
    "name": "Name of file here",
    "mimeType": "application/vnd.google-apps.shortcut"
}

Когда я беру этот идентификатор и использую его в том же запросе выше, который работает для "mimeType": "application/vnd.google-apps.folder". Я получаю пустую полезную нагрузку:

{
 "kind": "drive#fileList",
 "incompleteSearch": false,
 "files": []
}

Я использую неправильную конечную точку? Есть ли что-то еще, что мне нужно добавить к запросу API?

2 ответа

Решение

У ярлыка на вашем Диске есть атрибут с идентификатором самой папки.

Если, например, у вас есть только один ярлык для папки на вашем Диске, когда вы делаете запрос, вы получите два результата при перечислении всех файлов в корне.

  1. один с mime-типом "ярлык" - это ярлык.
  2. один с mime-типом "папка" - кажется, что API все равно это перечисляет.

Если по какой-либо причине вы получаете только ярлык, вы можете получить подробную информацию о ярлыке:

Запрос

curl \
  'https://www.googleapis.com/drive/v3/files/[YOUR_SHORTCUT_ID]?fields=*&key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

отклик

(Я удалил большинство полей из ответа)

{
 "kind": "drive#file",
 "id": "[YOUR_SHORTCUT_ID]",
 "name": "[YOUR_SHORTCUT_NAME]",
 "mimeType": "application/vnd.google-apps.shortcut",
 "starred": false,
 "trashed": false,
 "shortcutDetails": {
  "targetId": "[THE_ACTUAL_FOLDER_ID]",
  "targetMimeType": "application/vnd.google-apps.folder"
 }
}

В пределах shortcutDetails это targetId.

После этого вы можете написать свой исходный запрос с соответствующим "ID" in parents.

Справка

Ярлык не является синонимом каталога, на который он указывает. Вам нужно будет сделать два запроса: один для получения идентификатора цели ("targetId") из ярлыка, а затем второй вызов для поиска файлов с targetId in parents.

Другие вопросы по тегам