From 00821b83abf2349ccb510d528e25fee5632085c0 Mon Sep 17 00:00:00 2001 From: dtb Date: Thu, 3 Nov 2022 20:02:49 -0400 Subject: [PATCH] a lot --- rss/youtube | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 76 insertions(+), 4 deletions(-) diff --git a/rss/youtube b/rss/youtube index db7075b..2e0e23b 100755 --- a/rss/youtube +++ b/rss/youtube @@ -2,6 +2,8 @@ set -e +argv0="$0" + id(){ youtube-dl --skip-download --print-json --playlist-items 1 "$1" \ | jq '.channel_id' \ @@ -9,15 +11,85 @@ id(){ } feedurl(){ - printf "https://www.youtube.com/feeds/videos.xml?channel_id=%b" "$1" + printf "https://www.youtube.com/feeds/videos.xml?channel_id=%b\n" "$1" +} + +list_channels(){ + for file in "$(pig_pen)"/* + do printf "%s\t%s\n" "$(xq '.feed.title' <"$file")" "$file" + done +} + +usage(){ + printf "\ +Usage: %s + list_channels + list_videos [channel name] + listen [video URL] + refresh (channel name...) + subscribe [channel URL] + watch [video URL] +" "$argv0" 1>&2 } case "$1" in -subscribe) - pig_stow "$(feedurl "$(id "$2")")" +list_channels) + ! str isvalue "$2" \ + || usage + list_channels | sort + ;; +list_videos) # do something with youtube-dl? + str isvalue "$2" \ + || usage + list_channels \ + | grep "$2" \ + | cut -f 2 \ + | xargs xq \ + 'reduce .feed.entry[] as $item ( + {}; + . + { ($item.link."@href"): $item.title } + )' + ;; +listen) + str isvalue "$2" \ + || usage + while str isvalue "$2" + do youtube-dl "$2" -f bestaudio -o - \ + | mpv - + shift + done ;; refresh) - pig_feed + if ! str isvalue "$2" + then pig_feed # does this in bulk + else + while str isvalue "$2" + do list_channels \ + | grep "$2" \ + | cut -f 2 \ + | xargs pig_latin \ + | jq '.feed_url' \ + | xargs pig_stow + shift + done + fi + ;; +subscribe) + str isvalue "$2" && ! str isvalue "$3" \ + || usage + pig_stow "$(feedurl "$(id "$2")")" + ;; +watch) # needs work + str isvalue "$2" \ + || usage + while str isvalue "$2" + do youtube-dl "$2" -f 18 -o - \ + | mpv - + shift + done + ;; +*) + usage ;; esac