【问题标题】:Access Google Drive API in Python whithout google-api-python-client (installed app)在没有 google-api-python-client 的情况下使用 Python 访问 Google Drive API(已安装的应用程序)
【发布时间】:2014-03-20 13:47:01
【问题描述】:

我想在 Python3 中安装一个应用程序来管理我的 Google 帐户中的 Google Drive 文件。

由于官方的 google-api-python-client 不支持 Python3,我决定自己编写 oauth2 方法并使用 urlib.request 访问 google drive api。

我设法通过了身份验证过程并获得了令牌。然后我尝试按照 api 参考访问 google drive api(复制文件):POST https://www.googleapis.com/drive/v2/files/fileId/copy 使用此代码:

def copy_file(token, target_name):
    print("Access Token: " + token)
    url_target = "https://www.googleapis.com/drive/v2/files/0Akg4S5DP95FAdFM3VXNJbVo4TjM0MFFGVm5hWlFtU2c/copy"
    request = urllib.request.Request(url_target)
    request.add_header("Authorization", "OAuth" + token)
    request.add_header("title", target_name)
    f = urllib.request.urlopen(request)
    print(f.read())

我只收到 404 错误。

当我尝试使用 Google Api Explorer 时,它可以正常工作:

Request


POST https://www.googleapis.com/drive/v2/files/0Akg4S5DP95FAdFM3VXNJbVo4TjM0MFFGVm5hWlFtU2c/copy?key={YOUR_API_KEY}

Content-Type:  application/json
Authorization:  Bearer ya29.1.AADtN_ULTFZ3jvv962bVVjAYv_GknktRMgvIGAGJPdZ5OAocQANLmN5q_UMq5cA53aqoHBkqo39wHiGM1-pg
X-JavaScript-User-Agent:  Google APIs Explorer

{
 "title": "copia de HiperAgenda"
}

Response


200 OK

我在代码中省略了 ?key={YOUR_API_KEY} 我的 Api Key 在哪里?

我怎么了?

【问题讨论】:

    标签: python python-3.x google-api httprequest google-drive-api


    【解决方案1】:

    已解决

    def copyFile(token, target_name):
        print("Access Token: " + token)
        url_destino = "https://www.googleapis.com/drive/v2/
                      files/0AilPd9i9ydNTdFc4a2lvYmZnNkNzSU1kdVFZb0syN1E/copy
                      ?key=(YOUR_API_KEY provided by Google API Console)"
        values = "{'title': '%'}" % target_name
        data = values.encode('utf-8')
        request = urllib.request.Request(url_destino, data, method='POST')
        request.add_header("Authorization", "Bearer " + token)
        request.add_header("Content-Length", len(data))
        request.add_header("Content-Type", "application/json")
        print(request.header_items())
        f = urllib.request.urlopen(request)
        print(f.read())
    

    修正错误:

    • 我在 Google API 控制台中找到了我的 API_KEY。
    • HTTP 请求方法是 'POST'
    • 令牌值以“Bearer”字开头,不要“OAuth”(已弃用)。
    • 所需参数不是请求标头。这是请求的数据。
    • “数据”是 json 格式,但是是二进制的。
    • 需要标头“Content-Type: application/json”
    • 需要标头“Content-Length:”

    已经上传了一个完整的示例的要点:https://gist.github.com/SalvaJ/9722045

    【讨论】:

      【解决方案2】:

      您没有在 Python 实现中添加 copy 请求参数的值(即 API 资源管理器中显示“copy?key={YOUR_API_KEY}”的部分

      【讨论】:

      • 我已经添加了 key= 的值,但是响应是 404 错误。
      最近更新 更多