-from .__init__ import *
import sys
-from .classmodule import MyClass
-from .funcmodule import check_playlist, links_work, download_audio
+from .funcmodule import check_playlist, links_work, get_audio_streams, download_audio_streams, \
+ get_metadata
+
+
def main():
args = sys.argv[1:]
+ modes = ["-d", "-a", "-v", "-av"]
links = []
mode = "-d"
for arg in args:
- print('passed argument :: {}'.format(arg))
if arg in modes:
mode = arg
if "youtube.com" in arg:
links.extend(arg.split(" "))
-
-
+
assert len(links) > 0, "Should pass at least one link as arg"
assert mode in modes, f"Mode should be one of {modes}"
links = check_playlist(links)
assert len(links) > 0, "Should be at least one song in playlist"
-
- #assert links_work(links), "Links don't work :("
-
+
+ assert links_work(links), "Links don't work :("
+
+ streams = get_audio_streams(links)
+ assert len(streams) > 0, "was not able to get audio streams"
+
+ metadata = get_metadata(links)
+ assert len(metadata) == len(streams), "make sure metadata for every stream"
+
if arg == "-d":
pass
elif arg == "-a":
- download_audio(links)
+ download_audio_streams(streams, metadata)
elif arg == "-v":
pass
elif arg == "-av":
if __name__ == '__main__':
main()
-
-
import subprocess
import os
+
def check_playlist(links):
for link in links:
if "playlist" in link:
"artist": yt.author,
"thumbnail_url": yt.thumbnail_url,
"publish_date": yt.publish_date,
- "rating": yt.rating,
"views": yt.views
}
)
return metadata
+def big_num_format(num): # https://stackoverflow.com/a/579376
+ magnitude = 0
+ while abs(num) >= 1000:
+ magnitude += 1
+ num /= 1000.0
+ return '%.1f%s' % (num, ['', 'K', 'M', 'B'][magnitude])
+
+
def download_audio_streams(audio_streams, metadata):
for audio_stream, md in zip(audio_streams, metadata):
audio_stream.download()
'-metadata', f'title={audio_stream.title}',
'-metadata', f'artist={md["artist"]}',
'-metadata', f'date={md["publish_date"]}',
+ '-metadata', f'comment={big_num_format(md["views"]) + " views"}',
"downloads/" + audio_stream.title + ".mp4",
'-y'
]
subprocess.run(command)
os.remove("thumbnail.jpg")
os.remove(audio_stream.default_filename)
-
-