scripts

Various scripts for UNIX-like systems
git clone https://git.tronto.net/scripts
Download | Log | Files | Refs | README

feed (1440B)


      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 
      9 dir=$HOME/box/sfeed
     10 feeddir=$dir/urls
     11 destdir=$dir/new
     12 readdir=$dir/last
     13 menu="${FEEDMENU:-dmenu -l 20 -i}"
     14 urlopener=open-url
     15 
     16 usage() {
     17 	echo "Usage: feed [get|menu|clear|show]"
     18 }
     19 
     20 getnew() {
     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 
     44 show() {
     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 
     55 selectmenu() {
     56 	$menu | awk '{print $NF}' | xargs $urlopener
     57 }
     58 
     59 while getopts "m:" opt; do
     60 	case "$opt" in
     61 		m)
     62 			menu="$OPTARG"
     63 			;;
     64 		*)
     65 			usage
     66 			exit 1
     67 			;;
     68 	esac
     69 done
     70 
     71 shift $((OPTIND - 1))
     72 
     73 if [ -z "$1" ]; then
     74 	usage
     75 	exit 1
     76 fi
     77 
     78 case "$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 		;;
     97 esac