diff --git a/bin/invidious.sh b/bin/invidious.sh index c62b0ff..3b89f0a 100644 --- a/bin/invidious.sh +++ b/bin/invidious.sh @@ -38,6 +38,41 @@ known_site() -e "^https://yewtu\.be/" } +get_id_path() +{ + printf "%s\n" "${1##*/}" +} + +get_id_query() +{ + oldIFS=$IFS + IFS="&" + set -- ${1##*"?"} + IFS=$oldIFS + + id= + for param; do + case $param in + v=*) id=${param#v=} + break + ;; + esac + done + + printf "%s\n" "$id" +} + +get_id() +{ + case $1 in + "https://youtu.be/" | *"/embed/"*) + get_id_path "$1" + ;; + *) get_id_query "$1" + ;; + esac +} + : ${INVIDIOUS:=invidious.snopyta.org} torsocks=torsocks @@ -55,21 +90,8 @@ shift $((OPTIND - 1)) url=$1 known_site "$url" || err "Unknown site: $url" -oldIFS=$IFS -IFS="&" -set -- ${url##*"?"} -IFS=$oldIFS - -id= -for param; do - case $param in - v=*) id=${param#v=} - [ ${#id} -eq 11 ] || err "invalid video ID" - ;; - esac -done - -[ -n "$id" ] || err "no video ID in URL" +id=$(get_id "$url") +[ ${#id} -eq 11 ] || err "invalid video ID" # XXX choose in some clever way itag=$(torsocks ftp -MVo - "$(api "/api/v1/videos/$id")" |