Current section

Files

Jump to
elixir_feed_parser lib elixir_feed_parser.ex
Raw

lib/elixir_feed_parser.ex

defmodule ElixirFeedParser do
alias ElixirFeedParser.XmlNode
alias ElixirFeedParser.Parsers.Atom
alias ElixirFeedParser.Parsers.RSS2
alias ElixirFeedParser.Parsers.GoogleDocsAtom
alias ElixirFeedParser.Parsers.ITunesRSS2
alias ElixirFeedParser.Parsers.FeedburnerAtom
alias ElixirFeedParser.Parsers.FeedburnerRSS2
def parse(xml_string) do
with {:ok, xml} <- XmlNode.parse_string(xml_string),
{:ok, parser, xml} <- determine_feed_parser(xml),
do: {:ok, parser.parse(xml)}
end
def determine_feed_parser(xml) do
cond do
GoogleDocsAtom.can_parse?(xml) -> {:ok, GoogleDocsAtom, xml}
ITunesRSS2.can_parse?(xml) -> {:ok, ITunesRSS2, xml}
FeedburnerAtom.can_parse?(xml) -> {:ok, FeedburnerAtom, xml}
FeedburnerRSS2.can_parse?(xml) -> {:ok, FeedburnerRSS2, xml}
Atom.can_parse?(xml) -> {:ok, Atom, xml}
RSS2.can_parse?(xml) -> {:ok, RSS2, xml}
true -> {:error, :feed_format_unknown}
end
end
def supported_feed_format?(xml_string) do
{:ok, xml} = XmlNode.parse_string(xml_string)
case determine_feed_parser(xml) do
{:ok, _parser, _xml} ->
true
_ ->
false
end
end
end