从Google App Engine Python应用访问Google云端硬盘

时间:2013-03-16 21:03:34

标签: python google-app-engine google-drive-api

我有一个现有的Google App Engine Python应用程序,它具有很多功能。我现在想要将Google云端硬盘集成到应用中。具体来说,我希望我的应用能够:

  1. 在我的用户的Google云端硬盘中创建一个空文件,我的用户可以在其中创建Google文档。
  2. 从Google云端硬盘中检索该文件,以便在我的应用中进行进一步处理。
  3. 定期将其发回Google云端硬盘,以便用户可以将其作为Google文档进行进一步编辑。
  4. 如果知道如何做我想做的事情的人可以将我引导到符合我的SPECIFIC要求的SPECIFIC 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_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授权,但无法插入文件。

1 个答案:

答案 0 :(得分:1)

请尝试我们的快速入门应用: https://developers.google.com/api-client-library/python/start/installation

您可以创建快速入门应用引擎应用,这对您创建初始设置非常有用。有关具体用例,请参阅drive API reference