Архив готового проекта:
Вам предстоит написать Телеграм-бота, который будет:
- обращаться к API сервиса Практикум.Домашка;
- узнавать, взята ли ваша домашка в ревью, проверена ли она, провалена или принята;
- отправлять результат в ваш Телеграм-чат.
Проект
Ваш бот должен регулярно опрашивать API домашки и при получении обновлений парсить ответ и отправлять сообщение в ваш аккаунт Телеграм.
Механизм polling’а вам предстоит реализовать самостоятельно.
Бот должен логировать момент своего запуска (уровень DEBUG) и каждую отправку сообщения (уровень INFO). Сообщения уровня ERROR бот должен логировать и (дополнительно) отправлять вам в Телеграм.
Свой handler для логов писать не нужно, примените обработчики FileHandler и StreamHandler.
Подсказки, отладка
Параметр from_date
передайте обычным параметром GET-запросом. Чтобы получить статусы домашек за всё время, параметр from_date
должен быть равен нулю.
Для отладки можно использовать какое-нибудь фиксированное время, скажем «месяц назад», чтобы в ответ прилетала какая-нибудь старая домашка.
Прекод
import os
import time
import requests
import telegram
from dotenv import load_dotenv
load_dotenv()
PRAKTIKUM_TOKEN = os.getenv('PRAKTIKUM_TOKEN')
TELEGRAM_TOKEN = os.getenv('TELEGRAM_TOKEN')
CHAT_ID = os.getenv('TELEGRAM_CHAT_ID')
def parse_homework_status(homework):
homework_name = ...
if ...
verdict = 'К сожалению, в работе нашлись ошибки.'
else:
verdict = 'Ревьюеру всё понравилось, работа зачтена!'
return f'У вас проверили работу "{homework_name}"!\n\n{verdict}'
def get_homeworks(current_timestamp):
homework_statuses = ...
return homework_statuses.json()
def send_message(message):
return bot.send_message(...)
def main():
current_timestamp = int(time.time()) # Начальное значение timestamp
while True:
try:
...
time.sleep(5 * 60) # Опрашивать раз в пять минут
except Exception as e:
print(f'Бот упал с ошибкой: {e}')
time.sleep(5)
if __name__ == '__main__':
main()