2016-12-06 12 views
0

GoogleドライブのREST APIインターフェイスで苦労しています。 プログラムでフォルダを作成する必要があります。 apiドキュメント(https://developers.google.com/drive/v3/reference/files/create)を読むと、POSTメソッドを持つフォルダをhttps://www.googleapis.com/drive/v3/filesに、フォルダ名とMIMEタイプを 'application/vnd.google-apps.folder'とするリクエスト本体にすることができます残りのAPIインターフェイスとPythonリクエストを使用してGoogleドライブにフォルダを作成します

この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私は正しい動作をするので、私のコードがどこで間違っているのか理解できません。

私は移植可能なプラグインを書いています。私はGoogleライブラリを扱いたくないので、単純なHttpアプローチが好きです。

私に何か提案をいただければ幸いです。

+1

他のPythonモジュールを使用できますか?私は 'pydrive'を使ってGoogleドライブとのやりとりを成功させました。 – asongtoruin

+0

私は依存関係を避けるでしょう。 http://stackoverflow.com/questions/23594515/python-request-for-google-drive –

答えて

1

URLに問題があります。 ?uploadType=multipartは、これがフォルダの作成には適していないため失われます。「アップロード」はファイルのコンテンツへの参照であり、フォルダにはコンテンツがありません。

+0

のようにHTTPリクエスト/レスポンスソリューションを探していますが、報告された問題が誤って入力されていても削除されます。 –

+0

それは 'requests.post'があなたのPOSTデータをどのように構成しているかと関係していると思います。あなたは "試してみる"を使用して、何がワイヤーになるべきかを知っています。 Pythonアプリケーションが実際に送信しているものと比較してください。 POST本体はJSONオブジェクトでなければならないことを忘れないでください。ファイルが「無題」と呼ばれているという事実は、Googleドライブがあなたの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() 

GoogleドライブAPI {リクエストボディ}で必要なパラメータを望んでいるので、メタデータはJSON文字列とヘッダ「コンテンツタイプ」を慎重に設定し、「アプリケーション/ JSONとして渡されなければなりません"そうでなければ、APIはあまり好きではありませんPythonのリクエストは、デフォルトで 'アプリケーション/ x-www-form-urlencoded'

0

レスポンスAPI POSTコールを送信しようとしましたか?私は安心してAPIとPythonを終日使用しています。私はまず郵便配達員でそれをテストします。それがうまくいくならば、PostmanにPythonコードに変換させるだけです。そこから、変数を作成して関数を作成することができます。 Pythonスクリプトを実行し、フォルダが作成されたことを確認します。

+0

私はその問題が "application/json"に設定されなければならない 'Content-Type' mimetypeに関連していることを発見しました。最後の答えを見てみましょう。 –

関連する問題