GoBlog/sitemap.go

40 lines
779 B
Go

package main
import (
"net/http"
"time"
"github.com/araddon/dateparse"
"github.com/snabb/sitemap"
)
const sitemapPath = "/sitemap.xml"
func serveSitemap(w http.ResponseWriter, r *http.Request) {
posts, err := getPosts(&postsRequestConfig{
status: statusPublished,
})
if err != nil {
serveError(w, r, err.Error(), http.StatusInternalServerError)
return
}
sm := sitemap.New()
sm.Minify = true
for _, p := range posts {
item := &sitemap.URL{
Loc: p.fullURL()}
var lastMod time.Time
if p.Updated != "" {
lastMod, _ = dateparse.ParseLocal(p.Updated)
}
if p.Published != "" && lastMod.IsZero() {
lastMod, _ = dateparse.ParseLocal(p.Published)
}
if !lastMod.IsZero() {
item.LastMod = &lastMod
}
sm.Add(item)
}
_, _ = sm.WriteTo(w)
}