diff options
Diffstat (limited to '.local/bin/brainmassage')
| -rwxr-xr-x | .local/bin/brainmassage | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/.local/bin/brainmassage b/.local/bin/brainmassage new file mode 100755 index 0000000..57796f3 --- /dev/null +++ b/.local/bin/brainmassage @@ -0,0 +1,54 @@ +#!/bin/sh + +parse_query() { + sed "s/ /+/g" +} + +unquery() { + sed "s/+/ /g" +} + +artist() { + artist_name=$(printf "" | dmenu -p "Search Artist" | parse_query) + json=$(wget -qO- "https://musicbrainz.org/ws/2/release-group/?fmt=json&artist=$(search_artist $artist_name)&type=album|ep" 2>/dev/null) + album_name=$(echo "$json" | jq '."release-groups"[] | .title' | sed 's/"//g' | dmenu -p "Select Album") + album_id=$(echo "$json" | jq ".\"release-groups\"[] | select(.title==\"$album_name\") .id" | sed "s/\"//g") + release_id=$(wget -qO- "https://musicbrainz.org/ws/2/release/?fmt=json&release-group=${album_id}" 2>/dev/null | jq '.releases[0] .id' | sed 's/"//g') + + recording_names=$(wget -qO- "https://musicbrainz.org/ws/2/recording/?fmt=json&release=${release_id}" 2>/dev/null | jq '.recordings[] | .title' | sed 's/"//g') + + recordings_query=$(echo "$recording_names" | parse_query) + + mkdir "$album_name" + cd "$album_name" + + echo "Download $album_name" + + for name in $recordings_query; do + echo "Download $(echo ${name} | unquery)" + download "${artist_name}" "${album_name}" "${name}" & + done + + wait +} + +download() { + artist_name="$1" + album_name="$2" + name="$3" + + query=$(echo "${artist_name} ${album_name} ${name}" | parse_query) + video_url=$(wget -qO- "https://www.youtube.com/results?search_query=${query}" 2>/dev/null | grep -E -o '"/watch\?v=[^"]*"' | sed -e 's/"//g' | sed -e "s/\/watch/https:\/\/www.youtube.com\/watch/g" | head -n1) + youtube-dl -q --extract-audio --audio-format mp3 "${video_url}" -o "${name}.%(ext)s" + mp3info -a "$(echo "$artist_name" | unquery)" -l "$album_name" -t "$(echo $name | sed 's/+/ /g')" "${name}.mp3" + mv "${name}.mp3" "$(echo $name | sed 's/+/ /g').mp3" +} + +search_artist() { + json=$(wget -qO- "https://musicbrainz.org/ws/2/artist/?fmt=json&limit=100&query=$1" 2>/dev/null) + + artist_name=$(echo "$json" | jq ".artists[] | .name" | sed "s/\"//g" | dmenu -p "Select Artist") + echo "$json" | jq ".artists[] | select(.name==\"$artist_name\") .id" | sed "s/\"//g" +} + +artist |