【发布时间】:2013-03-16 21:03:33
【问题描述】:
我有一个现有的具有很多功能的 Google App Engine Python 应用程序。我现在想将 Google Drive 集成到应用程序中。具体来说,我希望我的应用能够:
- 在我的用户的 Google Drive 中创建一个空文件,我的用户可以在其中创建 Google Doc。
- 从 Google 云端硬盘中检索该文件,以便在我的应用中进行进一步处理。
- 定期将其发送回 Google 云端硬盘,以便用户可以将其作为 Google 文档进行进一步编辑。
如果知道如何做我想做的事情的人可以将我引导到满足我的特定要求的特定 Google 网页,我将永远感激不尽(不是一般的答案,例如“请参阅 DrEdit例子”)。提前致谢!
更新:
根据答案 1 中的建议,根据 drive-v2-python-appengine 中生成的示例代码,这是我的带有 RequestHandler 的程序,用于创建一个空文件:
import os
import webapp2
import io
from google.appengine.api import memcache
import httplib2
from apiclient.discovery import build
from apiclient.http import MediaIoBaseUpload
from oauth2client.appengine import oauth2decorator_from_clientsecrets
decorator = oauth2decorator_from_clientsecrets(
os.path.join(os.path.dirname(__file__), 'client_secrets.json'),
scope=[
'https://www.googleapis.com/auth/drive',
])
http = httplib2.Http(memcache)
drive_service = build("drive", "v2", http=http)
class CreateEmptyFile(webapp2.RequestHandler):
@decorator.oauth_required
def get(self):
body = {
'title': 'Sample Document',
'description': 'A sample document',
'mimeType': 'text/plain'
}
media_body = MediaIoBaseUpload(io.BytesIO(""), mimetype='text/plain', resumable=True)
file = drive_service.files().insert(body=body, media_body=media_body).execute()
self.redirect("/synopsis")
测试有点令人困惑,因为有时我运行它时,包括第一次,它会调出访问请求页面,但大多数时候不会。我使用https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=en 撤销了对 Drive 的访问权限,并且 Drive 不再出现在列表中,但我猜想执行访问权限撤销存在一个小时或更长时间的时间延迟。对此不确定,也没有看到它记录在案。
无论如何,如果我注释掉对drive_service.files().insert() 的调用,它不会中止,而是重定向到我的概要页面。我相信这意味着授权工作正常,因为这使它像生成的示例代码一样。
但是,如果我取消注释 insert 并使用 resumable=True 作为媒体正文,我会得到:
ResumableUploadError: Failed to retrieve starting URI.
如果我使用resumable=False,我会得到:
HttpError: <HttpError 401 when requesting https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&alt=json returned "Login Required">
所以我似乎能够通过 OAuth 2.0 授权,但无法插入文件。
【问题讨论】:
-
欢迎来到 StackOverflow!请考虑重写您的问题并删除一些与回答无关的段落(如第 4 和第 5 段)。尽量具体一点,因为我必须阅读两遍才能理解你想要什么,而且这个问题的范围似乎很广泛。
-
很抱歉给您带来不便,感谢您的欢迎和指导。希望我的编辑版本更好。范围并不广泛:我只是希望我的应用能够将文档来回发送到 Google Drive,以便用户可以使用 Google Docs UI 编辑文档,但我也可以在我的应用中使用文档.
-
我喜欢这个问题 - 你在哪里可以找到“drive-v2-python-appengine”?我在网上找不到。我不喜欢 DrEdit,因为它依赖于很多混淆的 javascript 来运行。寻找更直接的例子。
标签: python google-app-engine google-drive-api