问题描述
我正在尝试让一个简单的 Python Google Drive 上传器正常工作.我在开发者控制台中创建了一个项目,启用了 Drive API 并添加了一个 OAuth 2.0 客户端 ID(应用程序类型 Other).
I am trying to get a simple Python Google Drive uploader working. I've created a project in the developer console, enabled the Drive API and added an OAuth 2.0 client ID (application type Other).
我可以看到Google Drive的设置->管理应用中列出的应用程序,并且可以成功执行Google的Python Drive API客户端提供的许多操作.files ().insert () 但是失败了:
I can see the application listed in the Google Drive's Settings -> Manage Apps, and can successfully execute many operations provided by the Python Drive API client from Google. files ().insert () however fails with:
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&convert=false&useContentAsIndexableText=false&alt=json returned "Insufficient Permission">
这是为了插入到我已使每个人都可写的目录中,如下所示:
This is for an insert into a directory which I have made writable to everyone, as seen below:
credentials = get_credentials () http = credentials.authorize (httplib2.Http ()) service = discovery.build ('drive', 'v2', http=http) PARENT_ID="0B1gLgXwTiUzlfmo0UGVsZ1NWdW1nZG9OcENNYkJua2E1d0pqWE14TjFyc2hVMHdEU1h5czQ" perms = service.permissions().list(fileId=PARENT_ID).execute() print ("PERMISSIONS:") for perm in perms["items"]: for p in perm: print (p, perm[p]) print parent = { "isRoot": False, "kind": "drive#parentReference", "id": PARENT_ID } service.files ().insert ( body = {"parents" : [parent]}, media_body='./test.txt', convert=False, useContentAsIndexableText=False ).execute ()
其中列出的权限为:
(u'withLink', True) (u'kind', u'drive#permission') (u'etag', u'"F-w0rsCIWtQP8RGyv_V1DlKfcRk/icwHkDdfUYuMzqZrUsVIyvu85K8"') (u'role', u'writer') (u'type', u'anyone') (u'id', u'anyoneWithLink') (u'selfLink', u'https://www.googleapis.com/drive/v2/files/0B1gLgXwTiUzlfmo0UGVsZ1NWdW1nZG9OcENNYkJua2E1d0pqWE14TjFyc2hVMHdEU1h5czQ/permissions/anyoneWithLink')
谁能指出我缺少哪个权限?
Can anyone point me to which permission I am missing, please?
推荐答案
文件: 插入 需要至少具有以下范围之一的授权
Files: insert requires authorization with at least one of the following scopes
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
https://www.googleapis.com/auth/drive.appdata
https://www.googleapis.com/auth/drive.apps.readonly
检查您正在使用哪个范围进行身份验证.
Check which scope you are authenticating with.