Current section

Files

Jump to
elixir_feed_parser lib parsers feedburner_atom.ex
Raw

lib/parsers/feedburner_atom.ex

defmodule ElixirFeedParser.Parsers.FeedburnerAtom do
import ElixirFeedParser.Parsers.Helper
alias ElixirFeedParser.XmlNode
alias ElixirFeedParser.Parsers.Atom
# TODO: implement me
def can_parse?(xml) do
Atom.can_parse?(xml) && feedburner_namespace?(xml)
end
def parse(xml) do
feed = XmlNode.find(xml, "/feed")
xml |> Atom.parse |> Map.merge(%{
hubs: feed |> elements("atom10:link[@rel='hub']", [attr: "href"]),
feed_url: feed |> element("link[@type='application/atom+xml']", [attr: "href"]),
entries: parse_entries(feed)
})
end
def parse_entry(feed, entry) do
feed |> Atom.parse_entry(entry) |> Map.merge(%{
url: feed_entry_url(entry)
})
end
defp feed_entry_url(entry) do
links = entry |> elements("link", [attr: "href"])
fb_url = entry |> element("feedburner:origLink")
if fb_url do fb_url else List.first(links) end
end
defp parse_entries(feed) do
XmlNode.map_children(feed, "entry", fn(e) -> parse_entry(feed, e) end)
end
defp feedburner_namespace?(xml) do
namespaces = xml |> XmlNode.find("/feed") |> XmlNode.namespaces
namespaces["feedburner"] == "http://rssnamespace.org/feedburner/ext/1.0"
end
end