package main import ( "fmt" "log" "net/http" "os" "os/exec" "text/template" "time" "github.com/mmcdole/gofeed" "gogs.carduccidante.edu.it/karmen/core/util/pandoc" tplutil "gogs.carduccidante.edu.it/karmen/core/util/template" ) var funcmap = template.FuncMap{ "date": func() string { now := time.Now() return now.Format("2006-02-01") }, } func convertPDFToPNG(filename string) error { out, err := exec.Command("pdftoppm", filename, "./data/screen", "-png").CombinedOutput() if string(out) != "" { return fmt.Errorf("pdftoppm: %s", string(out)) } if err != nil { return err } return nil } func serveScreen(res http.ResponseWriter, req *http.Request) { fp := gofeed.NewParser() feed, _ := fp.ParseURL("https://www.agi.it/innovazione/rss") tpl, err := tplutil.LoadTextTemplate("./data/screen.tpl.md", funcmap) if err != nil { panic(err) } f, err := os.Create("./data/screen.md") if err != nil { panic(err) } defer f.Close() var data struct { Title string Item *gofeed.Item } data.Title = feed.Title data.Item = feed.Items[0] log.Println("Generating markdown file from template.") if err := tpl.Execute(f, data); err != nil { panic(err) } log.Println("Converting markdown to pdf.") err = pandoc.Convert("./data/screen.md", "./data/screen.pdf", "-V", "geometry:papersize={3.8in,6.4in}", "-V", "pagestyle:empty") if err != nil { panic(err) } log.Println("Converting pdf to png.") err = convertPDFToPNG("./data/screen.pdf") if err != nil { panic(err) } log.Println("Serving screen.png...") http.ServeFile(res, req, "./data/screen-1.png") } func main() { http.HandleFunc("/", serveScreen) log.Println("Start alba backend...") http.ListenAndServe(":3000", nil) }