//CreateXMLSitemap creates xml sitemap for search engines, and saves in /static/public/sitemap folder func CreateXMLSitemap() { log.Printf("INFO: Starting XML sitemap generation\n") folder := path.Join(GetConfig().Public, "sitemap") domain := GetConfig().Domain now := time.Now() items := make([]sitemap.Item, 1) //Home page items = append(items, sitemap.Item{ Loc: fmt.Sprintf("%s", domain), LastMod: now, Changefreq: "daily", Priority: 1, }) //Posts posts, err := models.GetPublishedPosts() if err != nil { log.Printf("ERROR: %s\n", err) return } for i := range posts { items = append(items, sitemap.Item{ Loc: fmt.Sprintf("%s/posts/%d", domain, posts[i].ID), LastMod: posts[i].UpdatedAt, Changefreq: "weekly", Priority: 0.9, }) } //Static pages pages, err := models.GetPublishedPages() if err != nil { log.Printf("ERROR: %s\n", err) return } for i := range pages { items = append(items, sitemap.Item{ Loc: fmt.Sprintf("%s/pages/%d", domain, pages[i].ID), LastMod: pages[i].UpdatedAt, Changefreq: "monthly", Priority: 0.8, }) } if err := sitemap.SiteMap(path.Join(folder, "sitemap1.xml.gz"), items); err != nil { log.Printf("ERROR: %s\n", err) return } if err := sitemap.SiteMapIndex(folder, "sitemap_index.xml", domain+"/public/sitemap/"); err != nil { log.Printf("ERROR: %s\n", err) return } log.Printf("INFO: XML sitemap has been generated in %s\n", folder) }
//RssXML handles GET /rss route func RssXML(w http.ResponseWriter, r *http.Request) { tmpl := shared.Template(r) if r.Method == "GET" { now := time.Now() domain := shared.GetConfig().Domain feed := &feeds.Feed{ Title: "Blog boilerplate", Link: &feeds.Link{Href: domain}, Description: "Basic blog boilerplate in Go", Author: &feeds.Author{Name: "Blog Author"}, Created: now, Copyright: fmt.Sprintf("© %s", "Blog"), } feed.Items = make([]*feeds.Item, 0) posts, err := models.GetPublishedPosts() if err != nil { log.Printf("ERROR: %s\n", err) w.WriteHeader(500) tmpl.Lookup("errors/500").Execute(w, shared.ErrorData(err)) return } for i := range posts { feed.Items = append(feed.Items, &feeds.Item{ Id: fmt.Sprintf("%s/posts/%d", domain, posts[i].ID), Title: posts[i].Name, Link: &feeds.Link{Href: fmt.Sprintf("%s/posts/%d", domain, posts[i].ID)}, Description: string(posts[i].Excerpt()), Author: &feeds.Author{Name: posts[i].Author.Name}, Created: now, }) } rss, err := feed.ToRss() if err != nil { log.Printf("ERROR: %s\n", err) w.WriteHeader(500) tmpl.Lookup("errors/500").Execute(w, shared.ErrorData(err)) return } fmt.Fprintln(w, rss) } else { err := fmt.Errorf("Method %q not allowed", r.Method) log.Printf("ERROR: %s\n", err) w.WriteHeader(405) tmpl.Lookup("errors/405").Execute(w, shared.ErrorData(err)) } }