musik/musik/list.py

73 lines
2.1 KiB
Python

import logging
import random
import sys
from datetime import datetime
from urllib.parse import parse_qs, urlparse
logger = logging.getLogger("musik.list")
def bl_path(bl, user):
return bl.joinpath(user).with_suffix(".txt")
def parse_musik(raw):
if "youtube.com" in raw:
return parse_qs(urlparse(raw).query).get("v", [None])[0]
elif "youtu.be" in raw:
return urlparse(raw).path[1:]
return raw
def generate_list(args):
musik_list = []
user_list = []
for q in args.lists.iterdir():
_u = q.stem
logger.info(f"Musiques de {_u}")
if (not args.no_blacklist) and bl_path(args.blacklists, _u).exists():
logger.debug("Blacklist")
with bl_path(args.blacklists, _u).open("r") as blf:
blacklist = blf.read().splitlines()
else:
blacklist = []
logger.debug("Lecture de la liste")
with q.open() as f:
_raw_musiks = [parse_musik(_musik) for _musik in f.read().splitlines()]
_musiks = list(set(filter(lambda _m: _m not in blacklist, _raw_musiks)))
if len(_musiks) < args.number:
logger.error(
f"{_u} a {len(_musiks)} musique(s) non black-listée(s) "
f"au lieu de {args.number}"
)
sys.exit()
logger.debug("Ajout des musiques à la liste")
musik_list += random.sample(_musiks, args.number)
user_list += [_u] * args.number
# Shuffle musics
logger.info("Classement aléatoire des musiques")
user_musik_list = list(zip(user_list, musik_list))
random.shuffle(user_musik_list)
return user_musik_list
def write_blacklist(musik_list, args):
for user, musik in musik_list:
with bl_path(args.blacklists, user).open("a") as f:
f.write("\n")
f.write(musik)
def write_results(musik_list, args):
with args.results.joinpath(datetime.now().strftime("%Y%m%d %H%M%S")).with_suffix(
".txt"
).open("a") as f:
f.write(f"Résultats {datetime.now()}\n\n")
f.write("\n".join("\t".join(um) for um in musik_list))