Randomness in interval and increasing waiting time to prevent API ban

This commit is contained in:
Brieuc Dubois 2024-01-21 18:27:36 +01:00
parent a2eff32362
commit 24df340049
1 changed files with 72 additions and 35 deletions

39
main.py
View File

@ -1,4 +1,5 @@
from tgtg import TgtgClient
from tgtg.exceptions import TgtgAPIError
import os
import json
import telegram
@ -6,7 +7,16 @@ import asyncio
import time
import datetime
import requests
import random
initial_waiting_time = 60
waiting_time = initial_waiting_time
waiting_time_limit = 60 * 60 * 24
waiting_time_increase = 2
randomness = 0.1
interval = 60
client = None
telegram_bot = None
@ -16,6 +26,21 @@ if removal_notification is None:
removal_notification = False
def parse_duration(seconds):
seconds = int(seconds)
minutes = seconds // 60
seconds = seconds % 60
hours = minutes // 60
minutes = minutes % 60
if hours > 0:
return f'{hours}h {minutes}m {seconds}s'
elif minutes > 0:
return f'{minutes}m {seconds}s'
else:
return f'{seconds}s'
def check_env():
if os.environ.get('TGTG_EMAIL') is None:
return False
@ -74,6 +99,7 @@ async def main():
last = []
while True:
try:
items = client.get_items()
texts = []
@ -120,7 +146,18 @@ async def main():
print('-', end='', flush=True)
last = next
time.sleep(60)
time.sleep(interval + randomness * interval * (2 * random.random() - 1))
waiting_time = initial_waiting_time
except TgtgAPIError as e:
print(e)
real_waiting_time = round(waiting_time + randomness * waiting_time * (2 * random.random() - 1))
await send_message([f'tg² failed to fetch data, retrying in {parse_duration(real_waiting_time)}'])
time.sleep(real_waiting_time)
if waiting_time < waiting_time_limit:
waiting_time *= waiting_time_increase
if __name__ == '__main__':
print('Check environ:', check_env())