diff --git a/daemon.py b/daemon.py index f405ec0..b8d5d07 100644 --- a/daemon.py +++ b/daemon.py @@ -1,13 +1,11 @@ #!/usr/bin/python3 # TODO: Перезапускать скрипт при обнаружении новой версии -# TODO: Сделать нормальную конфигурацию import os import sys from threading import Thread -from types import resolve_bases -import config_python +import configparser import schedule from twitchAPI.twitch import Twitch import subprocess @@ -16,12 +14,31 @@ import logging from logging.handlers import TimedRotatingFileHandler from termcolor import colored -streamers = config_python.streamers -app_id = config_python.appid -app_secret = config_python.appsecret - log_format = logging.Formatter('%(asctime)s %(levelname)s:%(message)s') log_file = 'output.log' +cfg_file = 'config.ini' + + +def set_config(): + """ + Эта функция либо читает существующий конфиг, либо создает новый. + Возвращает объект конфига (configparser.ConfigParser()) + """ + config = configparser.ConfigParser() + if not config.read('cfg_file.ini'): + config["app"] = { + "path": "", + "check_period": 5, + "max_files": 3 + } + config["twitch"] = { + "app_id": "", + "app_secret": "", + "streamers": ("asdf", "qqqqq") + } + with open('cfg_file.ini', 'w') as cfg_file: + config.write(cfg_file) + return config def which(command): @@ -54,7 +71,7 @@ def startRecord(i): """ Функция, которая запускает в отдельном потоке запись стрима - recorder(i) """ - th = Thread(target=recorder, args=(i, )) + th = Thread(target=recorder, args=(i,)) th.start() @@ -62,16 +79,16 @@ def recorder(i): """ Функция, которая запускает youtube-dl, фактически записывает стрим """ - path = config_python.path + "/" + i + path = config['app']['path'] + "/" + i log.info("Записываем стрим %s\n" % i) # cmdline для запуска youtube-dl cmdline = ["youtube-dl", "-q", "-o", - path+"/%(upload_date)s_%(title)s__%(timestamp)s_%(id)s.%(ext)s", + path + "/%(upload_date)s_%(title)s__%(timestamp)s_%(id)s.%(ext)s", "https://twitch.tv/" + i] subprocess.call(cmdline) log.info("Запись стрима %s закончена\n" % i) if os.path.exists(path + "/pid"): - os.remove(path+"/pid") + os.remove(path + "/pid") log.info("lock файл удален") @@ -82,9 +99,9 @@ def checkAlive(): 1.1 Если нет - удалить lock файл, если он есть 1.2 Если есть - создать lock файл, запустить записывалку """ - for i in streamers: + for i in config['twitch']['streamers']: # Путь до диры со стримами - path = config_python.path + "/" + i + path = config['app']['path'] + "/" + i # Получаем инфо о стримере, если не получается, выходим с ошибкой # resolved_id = client.users.translate_usernames_to_ids(i) @@ -107,10 +124,11 @@ def checkAlive(): # Если стрим идет, то идем дальше if user_stream['data']: # Если стрим идет и лок файла нет, то записываем и ставим лок - if (user_stream['data'][0]['type'] == 'live') and not (os.path.exists(config_python.path+"/"+i+"/pid")): + if (user_stream['data'][0]['type'] == 'live') and not ( + os.path.exists(config['app']['path'] + "/" + i + "/pid")): log.info(i + " стримит") startRecord(i) - open(path+"/pid", 'w').close + open(config['app']['path'] + "/pid", 'w').close else: log.info( colored( @@ -124,22 +142,22 @@ def checkAlive(): log.info(i + " Не стримит") # Если есть лок, то удаляем if os.path.exists(path + "/pid"): - os.remove(path+"/pid") + os.remove(path + "/pid") def removeOldStreams(): # https://clck.ru/WHh32 - records_path = config_python.path + records_path = config['app']['path'] # По каждой папке со стримерами - for i in streamers: + for i in config['twitch']['streamers']: try: - os.chdir(records_path+"/"+i) + os.chdir(records_path + "/" + i) # Если файлов в папке со стримами больше чем указано в конфиге - if len(os.listdir(records_path+"/"+i)) > config_python.max_files: + if len(os.listdir(records_path + "/" + i)) > int(config['app']['max_files']): # Получаем список файлов # и смотрим, превышает ли кол-во mp4 файлов заданное в конфиге # Если превышает - удаляем старейший - oldest = min(os.listdir(records_path+"/"+i), + oldest = min(os.listdir(records_path + "/" + i), key=os.path.getctime) os.unlink(oldest) log.warning("Удален файл: " + oldest) @@ -173,16 +191,19 @@ if __name__ == "__main__": if not checkTools(): exit() + # Set config + config = set_config() + # Log config log = get_logger("main") log.info("Запущен") # Проверять стримы раз в check_period - schedule.every(config_python.check_period).seconds.do(checkAlive) + schedule.every(int(config['app']['check_period'])).seconds.do(checkAlive) # Каждый час удалять старые стримы schedule.every(1).hours.do(removeOldStreams) - twitch_client = Twitch(app_id, app_secret) + twitch_client = Twitch(config['twitch']['app_id'], config['twitch']['app_secret']) while True: schedule.run_pending() time.sleep(1)