#!/bin/sh # Return a stream URL from a Subsonic server #SUBSONIC_SERVER="https://example.com" #SUBSONIC_USER="user" #SUBSONIC_PASSWORD="password" tmp=$(mktemp -p /tmp/) printf "Enter your query\n-> " read -r query curl -sG --data-urlencode "query=$query" \ "$SUBSONIC_SERVER/rest/search3?u=$SUBSONIC_USER&p=$SUBSONIC_PASSWORD&v=1.16.1&c=bash&f=json" | jq -s '[.[] | ."subsonic-response".searchResult3.song[] | {id:.id, title:.title, artist:.artist}] | [limit(5;.[])]' > "$tmp" [ -z "$(cat "$tmp")" ] && printf "\n\e[1;31m[!] \e[107;mNo result\n\n" && rm "$tmp" && exit 1 length=$(( "$(jq '. | length' "$tmp")" - 1)) i=0 printf "\n" while [ "$i" -le "$length" ]; do title=$(jq -s '.[] | .['"$i"'].title' "$tmp" | sed 's/\"//g') artist=$(jq -s '.[] | .['"$i"'].artist' "$tmp" | sed 's/\"//g') printf "\e[1;32m[%s] \e[107;m%s by %s\n" $(("$i"+1)) "$title" "$artist" i=$((i + 1)) done printf "\nSelect track number\n-> " && read -r number number=$(( "$number" - 1 )) title=$(jq -r '.['"$number"'].title' "$tmp") artist=$(jq -r '.['"$number"'].artist' "$tmp") id=$(jq -r '.['$number'].id' "$tmp") url="$SUBSONIC_SERVER/rest/download?u=$SUBSONIC_USER&p=$SUBSONIC_PASSWORD&v=1.16.1&c=curl&f=json&id=$id" printf "%s" "$url" | xclip -sel c printf "Copying the URL for \e[1;32m%s \e[107;mby %s to clipboard.\n" "$title" "$artist" rm "$tmp"