A set of POSIX* shell scripts designed for personal use. No guarantees when it comes to quality, as these are also used for various minor experiments of mine.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.5 KiB

10 months ago
#!/bin/sh -e
search()
{
rm -f /tmp/invidious_results
query_sanitized="$(printf "%s\n" "$1"|sed -ne 's/ /%20/gp')"
curl --output /tmp/invidious_results "https://vid.puffyan.us/search?q=$query_sanitized"
}
extract_names()
{
sed -ne 's/<p dir.*>\(.*\)<\/p>/\1/p' /tmp/invidious_results|sed 's/ *//'
}
extract_urls()
{
for id in $(sed -ne 's/ */ /g' -e 's/<a style=.* href="\(\/watch?v=.*\)">/\1/p' /tmp/invidious_results|sed -ne 's/ *//p')
do
printf "https://vid.puffyan.us%s\n" $id
done
}
watch_vid()
{
curl -v "https://vid.puffyan.us/latest_version?id=$id&itag=$itag" 2>>/dev/stdout|sed -ne 's/< Location: \(.*\)/\1/p'
}
fetch_itag()
{
curl --silent $1|sed -ne 's/.*"itag":"\([0-9][0-9]*\)".*/\1/p'
}
fetch_id()
{
curl --silent $(extract_urls|sed $chosen_video!d)|grep itag|sed -ne 's/.*"id":"\(.*\)","itag":.*/\1/p'|sed 1!d
}
generate_locations()
{
for itag in $(fetch_itag $(extract_urls|sed $chosen_video!d)|sed $chosen_video!d)
do
watch_vid
done
}
main()
{
printf "Enter your search terms: "
read -r query
search "$query"
extract_names|nl
printf "Choose the desired media: "
read -r chosen_video
printf "Attempting to retrieve primary source for: "
printf "\"%s\"" "$(extract_names|sed $chosen_video!d)"
printf "...\nPlease wait.\n\n"
itag=$(echo $(fetch_itag $(extract_urls|sed $chosen_video!d))|cut -f$chosen_video -d' ')
id=$(fetch_id)
media="$(generate_locations|sed 1!d)"
printf "Loading %s...\n" "$media"
ffplay "$media"
}
main