如何为 Google 驱动器 API 的 files.list API 端点获取 pageToken?
How to get a pageToken for the files.list API endpoint of the Google Drives API?
我是第一次使用 Google 驱动器 API,但我无法在任何地方找到如何使用 API 的 pageToken
系统。下面是直接取自谷歌网络编辑器的示例代码片段。
<script src="https://apis.google.com/js/api.js"></script>
<script>
/**
* Sample JavaScript code for drive.files.list
* See instructions for running APIs Explorer code samples locally:
* https://developers.google.com/explorer-help/guides/code_samples#javascript
*/
function execute() {
return gapi.client.drive.files.list({
"includeItemsFromAllDrives": true,
"orderBy": "name",
"pageSize": 1000,
"q": "'FOLDER_ID' in parents",
"supportsAllDrives": true,
"fields": "files(name,fileExtension,starred,size)"
})
.then(function(response) {
// Handle the results here (response.result has the parsed body).
console.log("Response", response);
},
function(err) { console.error("Execute error", err); });
}
gapi.load("client:auth2", function() {
gapi.auth2.init({client_id: "YOUR_CLIENT_ID"});
});
</script>
<button onclick="authenticate().then(loadClient)">authorize and load</button>
<button onclick="execute()">execute</button>
目前,上面的代码,只有returns 1000 个文件。根据文档,它还应该包含一个 nextPageToken
,但示例代码不包含 return 该标记。
我做错了什么?
我相信你的目标如下。
- 您想使用 Drive API v3 中的“Files: list”方法检索文件列表,并使用 googleapis for Javascript。
- 在这种情况下,您想使用
pageToken
。
- 您已经能够使用驱动器 API 从 Google 驱动器获取值。
这样的话,下面的修改怎么样?当你使用fields
的属性时,为了returnnextPageToken
的值,需要在[=13=的值中包含nextPageToken
=].
修改后的脚本:
function getList(pageToken) {
return new Promise((resolve, reject) => {
gapi.client.drive.files.list({
"includeItemsFromAllDrives": true,
"orderBy": "name",
"pageSize": 1000,
"q": "'FOLDER_ID' in parents",
"supportsAllDrives": true,
"fields": "files(name,fileExtension,starred,size),nextPageToken",
"pageToken": pageToken
}).then(res => resolve(res)).catch(err => reject(err));
});
}
async function execute() {
let fileList = [];
let pageToken = "";
do {
const obj = await getList(pageToken).catch(err => console.log(err));
if (obj.result.files.length > 0) fileList = [...fileList, ...obj.result.files];
pageToken = obj.result.nextPageToken;
} while (pageToken);
console.log(fileList)
}
- 当此脚本为运行时,使用
nextPageToken
检索超过1000个文件的文件列表。
注:
- 如果您想将“文件:列表”方法与 Google Apps 脚本一起使用,以下线程可能会有用。在这种情况下,Google Apps Script 的 Advanced Google services 的 Drive API 是版本 2。请注意这一点。
Is there anyway to use 'size' as a search parameter with DriveApp.searchFiles in Google Apps Script?
使用您的参数的 Google Apps 脚本的示例脚本如下。当您使用此脚本时,please enable Drive API at Advanced Google Services.
function myFunction() {
let fileList = [];
let pageToken = "";
do {
const obj = Drive.Files.list({
"includeItemsFromAllDrives": true,
"orderBy": "title",
"maxResults": 1000,
"q": "'FOLDER_ID' in parents",
"supportsAllDrives": true,
"fields": "nextPageToken,items(title,fileExtension,fileSize,labels(starred))",
"pageToken": pageToken
});
if (obj.items.length > 0) fileList = [...fileList, ...obj.items];
pageToken = obj.nextPageToken;
} while(pageToken);
console.log(fileList)
}
参考:
我是第一次使用 Google 驱动器 API,但我无法在任何地方找到如何使用 API 的 pageToken
系统。下面是直接取自谷歌网络编辑器的示例代码片段。
<script src="https://apis.google.com/js/api.js"></script>
<script>
/**
* Sample JavaScript code for drive.files.list
* See instructions for running APIs Explorer code samples locally:
* https://developers.google.com/explorer-help/guides/code_samples#javascript
*/
function execute() {
return gapi.client.drive.files.list({
"includeItemsFromAllDrives": true,
"orderBy": "name",
"pageSize": 1000,
"q": "'FOLDER_ID' in parents",
"supportsAllDrives": true,
"fields": "files(name,fileExtension,starred,size)"
})
.then(function(response) {
// Handle the results here (response.result has the parsed body).
console.log("Response", response);
},
function(err) { console.error("Execute error", err); });
}
gapi.load("client:auth2", function() {
gapi.auth2.init({client_id: "YOUR_CLIENT_ID"});
});
</script>
<button onclick="authenticate().then(loadClient)">authorize and load</button>
<button onclick="execute()">execute</button>
目前,上面的代码,只有returns 1000 个文件。根据文档,它还应该包含一个 nextPageToken
,但示例代码不包含 return 该标记。
我做错了什么?
我相信你的目标如下。
- 您想使用 Drive API v3 中的“Files: list”方法检索文件列表,并使用 googleapis for Javascript。
- 在这种情况下,您想使用
pageToken
。
- 在这种情况下,您想使用
- 您已经能够使用驱动器 API 从 Google 驱动器获取值。
这样的话,下面的修改怎么样?当你使用fields
的属性时,为了returnnextPageToken
的值,需要在[=13=的值中包含nextPageToken
=].
修改后的脚本:
function getList(pageToken) {
return new Promise((resolve, reject) => {
gapi.client.drive.files.list({
"includeItemsFromAllDrives": true,
"orderBy": "name",
"pageSize": 1000,
"q": "'FOLDER_ID' in parents",
"supportsAllDrives": true,
"fields": "files(name,fileExtension,starred,size),nextPageToken",
"pageToken": pageToken
}).then(res => resolve(res)).catch(err => reject(err));
});
}
async function execute() {
let fileList = [];
let pageToken = "";
do {
const obj = await getList(pageToken).catch(err => console.log(err));
if (obj.result.files.length > 0) fileList = [...fileList, ...obj.result.files];
pageToken = obj.result.nextPageToken;
} while (pageToken);
console.log(fileList)
}
- 当此脚本为运行时,使用
nextPageToken
检索超过1000个文件的文件列表。
注:
- 如果您想将“文件:列表”方法与 Google Apps 脚本一起使用,以下线程可能会有用。在这种情况下,Google Apps Script 的 Advanced Google services 的 Drive API 是版本 2。请注意这一点。
Is there anyway to use 'size' as a search parameter with DriveApp.searchFiles in Google Apps Script?
使用您的参数的 Google Apps 脚本的示例脚本如下。当您使用此脚本时,please enable Drive API at Advanced Google Services.
function myFunction() { let fileList = []; let pageToken = ""; do { const obj = Drive.Files.list({ "includeItemsFromAllDrives": true, "orderBy": "title", "maxResults": 1000, "q": "'FOLDER_ID' in parents", "supportsAllDrives": true, "fields": "nextPageToken,items(title,fileExtension,fileSize,labels(starred))", "pageToken": pageToken }); if (obj.items.length > 0) fileList = [...fileList, ...obj.items]; pageToken = obj.nextPageToken; } while(pageToken); console.log(fileList) }