summaryrefslogtreecommitdiff
path: root/scripts/feed
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/feed')
-rwxr-xr-xscripts/feed97
1 files changed, 97 insertions, 0 deletions
diff --git a/scripts/feed b/scripts/feed
new file mode 100755
index 0000000..9e14dab
--- /dev/null
+++ b/scripts/feed
@@ -0,0 +1,97 @@
1#!/bin/sh
2
3# RSS feed manager
4
5# Requires: sfeed, sfeed_plain (get), dmenu, open-url (menu)
6
7# Usage: feed [-m menu] [get|menu|clear|show]
8
9dir=$HOME/box/sfeed
10feeddir=$dir/urls
11destdir=$dir/new
12readdir=$dir/last
13menu="${FEEDMENU:-dmenu -l 20 -i}"
14urlopener=open-url
15
16usage() {
17 echo "Usage: feed [get|menu|clear|show]"
18}
19
20getnew() {
21 for f in "$feeddir"/*; do
22 read -r url < "$f"
23 name=$(basename "$f")
24 printf '%s... ' "$name"
25
26 d="$destdir/$name"
27 r="$readdir/$name"
28
29 [ -f "$r" ] && read -r lr < "$r" || lr=0
30
31 # Get new feed items
32 tmp=$(mktemp)
33 curl -s "$url" | sfeed | \
34 awk -v lr="$lr" '$1 > lr {print $0}' | \
35 tee "$tmp" | sfeed_plain >> "$d"
36
37 # Update last time stamp
38 awk -v lr="$lr" '$1 > lr {lr=$1} END {print lr}' <"$tmp" >"$r"
39
40 printf 'downloaded\n'
41 done
42}
43
44show() {
45 for f in "$destdir"/*; do
46 ff=$(basename "$f")
47 if [ -s "$f" ]; then
48 sort -r "$f" | while read -r line; do
49 printf '%20s %s\n' "$ff" "$line"
50 done
51 fi
52 done
53}
54
55selectmenu() {
56 $menu | awk '{print $NF}' | xargs $urlopener
57}
58
59while getopts "m:" opt; do
60 case "$opt" in
61 m)
62 menu="$OPTARG"
63 ;;
64 *)
65 usage
66 exit 1
67 ;;
68 esac
69done
70
71shift $((OPTIND - 1))
72
73if [ -z "$1" ]; then
74 usage
75 exit 1
76fi
77
78case "$1" in
79 get)
80 getnew
81 countnew=$(cat "$destdir"/* | wc -l)
82 echo "$countnew new feed items"
83 ;;
84 menu)
85 show | selectmenu
86 ;;
87 clear)
88 rm -r "$destdir"/*
89 ;;
90 show)
91 show
92 ;;
93 *)
94 usage
95 exit 1
96 ;;
97esac

Generated with cgit - Back to sebastiano.tronto.net