aboutsummaryrefslogtreecommitdiff
path: root/.local/bin/brainmassage
blob: 57796f39b99969659271c6fe9cf5152a131a9bd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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