73 lines
2.1 KiB
Python
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))
|