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