回答編集履歴
4
行の重複を修正
answer
CHANGED
@@ -48,9 +48,6 @@
|
|
48
48
|
print(f"Unknown Error:{response.status_code}")
|
49
49
|
time.sleep(5)
|
50
50
|
continue
|
51
|
-
else:
|
52
|
-
raise APIError(response)
|
53
|
-
|
54
51
|
# リクエスト制限以外で5回連続でエラーが起きた場合は本当に例外を発生させる。
|
55
52
|
else:
|
56
53
|
raise APIError(response)
|
3
status_code
answer
CHANGED
@@ -39,10 +39,18 @@
|
|
39
39
|
|
40
40
|
if response.ok:
|
41
41
|
return response
|
42
|
+
if response.status_code == 429:
|
43
|
+
# リクエスト制限が発生したときは100+1秒待つ
|
44
|
+
print("request limit. wait 100 secs")
|
45
|
+
time.sleep(101)
|
42
46
|
else:
|
47
|
+
# その他のエラーの場合は5秒待ってリトライ
|
43
|
-
print("
|
48
|
+
print(f"Unknown Error:{response.status_code}")
|
44
|
-
time.sleep(
|
49
|
+
time.sleep(5)
|
45
|
-
|
50
|
+
continue
|
51
|
+
else:
|
52
|
+
raise APIError(response)
|
53
|
+
|
46
54
|
# リクエスト制限以外で5回連続でエラーが起きた場合は本当に例外を発生させる。
|
47
55
|
else:
|
48
56
|
raise APIError(response)
|
2
typo
answer
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
「例外処理する場所を一か所にしたい」とは、かみ砕くと、gspreadを操作するとき回数制限で発生する例外処理を関数毎に書きたくない、ことだと理解しました。
|
12
12
|
|
13
|
-
この目的を達するために、やや強引ですが、[gspreadのソース](https://github.com/burnash/gspread/blob/master/gspread/client.py#L25)を参考に、すべてのAPIリクエストの元締めである**gspreadライブラリのclientオブジェクトの
|
13
|
+
この目的を達するために、やや強引ですが、[gspreadのソース](https://github.com/burnash/gspread/blob/master/gspread/client.py#L25)を参考に、すべてのAPIリクエストの元締めである**gspreadライブラリのclientオブジェクトのrequest関数を書き換えてみました**。
|
14
14
|
|
15
15
|
下記はクラスを使わず平文でシート操作する場合となっています。
|
16
16
|
質問者さんの元のSpreadSheetクラスへの組み込みとかは御自分で考えてみてください。
|
1
comments
answer
CHANGED
@@ -47,6 +47,7 @@
|
|
47
47
|
else:
|
48
48
|
raise APIError(response)
|
49
49
|
|
50
|
+
# 関数を書き換える。
|
50
51
|
gspread.Client.request = custom_request
|
51
52
|
|
52
53
|
|