summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackson Taylor <jackson@jacksontaylor.xyz>2023-03-22 17:50:26 -0400
committerJackson Taylor <jackson@jacksontaylor.xyz>2023-03-22 17:50:26 -0400
commit928947c962fc1fba84fa3be48f50c767f286f5aa (patch)
tree26d940d554a030a02f389140572b5f42de5afb1c
parentdc027f1e1b1fa52344f3abfc0562fc633cb73d61 (diff)
parenta26ff373d5f875f0fe20935846f98e1bef439c06 (diff)
Merge branch 'master' of git.jacksontaylor.xyz:/srv/git/jamos
-rw-r--r--README.md29
-rwxr-xr-xjamos134
2 files changed, 91 insertions, 72 deletions
diff --git a/README.md b/README.md
index 01347da..3c00cd2 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,33 @@ Personal script to when downloading music with youtube-dl, tagging the files (ar
## Installation
Right now, the easiest thing to do is just use it from this repo.
+## Usage
+Output from using the "--help" option:
+```
+usage: jamos [-h] [-c cookiefile.txt] [-o output_directory] [-r jamos_failed_urls.txt] [https://music.youtube.com/playlist?list=1234]
+
+Download songs from YouTube Music
+
+positional arguments:
+ https://music.youtube.com/playlist?list=1234
+ Playlist or Song URL to download.
+
+optional arguments:
+ -h, --help show this help message and exit
+ -c cookiefile.txt, --cookies cookiefile.txt
+ Cookie file to use.
+ -o output_directory, --output output_directory
+ Output directory to use
+ -r jamos_failed_urls.txt, --retryFile jamos_failed_urls.txt
+ Output directory to use
+
+```
+
+The most common usage (aka tldr) would probably be something like:
+```
+$ jamos "https://music.youtube.com/playlist/1234" -o "/home/jackson/Music"
+```
+
## TODO
- Installation
- Add necessary files to install via pip
@@ -13,4 +40,4 @@ Right now, the easiest thing to do is just use it from this repo.
- Configuration
- Config file in XDG directory
- URL file in XDG directory
- - Command line parameters
+ - [Done] Command line parameters
diff --git a/jamos b/jamos
index 765c17c..cbe8fdd 100755
--- a/jamos
+++ b/jamos
@@ -88,76 +88,6 @@ def get_command_line_options():
return args
-# TODO: switch command line args to argparse
-def get_playlist_url():
- return sys.argv[1]
-
-
-def get_video_urls_in_playlist(playlist_url, ytdl):
- videos = ytdl.extract_info(playlist_url, download=False)
-
- urls = []
- for vid in videos['entries']:
- if 'webpage_url' in vid.keys() and vid['webpage_url'] is not None:
- urls.append(vid['webpage_url'])
-
- return urls
-
-
-def remove_special_characters_for_filename(filename):
- special_chars = [
- ['-', ' '],
- ['(', ''],
- [')', ''],
- ['/', ' '],
- ['/', ' '],
- [' ', '_'],
- ["'", ''],
- ["&", 'and'],
- [chr(8217), ''],
- ['$', 's'],
- ['.', '']
- ]
- new_name = filename
-
- for char_set in special_chars:
- new_name = new_name.replace(char_set[0], char_set[1])
-
- return new_name.lower()
-
-
-def move_file(file, metadata, output_directory):
- artist = remove_special_characters_for_filename(metadata['artist'])
- album = remove_special_characters_for_filename(metadata['album'])
- title = remove_special_characters_for_filename(metadata['title'])
-
- final_directory = os.path.join(
- output_directory,
- artist,
- album)
-
- Path(final_directory).mkdir(parents=True, exist_ok=True)
-
- # TODO: Research converting to mp3 instead of just naming it such.
- # TODO: Research better file formats over mp3?
- os.rename(
- file,
- os.path.join(final_directory, '{}_{}_{}.mp3'.format(artist,
- album,
- title)))
-
-
-def write_metadata_to_song_file(filename, metadata):
- file = music_tag.load_file(filename)
-
- file['name'] = metadata['title']
- file['artist'] = metadata['artist']
- file['album'] = metadata['album']
- file['year'] = metadata['year']
-
- file.save()
-
-
def get_song_metadata_from_json(json, counter):
metadata = {
'title': 'unknownsong',
@@ -213,7 +143,36 @@ def create_downloader(music_directory, cookies):
'quiet': not DEBUG
}
- return youtube_dl.YoutubeDL(audio_options)
+def get_video_urls_in_playlist(playlist_url, ytdl):
+ videos = ytdl.extract_info(playlist_url, download=False)
+
+ urls = []
+ for vid in videos['entries']:
+ if 'webpage_url' in vid.keys() and vid['webpage_url'] is not None:
+ urls.append(vid['webpage_url'])
+
+ return urls
+
+
+def move_file(file, metadata, output_directory):
+ artist = remove_special_characters_for_filename(metadata['artist'])
+ album = remove_special_characters_for_filename(metadata['album'])
+ title = remove_special_characters_for_filename(metadata['title'])
+
+ final_directory = os.path.join(
+ output_directory,
+ artist,
+ album)
+
+ Path(final_directory).mkdir(parents=True, exist_ok=True)
+
+ # TODO: Research converting to mp3 instead of just naming it such.
+ # TODO: Research better file formats over mp3?
+ os.rename(
+ file,
+ os.path.join(final_directory, '{}_{}_{}.mp3'.format(artist,
+ album,
+ title)))
def save_urls_from_playlist_to_file(filename, urls):
@@ -227,6 +186,39 @@ def save_urls_from_playlist_to_file(filename, urls):
raise e
+def remove_special_characters_for_filename(filename):
+ special_chars = [
+ ['-', ' '],
+ ['(', ''],
+ [')', ''],
+ ['/', ' '],
+ ['/', ' '],
+ [' ', '_'],
+ ["'", ''],
+ ["&", 'and'],
+ [chr(8217), ''],
+ ['$', 's'],
+ ['.', '']
+ ]
+ new_name = filename
+
+ for char_set in special_chars:
+ new_name = new_name.replace(char_set[0], char_set[1])
+
+ return new_name.lower()
+
+
+def write_metadata_to_song_file(filename, metadata):
+ file = music_tag.load_file(filename)
+
+ file['name'] = metadata['title']
+ file['artist'] = metadata['artist']
+ file['album'] = metadata['album']
+ file['year'] = metadata['year']
+
+ file.save()
+
+
if __name__ == "__main__":
try:
args = get_command_line_options()