我正在使用gspread和服务帐户密钥,其他,json文件。用python 2.7不断更新谷歌电子表格。我用Raspberry Pi运行最新的Raspian Jessie。我的oauth和gspread应该都是我平台可用的最新版本。我的脚本运行一小时(最大令牌生命周期),然后停止使用错误消息:"无效令牌:无统计令牌过期错误"我的代码如下
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
from httplib2 import Http
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name(filename.json,scope)
gc = gspread.authorize(credentials)
wks = gc.open('spreadsheet name')
p1 = wks.worksheet('Printer One')
def functon()
...
p1.append_row(printing)
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
授权每0.5 / 1小时到期一次(我认为这取决于您用于连接的两种可用方法中的哪一种)。
我有一个24/7连接的Google工作表,每2秒更新一次。 几乎总是导致读/写错误的原因是授权错误,但Google API也会向您抛出各种错误,通常会在几秒后解决。这是我更新单元格的一项功能,但使用auth_for_worksheet
的详细信息。每个操作(更新单个单元格,更新范围,读取一列值)都具有与函数类似的结构,该函数始终返回授权的工作表。它可能不是最优雅的解决方案,但是这张纸已连接3个月,没有停机时间。
def auth_for_worksheet():
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name(filename.json,scope)
gc = gspread.authorize(credentials)
wks = gc.open('spreadsheet name')
p1 = wks.worksheet('Printer One')
return p1
def update_single_cell(worksheet, counter, message):
""" No data to return, update a single cell in column B to reflect this """
single_cell_updated = False
while not single_cell_updated:
try:
cell_location = "B" + str(counter)
worksheet.update_acell(cell_location, message)
single_cell_updated = True
except gspread.exceptions.HTTPError:
logger.critical("Could not update single cell")
time.sleep(10)
worksheet = auth_for_worksheet()
logger.info("Updated single cell")
return worksheet
if __name__ == '__main__':
# your code here, but now to update a single cell
wksheet = update_single_cell(wksheet, x, "NOT FOUND")