表題の通り、下記のエラーがたまに発生する。
結論を先に書くと、access_tokenの有効期限が1時間だったので、それ以降に同じ発行内容でアクセスするとエラーが発生していただけだった。
response.status_code, response.content))
gspread.exceptions.RequestError: (401, '401: b\'<HTML>\\n<HEAD>\\n<TITLE>Unauthorized</TITLE>\\n</HEAD>\\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\\n<H1>Unauthorized</H1>\\n<H2>Error 401</H2>\\n</BODY>\\n</HTML>\\n\'')
プログラムの処理の内容的には、スプレッドーシートの管理表をもとに定期的にクエリを発行し、クエリ実行完了後に管理表をアップデートする、というもの。
1と3でアクセスする際に使用するaccess_tokenは同じものを使用していたので、2の処理に時間がかかったりして1時間を超える場合、エラーが発生していた。
なので今回は、tokenの発行から特定のシートの取得までの処理を独立させて、都度実行するように変更
1.スプレッドシート読み込み
2.クエリ実行
3.スプレッドシート上書き
※独立させた処理はここまで
def get_worksheet():
doc_id = 'スプレッドシートのDocumentID'
scope = ['https://spreadsheets.google.com/feeds']
path = os.path.expanduser("Google Drive APIを有効化した際に発行されたjsonファイルのpath")
credentials = ServiceAccountCredentials.from_json_keyfile_name(path, scope)
client = gspread.authorize(credentials)
gfile = client.open_by_key(doc_id)
worksheet = gfile.sheet1
return(worksheet)
ちなにみ、最初からrefresh_tokenを発行しておけば、いちいち再発行する必要がないので、何時間も連続してアクセスする必要の場合はそちらを使う方がベター。