2013-03-16 145 views
6

我有一个现有的Google App Engine Python应用程序,它具有很多功能。我现在想要将Google云端硬盘整合到应用中。具体来说,我想我的应用程序能够:从Google App Engine访问Google Drive Python应用程序

  1. 创建我的用户的谷歌云端硬盘上的空文件,其中我的用户可以创建一个谷歌文档。
  2. 从Google云端硬盘中检索该文件,以便在我的应用中进一步处理。
  3. 定期将其发送回Google Drive,以便用户可以将其作为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 and 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授权,但不能插入文件。

+0

欢迎来到StackOverflow!请考虑重写您的问题并删除一些与回答无关的段落(如第4和第5段)。试着具体一点,因为我必须阅读两遍才能理解你想要的内容,这个问题的范围似乎非常广泛。 – 2013-03-16 21:33:53

+0

对不便和感谢您的欢迎和指导。希望我的编辑版本更好。范围并不是很宽泛:我只希望我的应用程序能够将文档来回发送到Google云端硬盘,以便用户可以使用Google文档用户界面编辑文档,但我也可以在我的应用中使用文档。 – Lindsay 2013-03-16 21:45:06

+0

我喜欢这个问题 - 你在哪里找到“drive-v2-python-appengine”?我无法在网上找到它。我不喜欢DrEdit,因为它依赖大量混淆的javascript来运行。寻找更直接的例子。 – slashdottir 2014-01-31 16:31:20

回答

1

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

您可以创建一个快速启动App Engine应用程序,这是有用的,为您打造的初始设置。具体使用情况请参考drive API reference

+2

谢谢。我试过了。我也在https://developers.google.com/drive/examples/python上试过DrEdit(花了我几个小时的工作时间才意识到它与我的需求无关)。通过https://developers.google.com/drive/quickstart-python,我观看了视频,运行了应用程序并研究了代码,但到目前为止还没有看到如何将该信息扩展到GAE并删除手册流程。回到你建议的页面,我得到:“无效的参数” – Lindsay 2013-03-17 12:14:01

+0

我想我得到“无效参数”,因为该命令应该是“dev_appserver.py”。 (不知道,只是猜测),但这给了“ValueError('不安全的字符串pickle',)”。根据评论的建议,我然后尝试了“dev_appserver.py --clear_datastore”。这给了“socket.error:[Errno 48]地址已经在使用” – Lindsay 2013-03-17 12:20:58

+0

我认为这是因为在我的Mac上,Apache已经在使用8080,并且我不知道如何修改链接中的示例代码以使用8081代替。但是,我会查看生成的代码,看看我是否可以将它合并到我的正在运行的应用程序中。再次感谢! – Lindsay 2013-03-17 12:24:30

相关问题