File size: 4,900 Bytes
076bd51 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | import argparse
import re
from utils.custom_exceptions import ArgsParseError
from utils.enums import Mode, Regex
def parse_args():
"""
Parse command line arguments.
"""
parser = argparse.ArgumentParser(
description="TikTok Live Recorder - A tool for recording live TikTok sessions.",
formatter_class=argparse.RawTextHelpFormatter,
)
parser.add_argument(
"-url",
dest="url",
help="Record a live session from the TikTok URL.",
action="store",
)
parser.add_argument(
"-user",
dest="user",
help="Record a live session from the TikTok username.",
action="store",
)
parser.add_argument(
"-room_id",
dest="room_id",
help="Record a live session from the TikTok room ID.",
action="store",
)
parser.add_argument(
"-mode",
dest="mode",
help=(
"Recording mode: (manual, automatic, followers) [Default: manual]\n"
"[manual] => Manual live recording.\n"
"[automatic] => Automatic live recording when the user is live.\n"
"[followers] => Automatic live recording of followed users."
),
default="manual",
action="store",
)
parser.add_argument(
"-automatic_interval",
dest="automatic_interval",
help="Sets the interval in minutes to check if the user is live in automatic mode. [Default: 5]",
type=int,
default=5,
action="store",
)
parser.add_argument(
"-proxy",
dest="proxy",
help=(
"Use HTTP proxy to bypass login restrictions in some countries.\n"
"Example: -proxy http://127.0.0.1:8080"
),
action="store",
)
parser.add_argument(
"-output",
dest="output",
help=("Specify the output directory where recordings will be saved.\n"),
action="store",
)
parser.add_argument(
"-duration",
dest="duration",
help="Specify the duration in seconds to record the live session [Default: None].",
type=int,
default=None,
action="store",
)
parser.add_argument(
"-telegram",
dest="telegram",
action="store_true",
help="Activate the option to upload the video to Telegram at the end "
"of the recording.\nRequires configuring the telegram.json file",
)
parser.add_argument(
"-no-update-check",
dest="update_check",
action="store_false",
help=(
"Disable the check for updates before running the program. "
"By default, update checking is enabled."
),
)
args = parser.parse_args()
return args
def validate_and_parse_args():
args = parse_args()
if not args.mode:
raise ArgsParseError(
"Missing mode value. Please specify the mode (manual, automatic or followers)."
)
if args.mode not in ["manual", "automatic", "followers"]:
raise ArgsParseError(
"Incorrect mode value. Choose between 'manual', 'automatic' or 'followers'."
)
if args.mode in ["manual", "automatic"]:
if not args.user and not args.room_id and not args.url:
raise ArgsParseError(
"Missing URL, username, or room ID. Please provide one of these parameters."
)
if args.user:
args.user = [u.lstrip("@").strip() for u in args.user.split(",") if u.strip()]
if args.user and len(args.user) > 1 and (args.room_id or args.url):
raise ArgsParseError(
"When using multiple usernames, do not provide room_id or url."
)
if args.url and not re.match(str(Regex.IS_TIKTOK_LIVE), args.url):
raise ArgsParseError(
"The provided URL does not appear to be a valid TikTok live URL."
)
if (
(args.user and args.room_id)
or (args.user and args.url)
or (args.room_id and args.url)
):
raise ArgsParseError("Please provide only one among username, room ID, or URL.")
# Edit: now arg.user is a list
if args.user and len(args.user) == 1:
args.user = args.user[0]
if (
(isinstance(args.user, str) and args.user and args.room_id)
or (isinstance(args.user, str) and args.user and args.url)
or (args.room_id and args.url)
):
raise ArgsParseError("Please provide only one among username, room ID, or URL.")
if args.automatic_interval < 1:
raise ArgsParseError(
"Incorrect automatic_interval value. Must be one minute or more."
)
if args.mode == "manual":
mode = Mode.MANUAL
elif args.mode == "automatic":
mode = Mode.AUTOMATIC
elif args.mode == "followers":
mode = Mode.FOLLOWERS
return args, mode
|