diff options
author | mono-b <monoblanco@DRAINERDOMAIN.localdomain> | 2022-12-18 23:00:24 -0300 |
---|---|---|
committer | mono-b <monoblanco@DRAINERDOMAIN.localdomain> | 2022-12-18 23:00:24 -0300 |
commit | 0a043dbb7259cc59ac56b31573469f445a7921ed (patch) | |
tree | 28e87b1b7bbc035fbc467d5a7fc63204960dc247 /ymao.sh |
up
Diffstat (limited to 'ymao.sh')
-rwxr-xr-x | ymao.sh | 73 |
1 files changed, 73 insertions, 0 deletions
@@ -0,0 +1,73 @@ +#!/bin/bash + +# deps: "yt-dlp" "curl" "awk" "sed" + +# Vars +music_dir="$MUSIC_DIR" + +# Functions +main() { + read -p "Artist: " artist + read -p "Album: " album + final_dir="$music_dir"/"$artist"/"$album" + artist_query=$(sed 's/[[:punct:]]//g;s/ /+/g' <<< "$artist") + album_query=$(sed 's/[[:punct:]]//g;s/ /+/g' <<< "$album") + mkdir "$final_dir"/ 2> /dev/null + [[ ! -z $i_option ]] && read -p "Playlist's ID: " playlist || search_playlist + yt-dlp -x --audio-format mp3 --add-metadata -o "$final_dir/%(title)s.%(ext)s" --yes-playlist "https://yewtu.be"/"$playlist" + [[ ! -z $t_option ]] && get_album_art + [[ ! -z $c_option ]] && convert_ogg +} + +search_playlist() { + invidious_url="https://yewtu.be/search?q=$artist_query+$album_query+album&page=1&date=none&type=playlist&duration=none&sort=relevance" + lastfm_url="https://www.last.fm/music/$artist_query/$album_query" + album_len=$(curl -s "$lastfm_url" | grep -Eo ' [0-9]+ tracks' | awk 'NR==1{print $1 " songs"}') + playlist=$(curl -s "$invidious_url" | grep -Eoi "playlist\?list=.+[a-zA-Z0-9]|[0-9]+ videos" | + sed 's/ videos$/ songs/g' | paste - -s -d'\t\n' | grep -E "${album_len}" | awk 'NR==1 {print $1}') +} + +get_album_art() { + album_cover_url="https://itunes.apple.com/search?term=$artist_query+$album_query&media=music&entity=musicTrack" + curl -o "$final_dir"/AlbumArt.jpg "$(curl -s "$album_cover_url" | grep -o -m1 'https://is.*x30bb.jpg' | sed 's/30x30bb.jpg/600x600bb.jpg/')" +} + +convert_ogg() { + for file in "$final_dir"/*.mp3 + do + OUTPUT=${file%.mp3} + echo "$OUTPUT" + ffmpeg -i "$file" "$OUTPUT.ogg" + done + rm -f "$final_dir"/*.mp3 +} + +check_deps() { + for dep + do + if ! command -v "$dep" >/dev/null ; then + exit_on_error "\"$dep\" is not installed.\n" + fi + done +} + +exit_on_error () { + printf "$*" >&2 + exit 1 +} + +# Options +while getopts ':cti' opt; do + case $opt in + c) c_option=1 ;; + t) t_option=1 ;; + i) i_option=1 ;; + \?) echo "Invalid option: -$OPTARG." >&2 ; exit 1 ;; + esac +done +shift $((OPTIND-1)) + +# Check dependencies and start +check_deps "yt-dlp" "curl" "awk" "sed" + +main |