【问题标题】:Create folders in google drive with rest api interface and python requests使用rest api接口和python请求在谷歌驱动器中创建文件夹
【发布时间】:2016-12-06 16:16:38
【问题描述】:

我在使用 Google Drive 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'

所以我写了这个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'
}

创建了一个文件,但未应用文件夹元数据。 当我对“试试看!”做同样的事情时APIs Explorer 我得到了正确的行为,所以我不明白我的代码哪里出错了。

我正在编写一个便携式插件,我不想处理谷歌库,所以我更喜欢简单的 Http 方法。

如果您能给我任何建议,我将不胜感激。

【问题讨论】:

  • 你可以使用其他 Python 模块吗?我通过pydrive 与 Google Drive 交互取得了很大成功。
  • 我会避免依赖。我正在寻找stackoverflow.com/questions/23594515/… 的 HTTP 请求/响应解决方案

标签: python rest api google-drive-api python-requests


【解决方案1】:

谢谢。我终于明白了:(已解决)

    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 Drive API 需要 {request body} 中需要的参数,因此元数据必须作为 json 字符串传递,并且标头“content-type”小心设置为“application/json”,否则 API 不会非常喜欢 python 请求默认为 'application/x-www-form-urlencoded'

【讨论】:

  • 现在改变了吗?这不起作用。元数据将被忽略,它会创建一个以 Untitled 作为文件名的文件。
  • 我确认答案仍然有效。创建文件夹没有任何问题。请检查授权令牌
  • 我现在可以使用它了。忘记了这篇文章。我剩下的问题是如何刷新令牌以保持登录状态。找不到任何好帖子。
【解决方案2】:

您的网址有问题。丢失?uploadType=multipart,因为这不适合创建文件夹 - “上传”是对文件内容的引用,而文件夹没有内容。

【讨论】:

  • 是的,但即使删除错字,报告的问题仍然存在。
  • 我怀疑这与requests.post 撰写您的 POST 数据的方式有关。您已经使用过“Try It”,因此您知道线路上应该发生什么。将其与您的 Python 应用程序实际发送的内容进行比较。请记住,POST 正文必须是 JSON 对象。该文件名为“Untitled”这一事实也表明 Google Drive 对您的 POST 正文不满意,因此忽略了它。
【解决方案3】:

您是否尝试过使用邮递员发送 REST API POST 调用?我整天都在使用 rest API 和 python。我首先用邮递员测试它。如果可行,只需让邮递员将其转换为 Python 代码。从那里,您可以创建变量,创建函数。运行您的 python 脚本并验证该文件夹是否已创建。

【讨论】:

  • 我发现该问题与必须设置为“application/json”的“Content-Type”mimetype 有关。看看最后一个答案。
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多