feeder - parse RSS and Atom

Build Status

The feederErlang module parses RSS and Atom formatted XML feeds. It is a stream based parser that sends its events through a callback interface. Parsed data is normalized to maps.

Usage

Parse a file and accumulate parser events:

-module(acc).
-export([file/1]).

event({entry, Entry}, {Feed, Entries}) ->
  {Feed, [Entry|Entries]};
event({feed, Feed}, {[], Entries}) ->
  {Feed, Entries};
event(endFeed, {Feed, Entries}) ->
  {Feed, lists:reverse(Entries)}.

opts() ->
  [{event_state, {[],[]}}, {event_fun, fun event/2}].

file(Filename) ->
  {ok, EventState, _Rest} = feeder:file(Filename, opts()),
  EventState.

Example

To try HTTP streaming do:

cd example
make
erl -pa ebin deps/*/ebin
example:start().
example:print_titles("http://5by5.tv/rss").

types

feed()

The channel or feed element of the feed.

{feed, {Author, Id, Image, Language, Link, Subtitle, Summary, Title, Updated}

enclosure()

The enclosure element of an item or entry of the feed.

{enclosure, Url, Length, Type}

entry()

An item or entry element of the feed.

{entry, Author, Duration, Enclosure, Id, Image, Link, Subtitle, Summary, Title, Updated}

option()

Options to setup the parser.

{continuation_fun, ContinuationFun}ContinuationFun is a call back function to decide what to do if the parser runs into EOF before the document is complete.

{continuation_state, term()} State that is accessible in the continuation call back function.

{event_fun, EventFun}EventFun is the call back function for parser events.

{event_state, term()} State that is accessible in the event call back function.

event()

The events that are sent to the user via the callback.

{feed, Feed}

Receive notification when the meta information of the feed or channel has been parsed.

{entry, Entry}

Receive notification for each entry or article in the feed.

endFeed

Receive notification of the end of a document. Feeder will send this event only once, and it will be the last event during the parse.

exports

file(Filename, Opts) -> Result

stream(Xml, Opts) -> Result

License

MIT License