搜索引擎访问Google云端硬盘文件

时间:2018-07-19 13:06:57

标签: python web-scraping google-drive-api web-crawler search-engine

我找到了一个公共的Google驱动器,其中包含许多子文件夹。我想做的是通过google驱动器链接,并获取指向所有子文件夹的链接。我已经检查了Google Drive API和PyDrive,这是Google Drive API的包装库,但两者似乎都只能帮助处理Google Drive个人文件夹,而不是公共文件夹。我已经被这个问题困扰了几天了,所以我不确定去哪里。我可以抓取Google云端硬盘文件夹,但是我不知道这是否是最佳选择。我还考虑过为每个驱动器文件创建url字符串,然后使用该字符串,但是如果将来驱动器得到更新,那么我将不得不回头看看添加了哪些其他新文件,那不是一个好习惯。如果有人能让我走上正确的道路,我将不胜感激!

1 个答案:

答案 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);