mirror of
https://github.com/ihabunek/twitch-dl
synced 2024-08-30 18:32:25 +00:00
73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
import os
|
|
from typing import Dict
|
|
|
|
from twitchdl import utils
|
|
from twitchdl.entities import Clip, Video
|
|
from twitchdl.exceptions import ConsoleError
|
|
|
|
DEFAULT_OUTPUT_TEMPLATE = "{date}_{id}_{channel_login}_{title_slug}.{format}"
|
|
|
|
|
|
def video_filename(video: Video, format: str, output: str) -> str:
|
|
subs = video_placeholders(video, format)
|
|
return _format(output, subs)
|
|
|
|
|
|
def video_placeholders(video: Video, format: str) -> Dict[str, str]:
|
|
date, time = video["publishedAt"].split("T")
|
|
game = video["game"]["name"] if video["game"] else "Unknown"
|
|
|
|
return {
|
|
"channel": video["creator"]["displayName"],
|
|
"channel_login": video["creator"]["login"],
|
|
"date": date,
|
|
"datetime": video["publishedAt"],
|
|
"format": format,
|
|
"game": game,
|
|
"game_slug": utils.slugify(game),
|
|
"id": video["id"],
|
|
"time": time,
|
|
"title": utils.titlify(video["title"]),
|
|
"title_slug": utils.slugify(video["title"]),
|
|
}
|
|
|
|
|
|
def clip_filename(clip: Clip, output: str):
|
|
subs = clip_placeholders(clip)
|
|
return _format(output, subs)
|
|
|
|
|
|
def clip_placeholders(clip: Clip) -> Dict[str, str]:
|
|
date, time = clip["createdAt"].split("T")
|
|
game = clip["game"]["name"] if clip["game"] else "Unknown"
|
|
|
|
if clip["videoQualities"]:
|
|
url = clip["videoQualities"][0]["sourceURL"]
|
|
_, ext = os.path.splitext(url)
|
|
ext = ext.lstrip(".")
|
|
else:
|
|
ext = "mp4"
|
|
|
|
return {
|
|
"channel": clip["broadcaster"]["displayName"],
|
|
"channel_login": clip["broadcaster"]["login"],
|
|
"date": date,
|
|
"datetime": clip["createdAt"],
|
|
"format": ext,
|
|
"game": game,
|
|
"game_slug": utils.slugify(game),
|
|
"id": clip["id"],
|
|
"slug": clip["slug"],
|
|
"time": time,
|
|
"title": utils.titlify(clip["title"]),
|
|
"title_slug": utils.slugify(clip["title"]),
|
|
}
|
|
|
|
|
|
def _format(output: str, subs: Dict[str, str]) -> str:
|
|
try:
|
|
return output.format(**subs)
|
|
except KeyError as e:
|
|
supported = ", ".join(subs.keys())
|
|
raise ConsoleError(f"Invalid key {e} used in --output. Supported keys are: {supported}")
|