sfeed

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

commit acc93c12198350212241dd88be572da042834792
parent 51c35cf03bc6b30b3a8fec6091e5d9eba422f62e
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Fri, 10 May 2019 21:29:07 +0200

sfeed_opml_export: optimize

Tested using 1000 feeds, took about 20s, now 0.02s.
The overhead of sed and printf was too high.

Now pipe an intermediate TAB format to awk and print it in one stage.

Diffstat:
Msfeed_opml_export | 29++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/sfeed_opml_export b/sfeed_opml_export @@ -22,21 +22,11 @@ loadconfig() { fi } -# escape(s) -escape() { - printf '%s' "$1" | sed -e 's@&@\&amp;@g' -e 's@"@\&quot;@g'\ - -e "s@'@\&#39;@g" -e 's@<@\&lt;@g' -e 's@>@\&gt;@g' -} - # override feeds function to ouput opml XML. # feed(name, feedurl, [basesiteurl], [encoding]) feed() { - name=$(escape "$1") - xmlurl=$(escape "$2") - htmlurl=$(escape "$3") - - printf '\t<outline title="%s" text="%s" xmlUrl="%s" htmlUrl="%s"/>\n' \ - "${name}" "${name}" "${xmlurl}" "${htmlurl}" + # NOTE: TABs in field values are unsupported, be sane. + echo "$1 $2 $3" } # load config file. @@ -51,9 +41,18 @@ cat <<! <body> ! -feeds -# wait till all items are processed (concurrently). -wait +feeds | LC_ALL=C awk 'BEGIN { + FS = OFS = "\t"; +} +{ + gsub("&", "\\&amp;"); + gsub("\"", "\\&quot;"); + gsub("'"'"'", "\\&#39;"); + gsub("<", "\\&lt;"); + gsub(">", "\\&gt;"); + + print "\t<outline title=\"" $1 "\" text=\""$1"\" xmlUrl=\""$2"\" htmlUrl=\""$3"\"/>"; +}' cat <<! </body>