Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import requests
- import telegram
- import time
- from datetime import datetime
- from dotenv import load_dotenv
- load_dotenv()
- PRACTICUM_TOKEN = os.getenv("PRACTICUM_TOKEN")
- TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
- CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")
- def parse_homework_status(homework):
- homework_name = homework.get("homework_name")
- status = homework.get("status")
- if homework_name is None or status is None:
- return "Ошибка распарсивания ответа от Практикума"
- if status != "approved":
- verdict = "К сожалению в работе нашлись ошибки."
- else:
- verdict = ("Ревьюеру всё понравилось, можно"
- " приступать к следующему уроку.")
- return f'У вас проверили работу "{homework_name}"!\n\n{verdict}'
- def get_homework_statuses(current_timestamp):
- url = "https://praktikum.yandex.ru/api/user_api/homework_statuses/"
- headers = {"Authorization": f"OAuth {PRACTICUM_TOKEN}"}
- params = {
- "from_date": current_timestamp
- }
- try:
- homework_statuses = requests.get(
- url=url,
- params=params,
- headers=headers
- )
- except requests.exceptions.RequestException as e:
- send_message(f"Бот упал с ошибкой (получение статусов): {e}")
- return homework_statuses.json()
- def send_message(message):
- bot = telegram.Bot(TELEGRAM_TOKEN)
- return bot.send_message(CHAT_ID, message)
- def friendly_date(timestamp):
- return datetime.fromtimestamp(
- timestamp
- ).strftime('%Y-%m-%d %H:%M:%S')
- def main():
- send_message("Program is started successfully")
- # по умолчанию проверям с начала дня,
- # чтобы поймать случайно пропущенные статусы
- # повторно в выдаче их уже не будет (период другой)
- today = str(datetime.today().date())
- current_timestamp = int(datetime.strptime(today, "%Y-%m-%d").timestamp())
- # эта версия была в прекоде
- # current_timestamp = int(time.time())
- while True:
- try:
- new_homework = get_homework_statuses(current_timestamp)
- # .get проверит тут, что API вернул нужный ответ
- if new_homework.get("homeworks"):
- send_message(
- parse_homework_status(new_homework.get("homeworks")[0])
- )
- period_start = friendly_date(current_timestamp)
- # проверим, корректный ли ответ сервера по дате
- if new_homework.get("current_date") is not None:
- current_timestamp = new_homework.get("current_date")
- # если некорректный, не будем обновлять переменную
- period_end = friendly_date(current_timestamp)
- print(f"Checked from {period_start} to {period_end}")
- time.sleep(1200) # опрашивать раз в 20 минут
- except Exception as e:
- send_message(f"Бот упал с ошибкой: {e}")
- time.sleep(3)
- continue
- if __name__ == "__main__":
- main()
Add Comment
Please, Sign In to add comment