Yara (Yet Another RSS Aggregator) is a fast, embeddable RSS aggregator and parser. Yara is written in C++ and exposes a very simple API in C.
Yara is designed to be as fast as possible, yet be usable and maintainable. Some of the choices for the parser and the renderer were made uniquely for speed:
· Yara uses the Expat XML parser, which is the fastest XML parser I know.
Though Expat is neither a SAX nor a DOM parser, it suits its purpose exactly and is the de-facto standard for fast XML parsing.
· Yara uses templates for rendering, in which it replaces tags with the contents of what it found in the RSS stream.
To render an RSS stream, it searches in the template for tags that look like this: $$__tagname__$$. It then uses a perfect hash, generated by GNU gperf, to look up the function to use to insert whatever the tag corresponds to, and inserts whatever needs inserting.
This means that this RSS renderer doesn't necessarily render RSS into HTML: you could, if you wanted, use it to generate C code that statically contains the RSS feed.
Parsing is done in two steps: first, the RSS stream is parsed, then the template is used to generate a header, each item found in the stream, and a footer. The template therefore consists of a template text for all three.
Yara will not download the stream for you: most RAD tools, frameworks, etc. come with easy-to-use methods to download files from the internet, so I didn't see an immediate need to implement this.
Yara comes with an example application, which is a stand-alone RSS viewer written in Turbo C++. The viewer loads the parser/renderer DLL dynamically, which is intended to demonstrate not only that the DLL can be compiled with a different C++ compiler, but that it can be used as a plug-in for your applications.
What's New in This Release:
· This release adds support for RSS feed generation, with a Generator class and a C API.
· This was developed for inclusion as a plug-in in RetroShare (http://retroshare.sf.net) to post OFF-Url-Links of the http://offsystem.sf.net to Web logs and boards with RSS.