Compare commits

...

3 Commits

Author SHA1 Message Date
d519900ba8 What is this path issue? 2024-04-05 20:49:48 -04:00
a0ae115748 Fixed f-string 2024-04-05 17:02:58 -04:00
5ee8e47c54 Attempt to switch from dl-stream to streamlink 2024-04-05 16:55:42 -04:00
2 changed files with 39 additions and 14 deletions

View File

@ -1,8 +1,13 @@
# Auto TTV Grabber # Auto TTV Grabber
<!--toc:start-->
- [Auto TTV Grabber](#auto-ttv-grabber)
- [Getting started](#getting-started)
<!--toc:end-->
## Getting started ## Getting started
This script relies on [dl-stream](https://codeberg.org/bashuser30/dl-stream) being in your systems path. This script relies on [streamlink](https://streamlink.github.io) being in your systems path.
You can find all of its requirements on the their project page. You can find all of its requirements on the their project page.
This script loops through all of the channels in `channel_list.txt` once per minute checking to see if the channel is live via a HTTP request. This script loops through all of the channels in `channel_list.txt` once per minute checking to see if the channel is live via a HTTP request.
Once a channel is live a [dl-stream](https://codeberg.org/bashuser30/dl-stream) subprocess spawns in the background downloading the stream to it's default location (`$HOME/Videos/dl-stream/<channel_name>`) Once a channel is live a [streamlink](https://streamlink.github.io) subprocess spawns in the background downloading the stream to it's default location (`$HOME/Videos/Stream/<channel_name>`)

42
main.py
View File

@ -16,7 +16,7 @@ downloading = {}
# Default Config Settings # Default Config Settings
config = configparser.ConfigParser() config = configparser.ConfigParser()
streamlink_location = "streamlink" streamlink_location = "streamlink"
download_location = str(f"{Path.home()}/Downloads/Streams/") download_location = f"{Path.home()}/Downloads/Streams"
skip_ads = False skip_ads = False
@ -54,22 +54,41 @@ def write_log(channel):
def download_stream(channel): def download_stream(channel):
"""Downloads a given channel name in its own subprocess""" """Downloads a given channel name in its own subprocess"""
addtional_parms = ""
if skip_ads:
addtional_parms = "--twitch-proxy-playlist=https://lb-eu.cdn-perfprod.com,https://lb-eu2.cdn-perfprod.com,https://lb-na.cdn-perfprod.com,https://lb-as.cdn-perfprod.com,https://as.luminous.dev --twitch-disable-ads"
file_name = f"{channel}_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.ts"
# cmd = [
# f"{streamlink_location}",
# "--loglevel none",
# "--retry-max 10",
# f"{addtional_parms}",
# f"-o {download_location}/{channel}/{file_name}",
# f"twitch.tv/{channel}",
# "best",
# ]
# print(cmd)
downloading[channel] = subprocess.Popen( downloading[channel] = subprocess.Popen(
["dl-stream", "-r", channel], [
start_new_session=True, f"{streamlink_location}",
stdout=subprocess.PIPE, "--loglevel none",
stderr=subprocess.STDOUT, "--retry-max 10",
f"{addtional_parms}",
f"-o {download_location}/{channel}/{file_name}",
"twitch.tv/ActionButton",
"best",
]
) )
write_log(channel) # write_log(channel)
def check_system(): def check_system():
"""Makes sure everything is place for the script to run""" """Makes sure everything is place for the script to run"""
# TODO: Make it fallback to streamlink if dl-stream not present # Checks if streamlink is in the systems path
# Checks if dl-stream is in the systems path if not shutil.which("streamlink"):
if not shutil.which("dl-stream"): sys.exit("ERROR: streamlink is not found in the systems path!")
sys.exit("ERROR: dl-stream is not found in the systems path!")
# TODO: Combine the channel_list into the config
# Checks if the channel_list exists and if not makes one # Checks if the channel_list exists and if not makes one
if not os.path.exists("channel_list.txt"): if not os.path.exists("channel_list.txt"):
print("ERROR:'channel_list.txt' does not exist, creating now!") print("ERROR:'channel_list.txt' does not exist, creating now!")
@ -110,6 +129,7 @@ def main():
print("\n------------------------------------") print("\n------------------------------------")
for channel in channel_list: for channel in channel_list:
channel = channel.strip() channel = channel.strip()
# TODO: Have steamlink itself check if the channel is live
contents = requests.get("https://www.twitch.tv/" + channel).content.decode( contents = requests.get("https://www.twitch.tv/" + channel).content.decode(
"utf-8" "utf-8"
) )
@ -118,7 +138,7 @@ def main():
if channel not in downloading: if channel not in downloading:
download_stream(channel) download_stream(channel)
else: else:
print("f{channel} is already downloading") print(f"{channel} is already downloading")
write_log(channel) write_log(channel)
else: else:
print("\033[1m" + channel + "\033[0m is \033[31mnot live\033[0m.") print("\033[1m" + channel + "\033[0m is \033[31mnot live\033[0m.")