sfeed

Simple RSS and Atom feed parser
git clone https://git.sinitax.com/codemadness/sfeed
Log | Files | Refs | README | LICENSE | Upstream | sfeed.txt

sfeed_opml_export (1357B)


      1#!/bin/sh
      2
      3# load config (evaluate shellscript).
      4# loadconfig(configfile)
      5loadconfig() {
      6	# allow to specify config via argv[1].
      7	if [ "$1" != "" ]; then
      8		# get absolute path of config file required for including.
      9		config="$1"
     10		configpath=$(readlink -f "${config}" 2>/dev/null)
     11	else
     12		# default config location.
     13		config="$HOME/.sfeed/sfeedrc"
     14		configpath="${config}"
     15	fi
     16
     17	# config is loaded here to be able to override $sfeedpath or functions.
     18	if [ -r "${configpath}" ] && [ -f "${configpath}" ]; then
     19		. "${configpath}"
     20	else
     21		printf "Configuration file \"%s\" cannot be read.\n" "${config}" >&2
     22		echo "See the sfeedrc.example file or the sfeedrc(5) man page for an example." >&2
     23		exit 1
     24	fi
     25}
     26
     27# override feed function to output OPML XML.
     28# feed(name, feedurl, [basesiteurl], [encoding])
     29feed() {
     30	# uses the characters 0x1f and 0x1e as a separator.
     31	printf '%s\037%s\036' "$1" "$2"
     32}
     33
     34# load config file.
     35loadconfig "$1"
     36
     37cat <<!
     38<?xml version="1.0" encoding="UTF-8"?>
     39<opml version="1.0">
     40<head>
     41	<title>OPML export</title>
     42</head>
     43<body>
     44!
     45
     46feeds | LC_ALL=C awk '
     47BEGIN {
     48	FS = "\x1f"; RS = "\x1e";
     49}
     50{
     51	gsub("&", "\\&amp;");
     52	gsub("\"", "\\&quot;");
     53	gsub("'"'"'", "\\&#39;");
     54	gsub("<", "\\&lt;");
     55	gsub(">", "\\&gt;");
     56
     57	print "\t<outline type=\"rss\" title=\"" $1 "\" text=\"" $1 "\" xmlUrl=\"" $2 "\"/>";
     58}'
     59
     60cat <<!
     61</body>
     62</opml>
     63!