Website/rss.go
2024-08-22 22:10:47 +02:00

80 lines
2.5 KiB
Go

package main
import (
"fmt"
"net/http"
"time"
"github.com/gorilla/feeds"
"github.com/russross/blackfriday/v2" // Import the Markdown library
)
func generateAtomFeed(w http.ResponseWriter, blogs []Blog, siteURL string) {
feed := &feeds.Feed{
Title: "Spitfire News",
Link: &feeds.Link{Href: siteURL},
Description: "Blog about Spitfire browser news/updates.", // Blog subtitle (Atom uses "subtitle" for description)
Author: &feeds.Author{Name: "Internet Addict", Email: "noone@none.no"},
Created: time.Now(),
}
for _, blog := range blogs {
for _, entry := range blog.Entries {
// Convert Markdown content to HTML
htmlContent := blackfriday.Run([]byte(entry.Content))
feed.Items = append(feed.Items, &feeds.Item{
Title: entry.Title,
Link: &feeds.Link{Href: fmt.Sprintf("%s/%s/%d", siteURL, blog.Name, entry.Number), Rel: "alternate"},
Description: entry.Description, // This can be used as the summary
Author: &feeds.Author{Name: entry.Author},
Id: fmt.Sprintf("%s/%s/%d", siteURL, blog.Name, entry.Number),
Updated: entry.Date,
Content: string(htmlContent),
})
}
}
atom, err := feed.ToAtom()
if err != nil {
http.Error(w, "Error generating Atom feed", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/atom+xml")
w.Write([]byte(atom))
}
func generateBlogAtomFeed(w http.ResponseWriter, blog Blog, siteURL string) {
feed := &feeds.Feed{
Title: blog.Name,
Link: &feeds.Link{Href: fmt.Sprintf("%s/%s", siteURL, blog.Name)},
Description: blog.Name, // Blog subtitle (Atom uses "subtitle" for description)
Author: &feeds.Author{Name: "Internet Addict", Email: "noone@none.no"},
Created: time.Now(),
}
for _, entry := range blog.Entries {
// Convert Markdown content to HTML
htmlContent := blackfriday.Run([]byte(entry.Content))
feed.Items = append(feed.Items, &feeds.Item{
Title: entry.Title,
Link: &feeds.Link{Href: fmt.Sprintf("%s/%s/%d", siteURL, blog.Name, entry.Number), Rel: "alternate"},
Description: entry.Description, // This can be used as the summary
Author: &feeds.Author{Name: entry.Author},
Id: fmt.Sprintf("%s/%s/%d", siteURL, blog.Name, entry.Number),
Updated: entry.Date,
Content: string(htmlContent),
})
}
atom, err := feed.ToAtom()
if err != nil {
http.Error(w, "Error generating Atom feed", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/atom+xml")
w.Write([]byte(atom))
}