我找到了一个公共的Google驱动器,其中包含许多子文件夹。我想做的是通过google驱动器链接,并获取指向所有子文件夹的链接。我已经检查了Google Drive API和PyDrive,这是Google Drive API的包装库,但两者似乎都只能帮助处理Google Drive个人文件夹,而不是公共文件夹。我已经被这个问题困扰了几天了,所以我不确定去哪里。我可以抓取Google云端硬盘文件夹,但是我不知道这是否是最佳选择。我还考虑过为每个驱动器文件创建url字符串,然后使用该字符串,但是如果将来驱动器得到更新,那么我将不得不回头看看添加了哪些其他新文件,那不是一个好习惯。如果有人能让我走上正确的道路,我将不胜感激!
答案 0 :(得分:0)
我认为应该通过创建OAuth2 Service Account来完成此操作:
Google OAuth 2.0系统支持服务器到服务器的交互,例如Web应用程序和Google服务之间的交互。对于这种情况,您需要一个服务帐户,该帐户是属于您的应用程序而不是单个最终用户的帐户。您的应用程序代表服务帐户调用Google API,因此不会直接涉及用户。这种情况有时称为“两足OAuth”或“ 2LO”。 (相关术语“三足式OAuth”是指您的应用程序代表最终用户调用Google API,有时需要征得用户同意的情况。)
即使您正在使用公开的Google云端硬盘,我相信您也需要通过身份验证才能通过Google的API进行搜索。为此,您将使用服务帐户向Google API进行身份验证。一个示例(通过NodeJS客户端):
'use strict';
const { google } = require('googleapis');
const FOLDER_ID = '1Mp_a-OyGGlk5tGkezYK41iZ2qybnrPzp';
const KEY_FILE = './my-iam-service-account-key.json'
const drive = google.drive({
version: 'v3',
auth: new google.auth.GoogleAuth({
keyFile: KEY_FILE,
scopes: ['https://www.googleapis.com/auth/drive'],
})
});
drive.files.list({
q: `'${FOLDER_ID}' in parents`,
})
.then(({ data: { files, nextPageToken } }) => {
if (nextPageToken) console.log("More to get", nextPageToken);
return files;
})
.catch((res) => res.data)
.then(console.log);