Atom feeds supported


annot.at now supports Atom feeds, on top of the existing RSS feed functionality. This wasn't a big lift to add, I had just skipped it on the path of getting something working.

Apart from setting up the Saxy SAX parser, the data we extract is not very complicated:

  defp apply_entry_field(entry, "title", text), do: %{entry | title: text}
  defp apply_entry_field(entry, "id", text), do: %{entry | id: text}
  defp apply_entry_field(entry, "summary", text), do: %{entry | summary: text}
  defp apply_entry_field(entry, "content", text), do: %{entry | content: text}
  defp apply_entry_field(entry, "published", text), do: %{entry | published_at: parse_date(text)}

  defp apply_entry_field(entry, "updated", text) do
    %{entry | published_at: entry.published_at || parse_date(text)}
  end

  defp apply_entry_field(entry, _name, _text), do: entry

  defp apply_feed_field(feed, "title", text), do: %{feed | title: text}
  defp apply_feed_field(feed, "subtitle", text), do: %{feed | description: text}
  defp apply_feed_field(feed, _name, _text), do: feed

  defp finalize_entry(%Entry{id: nil, url: url} = entry) when is_binary(url) do
    %{entry | id: url}
  end

  defp finalize_entry(entry), do: entry



Sign in to leave a note.