utility/subsonic-stream

43 行
1.3 KiB
Bash
実行ファイル

#!/bin/sh
# Return a stream URL from a Subsonic server
#SUBSONIC_SERVER="https://example.lol"
#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/stream?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"