twitch-dl/twitchdl/output.py

111 lines
2.9 KiB
Python
Raw Normal View History

2018-01-25 10:09:20 +00:00
# -*- coding: utf-8 -*-
2020-09-03 06:49:41 +00:00
import json
2018-01-25 10:09:20 +00:00
import sys
import re
2020-04-11 11:08:42 +00:00
from twitchdl import utils
2018-01-25 10:09:20 +00:00
START_CODES = {
2020-05-17 11:35:51 +00:00
'b': '\033[1m',
2020-05-17 12:32:37 +00:00
'dim': '\033[2m',
2019-08-13 10:29:42 +00:00
'i': '\033[3m',
'u': '\033[4m',
'red': '\033[91m',
'green': '\033[92m',
'yellow': '\033[93m',
'blue': '\033[94m',
'magenta': '\033[95m',
'cyan': '\033[96m',
2018-01-25 10:09:20 +00:00
}
END_CODE = '\033[0m'
START_PATTERN = "<(" + "|".join(START_CODES.keys()) + ")>"
END_PATTERN = "</(" + "|".join(START_CODES.keys()) + ")>"
USE_ANSI_COLOR = "--no-color" not in sys.argv
def start_code(match):
name = match.group(1)
return START_CODES[name]
def colorize(text):
text = re.sub(START_PATTERN, start_code, text)
text = re.sub(END_PATTERN, END_CODE, text)
return text
def strip_tags(text):
text = re.sub(START_PATTERN, '', text)
text = re.sub(END_PATTERN, '', text)
return text
def print_out(*args, **kwargs):
args = [colorize(a) if USE_ANSI_COLOR else strip_tags(a) for a in args]
print(*args, **kwargs)
2020-09-03 06:49:41 +00:00
def print_json(data):
print(json.dumps(data))
2018-01-25 10:09:20 +00:00
def print_err(*args, **kwargs):
args = ["<red>{}</red>".format(a) for a in args]
args = [colorize(a) if USE_ANSI_COLOR else strip_tags(a) for a in args]
print(*args, file=sys.stderr, **kwargs)
2020-04-11 11:08:42 +00:00
2021-01-14 20:38:56 +00:00
def print_log(*args, **kwargs):
args = ["<dim>{}</dim>".format(a) for a in args]
args = [colorize(a) if USE_ANSI_COLOR else strip_tags(a) for a in args]
print(*args, file=sys.stderr, **kwargs)
2020-04-11 11:08:42 +00:00
def print_video(video):
published_at = video["publishedAt"].replace("T", " @ ").replace("Z", "")
length = utils.format_duration(video["lengthSeconds"])
2021-01-14 20:38:56 +00:00
channel = video["creator"]["displayName"]
2020-05-29 11:55:54 +00:00
playing = (
2020-09-03 06:49:41 +00:00
"playing <blue>{}</blue>".format(video["game"]["name"])
2020-05-29 11:55:54 +00:00
if video["game"] else ""
)
2020-04-11 11:08:42 +00:00
# Can't find URL in video object, strange
url = "https://www.twitch.tv/videos/{}".format(video["id"])
2021-01-14 20:38:56 +00:00
print_out("<b>Video {}</b>".format(video["id"]))
2020-04-11 11:08:42 +00:00
print_out("<green>{}</green>".format(video["title"]))
2020-05-29 11:55:54 +00:00
print_out("<blue>{}</blue> {}".format(channel, playing))
2020-05-17 11:48:16 +00:00
print_out("Published <blue>{}</blue> Length: <blue>{}</blue> ".format(published_at, length))
print_out("<i>{}</i>".format(url))
2020-09-03 06:49:41 +00:00
def print_clip(clip):
published_at = clip["createdAt"].replace("T", " @ ").replace("Z", "")
length = utils.format_duration(clip["durationSeconds"])
2021-01-14 20:38:56 +00:00
channel = clip["broadcaster"]["displayName"]
2020-11-10 09:44:18 +00:00
playing = (
"playing <blue>{}</blue>".format(clip["game"]["name"])
if clip["game"] else ""
)
2020-09-03 06:49:41 +00:00
2021-01-14 20:38:56 +00:00
print_out("Clip <b>{}</b>".format(clip["slug"]))
2020-09-03 06:49:41 +00:00
print_out("<green>{}</green>".format(clip["title"]))
2020-11-10 09:44:18 +00:00
print_out("<blue>{}</blue> {}".format(channel, playing))
2020-09-03 06:49:41 +00:00
print_out(
"Published <blue>{}</blue>"
" Length: <blue>{}</blue>"
" Views: <blue>{}</blue>".format(published_at, length, clip["viewCount"]))
print_out("<i>{}</i>".format(clip["url"]))
2021-01-14 20:38:56 +00:00
def print_clip_urls(clip):
from pprint import pprint
pprint(clip)