Drive SDK 未列出我的所有文件

Drive SDK not listing all my files

我试图列出我的驱动器中的所有文件(大约 10 个),但下面只会列出 1 个(这甚至不是我的真实文件)......

代码:

from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials

client='my_client_id'
client_email = 'my_client_email'
with open("/path/to/file.p12") as f:
    private_key = f.read()

credentials = SignedJwtAssertionCredentials(client_email, private_key, 'https://www.googleapis.com/auth/drive')
http_auth = credentials.authorize(Http())
drive_service = build('drive', 'v2', http=http_auth)
r = drive_service.files().list().execute()
files = r['items']
for f in files:
    print f['id'], f['title']

结果:

"<file_id> How to get started with Drive"

编辑: This question 类似,但答案是要有正确的 oauth 范围,我在上面有。

编辑#2: 我认为这可能是一个时间问题,所以我给了它几个小时,但仍然没有鹅。

编辑#3: 如果我尝试从另一个用户复制文件然后列出我的文件,那么我将得到 2 个文件: “如何开始使用云端硬盘” “我的新档案” 那么,这只是列出该应用程序创建的文件?我如何获取我的其余文件???

您使用服务帐户进行身份验证。默认情况下,服务帐户无权访问您的云端硬盘数据,只能访问它自己拥有的文件。

您可以通过三个选项来解决此问题:

  1. 在您的云端硬盘帐户中创建一个文件夹,并与服务帐户共享 (read/write)。您和您的服务帐户都可以读取和写入您放置在该文件夹中的任何文件。

  2. 如果您使用 Google Apps For Business,请设置 domain wide delegation 以允许您的服务帐户模拟您域中的所有用户。这样您就可以让您的服务帐户像您的实际 Google Apps 帐户一样运行。

  3. 无论您是否使用 Google Apps For Business:不要使用服务帐户,而是 3-legged OAuth。使用 3-legged OAuth,您将能够生成一个访问令牌和一个刷新令牌,这将允许您的应用程序代表您的实际 Google 帐户在云端硬盘中运行。请注意,最后一个选项根本不使用服务帐户。

最简单的显然是选项(1)。如果不可接受,那么我会选择选项 (3),除非您真的希望能够模拟您域中的所有用户。