Drive SDK没有列出我的所有文件

时间:2015-01-03 20:12:27

标签: python google-api google-drive-api google-drive-realtime-api

我正在尝试列出我的驱动器中的所有文件(大约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:编辑#2: 我认为这可能是一个时间问题所以我给了它几个小时但仍然没有鹅。

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

1 个答案:

答案 0 :(得分:5)

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

您有三种方法可以解决此问题:

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

  2. 如果您使用的是Google Apps for Business,请设置domain wide delegation以允许您的服务帐户模拟您域中的所有用户。这样,您就可以将自己的服务帐户视为真实的Google Apps帐户。

  3. 您是否使用Google Apps for Business:请勿使用服务帐户,而应使用3-legged OAuth。使用3条腿OAuth,您将能够生成访问令牌和刷新令牌,以便您的应用程序代表您的实际Google帐户在云端硬盘中执行操作。请注意,最后一个选项根本不使用服务帐户。

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