sfeed v0.9 ---------- Simple RSS and Atom parser (and some format programs). Dependencies ------------ - C compiler (recommended to support C99). - libc (recommended: C99 and POSIX >= 200809). Optional dependencies --------------------- - make (for Makefile) or mk (for mkfile) (plan9 or 9base). - POSIX shell used by sfeed_update and sfeed_opml_export. - curl: http://curl.haxx.se/ used by sfeed_update, can be replaced with any tool like wget, fetch. - iconv command-line utilities: http://www.gnu.org/software/libiconv/ used by sfeed_update. If the text in your RSS/Atom feeds are already UTF-8 encoded then you don't need this. Platforms tested ---------------- - Linux (glibc+gcc, musl-gcc, clang, tcc). - OpenBSD - Windows (cygwin gcc, mingw). Files ----- sfeed - Binary (from sfeed.c); read XML RSS or Atom feed data from stdin. Write feed data in tab-separated format to stdout. sfeed_update - Shellscript; update feeds and merge with old feeds in the file $HOME/.sfeed/feeds by default. sfeed_plain - Format feeds file (TSV) from sfeed_update to plain text. sfeed_html - Format feeds file (TSV) from sfeed_update to HTML. sfeed_frames - Format feeds as a HTML file with frames. sfeed_opml_import - Generate a sfeedrc config file based on an opml file. sfeed_opml_export - Generate an opml file based on a sfeedrc config file. sfeed_xmlenc - Detect character-set encoding from XML stream. sfeed_web - Find urls to RSS/Atom feed from a webpage. sfeedrc.example - Example config file. style.css - Example stylesheet to use with sfeed_html or sfeed_frames. Files read at runtime by sfeed_update ------------------------------------- sfeedrc - Config file. This file is evaluated as a shellscript in sfeed_update. You can for example override the fetchfeed() function to use wget, fetch or an other download program or you can override the merge() function to change the merge logic. The function feeds() is called to fetch the feeds. The function feed() can safely be executed as a parallel job in your sfeedrc config file to speedup updating. Files written at runtime by sfeed_update ---------------------------------------- feeds - Tab-separated format containing all feeds. The sfeed_update script merges new items with this file. feeds.new - Temporary file used by sfeed_update to merge items. TAB-SEPARATED format -------------------- The items are saved in a TSV-like format except newlines, tabs and backslash are escaped with \ (\n, \t and \\). Other whitespace except spaces are removed. The timestamp field is converted to a unix timestamp. The timestamp is also stored as formatted as a separate field. The other fields are left untouched (including HTML). The order and format of the fields are: item unix timestamp - string unix timestamp (GMT+0) item formatted timestamp - string timestamp (YYYY-mm-dd HH:MM:SS tz[+-]HHMM) item title - string item link - string item content - string item contenttype - string ("html" or "plain") item id - string item author - string feed type - string ("rss" or "atom") feed name - string (extra field added by sfeed_update) feed url - string (extra field added by sfeed_update) item baseurl site - string (extra field added by sfeed_update) Build and install ----------------- Using make (respects DESTDIR and PREFIX variable): make install or using plan9 mk: mk install Usage ----- Find RSS/Atom feed urls from a webpage: $ url="codemadness.org"; wget -L -q -O - "$url" | sfeed_web "$url" output: application/rss+xml http://codemadness.org/blog/rss.xml application/atom+xml http://codemadness.org/blog/atom.xml To update feeds and format the feeds file (configfile argument is optional): sfeed_update "configfile" sfeed_plain < $HOME/.sfeed/feeds > $HOME/.sfeed/feeds.txt sfeed_html < $HOME/.sfeed/feeds > $HOME/.sfeed/feeds.html Example script to view feeds with dmenu, opens selected url in $BROWSER: url=$(sfeed_plain < "$HOME/.sfeed/feeds" | dmenu -l 35 -i | sed 's@^.* \([a-zA-Z]*://\)\(.*\)$@\1\2@') [ ! "$url" = "" ] && $BROWSER "$url" or to view in your browser: $BROWSER "$HOME/.sfeed/feeds.html" or to view in your editor: $EDITOR "$HOME/.sfeed/feeds.txt" Generate a sfeedrc config file from your exported list of feeds in opml format: sfeed_opml_import < opmlfile.xml > $HOME/.sfeed/sfeedrc Export an opml file of your feeds from a sfeedrc config file (configfile arguments is optional): sfeed_opml_export configfile > myfeeds.opml tip to remove feeds older than a date (change time="YYYY mm dd HH mm ss") gawk -F '\t' 'BEGIN { time = mktime("2012 01 01 12 34 56"); } { if(int($1) >= int(time)) { print $0; } }' < feeds > feeds.clean mv feeds.clean feeds License ------- MIT, see LICENSE file. Author ------ Hiltjo Posthuma