2016-01-25 45 views
0

我需要做的是通過GoolgeDrive API(我在python中使用它)對自己進行身份驗證,以訪問我的驅動器以完成一些自動化任務。GoogleDrive REST API身份驗證不需要干預

我希望我的腳本每小時獨立運行一次,無需任何干預。所以我需要的是一種用我的登錄名和密碼創建憑證對象的方法。

是否有可能沒有任何重定向等?

+0

如果您想回答您的問題,請嘗試提出更好的問題。看看這個[How-to-ask](http://stackoverflow.com/help/how-to-ask)文檔。 – Andres

回答

1

我認爲用用戶名和密碼來實現這一點是不可能的。 Google Drive實現這一點的方式是使用刷新令牌。這意味着您可以交互式驗證一次您的應用程序。這使您可以申請一個小時。如果刷新令牌機制被正確配置,則應用程序將在隨後需要它時每次更新令牌。

基本上下面的步驟需要採取

  • 訪問console.developers.google.com
  • 註冊一個項目,並獲得OAuth用戶端編號
  • 選擇類型的Web服務器,並進入「http://localhost:8080/」作爲授權重定向URL
  • 下載client_secrets.json並將其存儲在您的python應用程序的根目錄中
  • 創建一個名爲「sett ings.yaml」在與以下內容

    client_config_backend: settings
    client_config:
    client_id: YOUR_CLIENT_ID_GOES_HERE
    client_secret: YOUR_CLIENT_SECRET_GOES_HERE

    save_credentials: True
    save_credentials_backend: file
    save_credentials_file: credentials.son

    01相同的地方

    oauth_scope:
    - https://www.googleapis.com/auth/drive.file
    - https://www.googleapis.com/auth/drive.install

  • 在Python代碼,你需要做適當的身份驗證和憑證保存:

    gauth = GoogleAuth() 
    gauth.settings["get_refresh_token"]=True 
    gauth.settings["approval_prompt"]="force" 
    if exists(self.credsFile): 
        gauth.LoadCredentialsFile(self.credsFile) 
    if gauth.credentials is None: 
        # Authenticate if they're not there 
        gauth.LocalWebserverAuth() 
        gauth.SaveCredentialsFile(self.credsFile) 
    elif gauth.access_token_expired: 
        # Refresh them if expired 
        gauth.Refresh() 
        gauth.Authorize() 
    else: 
        # Initialize the saved creds 
        gauth.Authorize() 
        # Save the current credentials to a file 
        gauth.SaveCredentialsFile(self.credsFile) 
    self.driveInstance= GoogleDrive(gauth) 
    
  • 確保您在self.credsFile傳遞作爲有效的文件名

  • 執行此代碼應該會在控制檯提供一個URL。將其複製到瀏覽器,進行身份驗證並提供您的同意。 Google應該要求您提供兩份同意書,第二份是針對Google雲端硬盤進行身份驗證 - 這實際上是由刷新令牌完成的。

  • 一旦獲得同意,就會調用開發者控制檯中初始憑證配置中的重定向URL。它會調用由您的應用程序啓動的臨時Web服務器。這是回撥完成的方式。(這意味着你必須爲這個步驟運行在同一臺機器上的瀏覽器和應用程序 - 你可以在所有三個文件複製到服務器)

從現在起,你的應用程序應該無需用戶交互運行下去。

+0

這似乎是一個很好的解決方案。我沒有測試過,我也不會,因爲現在我的項目採取了另一個方向,我甚至不記得爲什麼我需要這個。沒關係,它看起來是一個很好的解決方案,可能會幫助別人。 – Controlix