2016-12-06 80 views
0

我很苦惱Google Drive REST API接口。 我需要以編程方式創建一個文件夾。閱讀API文檔(https://developers.google.com/drive/v3/reference/files/create),所以可以用POST方法創建一個文件夾https://www.googleapis.com/drive/v3/files,請求主體與文件夾名稱和MIME類型爲「應用程序/ vnd.google-apps.folder」在Google Drive中使用rest api界面和python請求創建文件夾

所以我寫這條巨蟒功能:

def createFolder(self,folderName): 
     if not self.authorization: 
      self.get_authorization() 
     url = 'https://www.googleapis.com/drive/v3/files' 
     headers = { 'Authorization':'Bearer {}'.format(self.access_token)} 
     metadata = { 
      "name": folderName, 
      "mimeType": 'application/vnd.google-apps.folder' 
     } 
     response = requests.post(url, headers = headers, params = metadata) 
     return response.json() 

,其輸出響應對象是這樣的:

{ 
    u'mimeType': u'application/json', 
    u'kind': u'drive#file', 
    u'id': u'0B350e2U7rvyvR0k3NjJmTTVuWUE', 
    u'name': u'Untitled' 
} 

的文件被創建,但是文件夾的元數據不被應用。 當我對「嘗試它」做同樣的事情! API Explorer我得到一個正確的行爲,所以我不明白我的代碼錯在哪裏。

我正在編寫一個可移植的插件,我不想處理谷歌庫,所以我寧願一個簡單的Http方法。

如果您能給我任何建議,我將不勝感激。

+1

你能夠使用其他Python模塊嗎?我通過'pydrive'與Google Drive進行了很多成功的交流。 – asongtoruin

+0

我會避免依賴關係。我正在尋找HTTP請求/響應解決方案http://stackoverflow.com/questions/23594515/python-request-for-google-drive –

回答

1

您的網址存在問題。丟失?uploadType=multipart,因爲這不適合創建文件夾 - 「上傳」是對文件內容的引用,而文件夾沒有內容。

+0

是的,但即使刪除錯誤報告的問題仍然存在。 –

+0

我懷疑這與'requests.post'如何組成你的POST數據有關。你已經使用過「試試看」,這樣你就知道線路上應該有什麼。將它與您的Python應用程序實際發送的內容進行比較。記住POST正文必須是JSON對象。該文件被稱爲「無標題」的事實也表明Google Drive對您的POST正文不滿意,因此忽略了它。 – pinoyyid

0

謝謝。我終於得到它:(解決)

def createFolder(self,folderName): 
     if not self.authorization: 
      self.get_authorization() 
     url = 'https://www.googleapis.com/drive/v3/files' 
     headers = { 
      'Authorization':'Bearer {}'.format(self.access_token), 
      'Content-Type': 'application/json' 
     } 
     metadata = { 
      'name': folderName, 
      'mimeType': 'application/vnd.google-apps.folder' 
     } 
     response = requests.post(url, headers = headers, data = json.dumps(metadata)) 
     return response.json() 

谷歌雲端硬盤API希望在{請求主體}所需的參數,因此元數據必須爲JSON字符串和頭「內容類型」精心設置爲「application/JSON傳遞「,否則API將不會像非常多的Python請求默認爲'application/x-www-form-urlencoded'

0

您是否嘗試過使用郵遞員發送其餘API POST調用?我整天都在使用其他API和Python。我先用郵差測試一下。如果可行,只需郵遞員將其轉換爲Python代碼即可。從那裏,你可以創建你的變量,創建你的功能。運行你的python腳本並驗證文件夾是否被創建。

+0

我發現這個問題與'Content-Type'mimetype有關,必須設置爲「application/json」。看看最後的答案。 –

相關問題