Python:Google Drive Authentification和文件夹

时间:2017-12-12 11:01:59

标签: python google-drive-api

我有一个python脚本来匹配特定文件夹中google驱动器上的文件。它在我公司的GSuite帐户中运行良好。但是,如果我想在家中使用我的简单Google云端硬盘帐户,则无法使用。找不到文件:

这是我的代码:

from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
from apiclient.http import MediaFileUpload
from apiclient import errors
import io
from apiclient.http import MediaIoBaseDownload
from apiclient import errors
import os 
import csv

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

folder_id = 'XYZ00000'


SCOPES = 'https://www.googleapis.com/auth/drive.file'
store = file.Storage('storage.json')
creds = store.get()    
if not creds or creds.invalid:
    print("Create new data storage file ...")
    flow = client.flow_from_clientsecrets('client_secrets.json', SCOPES)
    flow.redirect_uri = client.OOB_CALLBACK_URN
    authorize_url = flow.step1_get_authorize_url()
    creds = tools.run_flow(flow, store, flags) \
            if flags else tools.run(flow, store)
    print ("Storage")
DRIVE = build('drive', 'v2', http=creds.authorize(Http()))


def getKeywordsID():
    page_token = None

    while True:
        response = DRIVE.files().list(q="'XYZ00000' in parents and trashed = false",
                                              spaces='drive',
                                              fields='nextPageToken, items(id, title)',
                                              pageToken=page_token).execute()
        for file in response.get('items', []):
            if ('test.txt' == file.get('title')):
                print ('test.txt on Google Drive found')

        page_token = response.get('nextPageToken', None)
        if page_token is None:
            break;
    return file_id    

# Download file
file_id = getKeywordsID()
if file_id != None:
    request = DRIVE.files().get_media(fileId=file_id)
    fh = io.FileIO('test.txt', 'wb')
    downloader = MediaIoBaseDownload(fh, request)
    done = False
    while done is False:
        status, done = downloader.next_chunk()
        print ("Download test.txt %d%%." % int(status.progress() * 100) ) 
else:
    print ("File not found.")

我不知道为什么它不起作用。我启用了Google Drive API,创建了一个项目,添加了OAuth2.0客户端ID(选择“其他”作为选项)并下载了json文件以进行存储。

1 个答案:

答案 0 :(得分:0)

从发布的回溯中,我可以看到getKeywordsID函数中您要返回file_id变量,该变量尚未在getKeywordsID函数范围内初始化。因此抛出UnboundLocalError: local variable 'file_id' referenced before assignment