starfeeds
I created this when I was started learning about gleam. It is a simple JSONFeed generator.
Try it out here: starfeeds - hexdocs
Example usage
import starfeeds/feed
import birl
import option
import simplifile
let posts = []
let feed_opts =
feed.FeedOptions(
id: "https://adediiji.uk/feed.json",
title: "David Adediji",
updated: option.Some(birl.now()),
generator: option.Some("starfeeds by adediiji.uk"),
language: option.Some("en-GB"),
ttl: option.None,
feed: option.None,
feed_links: option.Some(feed.Link(
href: "https://adediiji.uk/feed.json",
rel: "self",
link_type: "json",
length: "",
)),
hub: option.None,
docs: option.None,
podcast: option.None,
category: option.None,
author: option.Some(feed.Author(
name: option.Some("David Adediji"),
url: option.Some("https://adediiji.uk"),
avatar: option.Some("https://adediiji.uk/logo.png"),
)),
url: option.Some("https://adediiji.uk"),
description: option.Some(""),
image: option.Some("https://adediiji.uk/logo.png"),
favicon: option.Some("https://adediiji.uk/favicon.ico"),
copyright: option.Some("©" <> year <> " David Adediji"),
)
let json_feeed = feed.new_feed(feed_opts)
let items =
posts
|> list.map(fn(post) {
let path = post_path(post.relative_path)
feed.Item(
title: post.metadata.title,
id: option.Some("https://adediiji.uk/" <> path),
url: "https://adediiji.uk/" <> path,
date: utils.string_to_date(post.metadata.date),
description: option.Some(post.metadata.description),
content: option.Some(content),
category: option.Some([
feed.Category(
name: option.Some("Programming"),
domain: option.None,
scheme: option.None,
term: option.None,
),
]),
guid: option.None,
image: option.Some("https://adediiji.uk/images/og.png"),
audio: option.None,
video: option.None,
enclosure: option.None,
author: option.Some([
feed.Author(
name: option.Some("David Adediji"),
url: option.Some("https://adediiji.uk"),
avatar: option.Some("https://adediiji.uk/logo.png"),
),
]),
contributor: option.None,
published: option.Some(utils.string_to_date(post.metadata.date)),
copyright: option.Some("©" <> year <> " David Adediji"),
extensions: [],
)
})
let items = feed.add_item(json_feeed, items)
let final_feed = feed.Feed(..json_feeed, items:)
let content = feed.render_json(final_feed) |> json.to_string
simplifile.write("dist/feed.json", content)