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

use*_*084 1 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']
Run Code Online (Sandbox Code Playgroud)

结果:

"<file_id> How to get started with Drive"
Run Code Online (Sandbox Code Playgroud)

编辑: 这个问题是类似的,但答案是有正确的oauth范围,我在上面.

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

编辑#3:如果我尝试从另一个用户复制文件然后列出我的文件,那么我将获得2个文件:"如何开始使用驱动器""我的新文件"所以,这只是列出该应用程序创建的文件?我如何获得其余的文件???

Dav*_*vid 5

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

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

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

  2. 如果您使用Google Apps for Business,请设置域范围授权,以允许您的服务帐户模拟您域中的所有用户.这样,您就可以让您的服务帐户表现得像是您真正的Google Apps帐户一样.

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

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