Untitled
unknown
plain_text
2 years ago
4.7 kB
3
Indexable
from time import sleep import requests import telebot import threading sites_timeout = 3 # Максимальное время ожидание от сайта interval_between_requests = 0.5 # Интервал между запросами в секундах error_site_message_format = '<b>Сайт недоступен:</b> <i>{0}</i>' \ '\n<b>Мы сообщим, когда сайт вновь заработает!</b>' # Сообщение, которое увидит пользователь, если сайт недоступен. {0} - название сайта. site_now_work_message_format = '<b>Сайт вновь доступен:</b> <i>{0}</i>' # Сообщение, которое увидит пользователь, когда сайт вновь заработает. files_with_sites_lists = {'URL.txt', 'URL2.txt'} # Список файлов, из которых необходимо читать сайты. map_of_sites_lists = dict() # Словарь списков всех файлов map_of_errors = dict() # Словарь ошибок def load_files(): # Загружаем все файлы for file_name in files_with_sites_lists: # Загружаем все файлы из списка файлов with open(file_name, 'r') as file: map_of_sites_lists[file_name] = file.readlines() map_of_errors[file_name] = list() bot = telebot.TeleBot('5384179843:AAEJa2u-_6RRFIJFHW7FAPncqUcupGit4M0') # Обработчик при вводе команды /start @bot.message_handler(commands=['start', 'run']) def start_command_handler(message): bot.send_message(message.from_user.id, f'<b>Вы запустили проверку!</b>', parse_mode='HTML') start_checking(message) def start_checking(message): for file_name in map_of_sites_lists.keys(): # Проходимся циклом по всем необходимым файлам checking_thread = threading.Thread(target=check_sites, args=(message, file_name,), daemon=True) # Запускаем по процессу на каждый файл checking_thread.start() def check_sites(message, file_name): error_checking_thread = threading.Thread(target=check_errors, args=(message, file_name), daemon=True) error_checking_thread.start() # Запускаем по процессу проверки ошибок на каждый файл while True: for site_name in map_of_sites_lists[file_name]: try: if site_name in map_of_errors[file_name]: # Если сайт уже проверяется потоком ошибок - нет смысла проверять его дважды continue response = requests.get(site_name, timeout=sites_timeout) print(f'{site_name}\t{response.status_code}') if not response.ok: # Если сайт не ответил на запрос raise Exception() except (Exception, ): map_of_errors[file_name].append(site_name) # Вносим сайт в список ошибочных bot.send_message(message.from_user.id, error_site_message_format.format(site_name), parse_mode='HTML') # Сообщаем пользователю, что сайт недоступен sleep(interval_between_requests) def check_errors(message, file_name): while True: now_working_sites_list = list() # Список вновь доступных сайтов for site_name in map_of_errors[file_name]: # Проходимся по всем сайтам, которые были указаны ошибочными try: response = requests.get(site_name, timeout=sites_timeout) print(f'{site_name} {response.status_code}') if response.ok: # Если сайт вновь доступен now_working_sites_list.append(site_name) bot.send_message(message.from_user.id, site_now_work_message_format.format(site_name), parse_mode='HTML') # Сообщаем пользователю о том, что сайт вновь доступен except (Exception, ) as e: #Игнорируем исключения print(e) sleep(interval_between_requests) for site_name in now_working_sites_list: map_of_errors[file_name].remove(site_name) if __name__ == '__main__': load_files() try: bot.polling(none_stop=True) except Exception as e: print(e)
Editor is loading...