如何在Google Colab中通过Drive API获取超1000个Drive文件列表
Google Drive API分页批量获取视频文件名到表格的解决方案
核心逻辑
Drive API的files().list接口单次最多返回1000条数据,当文件总数超过这个数时,接口会返回nextPageToken标记下一页数据的位置。我们只需要循环调用接口,每次带上上一页的pageToken,直到没有nextPageToken返回,就能拿到所有文件。
修改后的代码示例(Google Apps Script)
function exportVideoNamesToSheet() { // 替换成你的目标文件夹ID和工作表名称 const targetFolderId = "xxxxxxxxx"; const targetSheetName = "视频列表"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheetName); sheet.clearContents(); // 清空表格原有内容 let allFiles = []; let pageToken = null; // 循环分页获取所有视频文件 do { const apiResponse = Drive.Files.list({ q: `'${targetFolderId}' in parents and mimeType contains 'video/'`, // 只筛选视频文件 pageSize: 1000, // API允许的最大单次返回量 pageToken: pageToken, orderBy: "createdTime asc", // 按创建时间升序排列,可改modifiedTime fields: "nextPageToken, files(name)" // 只请求必要字段,减少数据传输 }); allFiles = allFiles.concat(apiResponse.files); pageToken = apiResponse.nextPageToken; } while (pageToken); // 将文件名批量写入A列 const nameList = allFiles.map(file => [file.name]); if (nameList.length > 0) { sheet.getRange(1, 1, nameList.length, 1).setValues(nameList); } }
关键细节说明
- 分页循环:用
do-while确保至少执行一次请求,后续每次请求都带上上一页的pageToken,直到接口不再返回该标记,说明所有文件已获取完成。 - 字段精简:通过
fields参数只获取nextPageToken和文件名,避免请求不必要的文件信息,提升接口响应速度。 - 排序控制:
orderBy参数指定按时间戳排序,可选createdTime(创建时间)或modifiedTime(修改时间),后缀asc是升序,desc是降序。 - 异常处理(可选):如果需要处理API配额耗尽、网络异常等情况,可以在循环内添加
try-catch块,比如:try { const apiResponse = Drive.Files.list({/* 参数 */}); // 处理响应 } catch (err) { console.log(`请求出错: ${err.message}`); break; }
内容的提问来源于stack exchange,提问作者element159
相关产品推荐
相关产品推荐

