Skip to main content
 首页 » 编程设计

python之google api(表格)请求的身份验证范围不足

2025年05月04日14qlqwjy

我想从工作表中读取写入数据,读取工作正常但写入不行。我使用文档中提到的所有范围:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append

data_writer(1,1,1) 

代码:

from __future__ import print_function 
from apiclient.discovery import build 
from httplib2 import Http 
from oauth2client import file, client, tools 
# Setup the Sheets API 
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'+"https://www.googleapis.com/auth/drive.file"+"https://www.googleapis.com/auth/drive" 
store = file.Storage('credentials.json') 
creds = store.get() 
if not creds or creds.invalid: 
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) 
    creds = tools.run_flow(flow, store) 
service = apiclient.discovery.build('sheets', 'v4', http=creds.authorize(Http())) 
 
# Call the Sheets API 
SPREADSHEET_ID = '1JwVOqtUCWBMm_O6esIb-9J4TgqAmMIdYm9sf5y-A7EM' 
RANGE_NAME = 'Jokes!A:C' 
# How the input data should be interpreted. 
value_input_option = 'USER_ENTERED'   
# How the input data should be inserted. 
insert_data_option = 'INSERT_ROWS'  
 
def data_reader(): 
    #reading data 
    read = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,range=RANGE_NAME).execute() 
    #reading values 
    values = read.get('values', []) 
    if not values: 
        print('No data found.') 
    else: 
 
        for row in values: 
            print(row[2]) 
            continue 
def data_writer(score,num_comments,mystring): 
    value_range_body = { 
        "score":score, 
        "num_comments":num_comments, 
        "joke":mystring 
    } 
    request = service.spreadsheets().values().append(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME, valueInputOption=value_input_option, insertDataOption=insert_data_option, body=value_range_body) 
    response = request.execute() 

请您参考如下方法:

SCOPES 必须是列表类型

SCOPES = ['https://www.googleapis.com/auth/spreadsheets', "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]

旁注:你有

.../auth/drive

和

.../auth/drive.file

/drive.file 将 API 限制为仅与 drive.file API 一起使用,但/drive 向所有驱动器 API 开放。所以你应该选择一个适合你需要的。

旁注 2: 根据您提供的链接,它提到您至少需要一个 API 才能使用电子表格,因此您可能也不需要全部。