33 lines
780 B
Elixir
33 lines
780 B
Elixir
defmodule Frenzy.OPML.Exporter do
|
|
import XmlBuilder
|
|
|
|
@spec export([Frenzy.Group.t()]) :: String.t()
|
|
def export(groups) do
|
|
element(:opml, %{version: "1.0"}, [
|
|
element(:head, %{}, [
|
|
element(:title, "Frenzy export")
|
|
]),
|
|
element(
|
|
:body,
|
|
%{},
|
|
Enum.map(groups, fn group ->
|
|
element(
|
|
:outline,
|
|
%{text: group.title, title: group.title},
|
|
Enum.map(group.feeds, fn feed ->
|
|
element(:outline, %{
|
|
type: "rss",
|
|
text: feed.title,
|
|
title: feed.title,
|
|
xmlUrl: feed.feed_url,
|
|
htmlUrl: feed.site_url
|
|
})
|
|
end)
|
|
)
|
|
end)
|
|
)
|
|
])
|
|
|> generate()
|
|
end
|
|
end
|