2013-03-16 128 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