store feeds as JSON
This commit is contained in:
parent
be5c22dbb9
commit
bfee05b744
102
rss/youtube
102
rss/youtube
|
@ -4,6 +4,8 @@ set -e
|
||||||
|
|
||||||
argv0="$0"
|
argv0="$0"
|
||||||
|
|
||||||
|
PIGPEN="$(pig_pen)"
|
||||||
|
|
||||||
id(){
|
id(){
|
||||||
youtube-dl --skip-download --print-json --playlist-items 1 "$1" \
|
youtube-dl --skip-download --print-json --playlist-items 1 "$1" \
|
||||||
| jq '.channel_id' \
|
| jq '.channel_id' \
|
||||||
|
@ -11,38 +13,75 @@ id(){
|
||||||
}
|
}
|
||||||
|
|
||||||
feedurl(){
|
feedurl(){
|
||||||
printf "https://www.youtube.com/feeds/videos.xml?channel_id=%b\n" "$1"
|
printf "http://www.youtube.com/feeds/videos.xml?channel_id=%b\n" "$1"
|
||||||
}
|
}
|
||||||
|
|
||||||
list_channels(){
|
list_channels(){
|
||||||
for file in "$(pig_pen)"/*
|
pscat \
|
||||||
do printf "%s\t%s\n" "$(xq '.feed.title' <"$file")" "$file"
|
[ sh -c "for file in \"$PIGPEN\"/*.xml; \
|
||||||
done
|
do xq '{(.feed.link[0].\"@href\"): .feed.title}' \"\$file\"; \
|
||||||
|
done 2>/dev/null" ] \
|
||||||
|
[ sh -c "for file in \"$PIGPEN\"/*.json; \
|
||||||
|
do jq '{(.feed.link[0].\"@href\"): .feed.title}' \"\$file\"; \
|
||||||
|
done 2>/dev/null" ] \
|
||||||
|
[ printf "\n" ] \
|
||||||
|
| sed \
|
||||||
|
-e '/{/d' \
|
||||||
|
-e '/}/d' \
|
||||||
|
-e 's/^ \"//g' \
|
||||||
|
-e 's/\": \"/ /g' \
|
||||||
|
-e 's/\,$//g' \
|
||||||
|
-e 's/\"$//g'
|
||||||
}
|
}
|
||||||
|
|
||||||
list_videos(){
|
list_videos(){
|
||||||
list_channels \
|
file="$( \
|
||||||
| grep "$1" \
|
ls "$PIGPEN" \
|
||||||
| cut -f 2 \
|
| grep "$( \
|
||||||
| xargs xq \
|
list_channels \
|
||||||
|
| sed "/$(printf '%b' "$1")/q" \
|
||||||
|
| tail -n 1 \
|
||||||
|
| cut -f 1 \
|
||||||
|
| xargs pig_name
|
||||||
|
)" \
|
||||||
|
)"
|
||||||
|
case "$file" in
|
||||||
|
*json)
|
||||||
|
jq \
|
||||||
'reduce .feed.entry[] as $item (
|
'reduce .feed.entry[] as $item (
|
||||||
{};
|
{};
|
||||||
. + { ($item.link."@href"): $item.title }
|
. + { ($item.link."@href"): $item.title }
|
||||||
)' \
|
)' "$file"
|
||||||
| sed \
|
;;
|
||||||
-e '1d' \
|
*xml)
|
||||||
-e '$d' \
|
xq \
|
||||||
-e 's/\": \"/ /g' \
|
'reduce .feed.entry[] as $item (
|
||||||
-e 's/^ \"//g' \
|
{};
|
||||||
-e 's/\"\,$//g' # this is really hacky
|
. + { ($item.link."@href"): $item.title }
|
||||||
|
)' "$file"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "No file found!\n" 1>&2
|
||||||
|
true
|
||||||
|
;;
|
||||||
|
esac | sed \
|
||||||
|
-e '1d' \
|
||||||
|
-e '$d' \
|
||||||
|
-e 's/\": \"/ /g' \
|
||||||
|
-e 's/^ \"//g' \
|
||||||
|
-e 's/\"\,$//g' # this is really hacky
|
||||||
}
|
}
|
||||||
|
|
||||||
latin(){
|
latin(){
|
||||||
xq '.feed.pig' <"$1"
|
case "$1" in
|
||||||
|
json) jq '.feed.pig' <"$1" ;;
|
||||||
|
xml) xq '.feed.pig' <"$1" ;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
stow(){
|
stow(){
|
||||||
pig_fetch "$1" | xq -x "$(
|
name="$PIGPEN/$(pig_name "$1")"
|
||||||
|
pig_fetch "$1" | xq "$(
|
||||||
date '+%Y-%m-%dT%T' \
|
date '+%Y-%m-%dT%T' \
|
||||||
| xargs printf '
|
| xargs printf '
|
||||||
. * { feed: { pig: {
|
. * { feed: { pig: {
|
||||||
|
@ -51,7 +90,8 @@ stow(){
|
||||||
stow_date: "%b",
|
stow_date: "%b",
|
||||||
version: "0"
|
version: "0"
|
||||||
} } }' "$1" \
|
} } }' "$1" \
|
||||||
)" >"$(pig_pen)/$(pig_name "$1")"
|
)" >"$name.json"
|
||||||
|
rm -f "$name.xml"
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(){
|
watch(){
|
||||||
|
@ -82,7 +122,7 @@ case "$1" in
|
||||||
list_channels)
|
list_channels)
|
||||||
! str isvalue "$2" \
|
! str isvalue "$2" \
|
||||||
|| usage
|
|| usage
|
||||||
list_channels | sort
|
list_channels
|
||||||
;;
|
;;
|
||||||
list_videos) # do something with youtube-dl?
|
list_videos) # do something with youtube-dl?
|
||||||
str isvalue "$2" \
|
str isvalue "$2" \
|
||||||
|
@ -103,19 +143,21 @@ listen)
|
||||||
;;
|
;;
|
||||||
refresh)
|
refresh)
|
||||||
if ! str isvalue "$2"
|
if ! str isvalue "$2"
|
||||||
then for file in "$(pig_pen)"/*
|
then for file in "$PIGPEN"/*
|
||||||
do latin "$file" \
|
do stow "$( \
|
||||||
| jq '.feed_url' \
|
latin "$file" \
|
||||||
| xargs stow &
|
| jq -r '.feed_url' \
|
||||||
|
)"
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
while str isvalue "$2"
|
while str isvalue "$2"
|
||||||
do list_channels \
|
do stow "$( \
|
||||||
| grep "$2" \
|
latin "$( \
|
||||||
| cut -f 2 \
|
list_channels \
|
||||||
| xargs latin \
|
| grep "$2" \
|
||||||
| jq '.feed_url' \
|
| cut -f 2 \
|
||||||
| xargs stow
|
)" | jq '.feed_url' \
|
||||||
|
)"
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
@ -124,7 +166,7 @@ subscribe)
|
||||||
str isvalue "$2" \
|
str isvalue "$2" \
|
||||||
|| usage
|
|| usage
|
||||||
while str isvalue "$2"
|
while str isvalue "$2"
|
||||||
do stow "$(feedurl "$(id "$2")")"
|
do stow "http://www.youtube.com/feeds/videos.xml?channel_id=$(id "$2")"
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user