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)) }