PYTHON下载谷歌驱动器电子表格

时间:2016-09-06 22:14:52

标签: google-drive-api

我正在尝试使用python访问谷歌api从谷歌驱动器下载电子表格,我借用谷歌api示例中的代码并对其进行了一些更改。但是,每次我运行时,我总是有这个httpError返回说我有"权限不足"。我在下面附上了我的代码,我想知道是否有人可以查看它并让我知道哪个部分是错误的。感谢

import httplib2
import os
from apiclient.http import MediaIoBaseDownload
from apiclient import discovery
import oauth2client
from oauth2client import client
from oauth2client import tools
import io

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

SCOPES = 'https://www.googleapis.com/auth/drive'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Drive API Python Quickstart'

def get_credentials():

    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'drive-python-quickstart.json')

    store = oauth2client.file.Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():

    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('drive', 'v3', http=http)
    file_id = '1tRL7q2AYdQuuaWQyfT700H3WG6Klod9EtjF2yTMoGiE'
    request = service.files().export_media(fileId=file_id,
                                                 mimeType='text/csv')
    fh = io.FileIO('LISAtrial.csv')
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

您可能想要检查用户访问该文件的权限。在Google Drive API V3的Handling API Errors文档中

  

403:文件权限不足。用户对文件{fileId}没有足够的权限。

{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientFilePermissions",
"message": "The user does not have sufficient permissions for file {fileId}."
}
],
"code": 403,
"message": "The user does not have sufficient permissions for file {fileId}."
}
}
  

您可能还想检查files.get检索到的元数据中的用户访问级别,并使用它将UI更改为只读UI。

Insufficient Permission的用户权限和不当使用可能会导致Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri.ToString() + "#popup1"); 响应。

以下是一些相关的SO问题: