def parse_status(homework):
"""Извлекает статус конкретной домашней работы."""
if 'homework_name' not in homework:
message = 'В ответе API отсутствует ключ "homework_name"'
logger.error(message)
send_message(telegram.Bot(token=TELEGRAM_TOKEN), message)
raise KeyError(message)
else:
homework_name = homework['homework_name']
status = homework['status']
if status in HOMEWORK_VERDICTS:
try:
verdict = HOMEWORK_VERDICTS[status]
except KeyError as error:
message = f'Не получено значение verdict {str(error)}'
logger.error(message)
send_message(telegram.Bot(token=TELEGRAM_TOKEN), message)
else:
return (
f'Изменился статус проверки работы '
f'"{homework_name}". {verdict}'
)
else:
message = f'Неожиданный статус домашней работы: {status}'
logger.error(message)
send_message(telegram.Bot(token=TELEGRAM_TOKEN), message)
raise ValueError(message)
def main():
"""Основная логика работы бота."""
global last_check
if not check_tokens():
exit()
bot = telegram.Bot(token=TELEGRAM_TOKEN)
timestamp = int(time.time())
last_check = {}
while True:
try:
response = get_api_answer(timestamp)
homework = check_response(response)
if len(last_check) == 0:
last_check = homework
if len(homework) > 0 and len(last_check) > 0:
if homework[0]['status'] != last_check[0]['status']:
send_message(bot, parse_status(homework[0]))
last_check = homework
else:
message = 'Статус проверки работы не изменился'
send_message(bot, message)
except Exception as error:
message = f'Сбой в работе программы: {str(error)}'
logger.error(message)
send_message(bot, message)
finally:
time.sleep(RETRY_PERIOD)