alba/backend/main.go
2022-04-20 12:43:54 +02:00

85 lines
1.7 KiB
Go

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