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.

65 lines
1.6 KiB

10 months ago
#!/bin/sh -e
search()
{
rm -f /tmp/invidious_results
query_sanitized="$(printf "%s\n" "$1"|sed -e 's/ */%20/g')"
10 months ago
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()
{
# 22 seems to be the itag associated with audio+video MP4s at 720p...
curl --silent $1|sed -ne 's/.*"itag":"\([0-9][0-9]*\)".*/\1/p' #|grep 22
10 months ago
}
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 22 #$(fetch_itag $(extract_urls|sed $chosen_video!d)|sed $chosen_video!d)
10 months ago
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 -autoexit "$media"
10 months ago
}
main