2016-09-06 91 views
0

我想使用Python来访问谷歌的API,从谷歌驱动下载电子表格,我借用谷歌API示例代码,并做了一些改变它。但是,每次运行时,我总是有这个httpError返回,说我有“权限不足”。我在下面附上我的代码,我想知道是否有人可以看看它,并让我知道哪个部分是错的。谢谢PYTHON下载谷歌云端硬盘电子表格

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() 

回答

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。

用户许可和不正确使用Scopes可能导致Insufficient Permission响应。

这里有一些相关的SO问题:

相关问题