main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "os"
  7. "os/exec"
  8. "text/template"
  9. "time"
  10. "github.com/mmcdole/gofeed"
  11. "gogs.carduccidante.edu.it/karmen/core/util/pandoc"
  12. tplutil "gogs.carduccidante.edu.it/karmen/core/util/template"
  13. )
  14. var funcmap = template.FuncMap{
  15. "day": func() int {
  16. _, _, day := time.Now().Date()
  17. return day
  18. },
  19. "month": func() int {
  20. _, month, _ := time.Now().Date()
  21. return int(month)
  22. },
  23. "year": func() int {
  24. year, _, _ := time.Now().Date()
  25. return year
  26. },
  27. "news": func() []*gofeed.Item {
  28. result := make([]*gofeed.Item, 0)
  29. fp := gofeed.NewParser()
  30. feed, _ := fp.ParseURL("https://www.agi.it/innovazione/rss")
  31. for _, it := range feed.Items {
  32. result = append(result, it)
  33. }
  34. return result[:2]
  35. },
  36. "weather": func() []*gofeed.Item {
  37. result := make([]*gofeed.Item, 0)
  38. fp := gofeed.NewParser()
  39. feed, _ := fp.ParseURL("https://www.meteowebcam.eu/rss.xml")
  40. for _, it := range feed.Items {
  41. result = append(result, it)
  42. }
  43. return result[:1]
  44. },
  45. }
  46. func convertPDFToPNG(filename string) error {
  47. out, err := exec.Command("pdftoppm", filename, "./data/screen", "-png").CombinedOutput()
  48. if string(out) != "" {
  49. return fmt.Errorf("pdftoppm: %s", string(out))
  50. }
  51. if err != nil {
  52. return err
  53. }
  54. return nil
  55. }
  56. func serveScreen(res http.ResponseWriter, req *http.Request) {
  57. tpl, err := tplutil.LoadTextTemplate("./data/screen.tpl.md", funcmap)
  58. if err != nil {
  59. panic(err)
  60. }
  61. f, err := os.Create("./data/screen.md")
  62. if err != nil {
  63. panic(err)
  64. }
  65. defer f.Close()
  66. var data struct {
  67. Title string
  68. Item *gofeed.Item
  69. }
  70. log.Println("Generating markdown file from template.")
  71. if err := tpl.Execute(f, data); err != nil {
  72. panic(err)
  73. }
  74. log.Println("Converting markdown to pdf.")
  75. err = pandoc.Convert("./data/screen.md", "./data/screen.pdf", "-V", "geometry:papersize={3.8in,6in}", "-V", "pagestyle:empty")
  76. if err != nil {
  77. panic(err)
  78. }
  79. log.Println("Converting pdf to png.")
  80. err = convertPDFToPNG("./data/screen.pdf")
  81. if err != nil {
  82. panic(err)
  83. }
  84. log.Println("Serving screen.png...")
  85. http.ServeFile(res, req, "./data/screen-1.png")
  86. }
  87. func main() {
  88. http.HandleFunc("/", serveScreen)
  89. log.Println("Start alba backend...")
  90. http.ListenAndServe(":3000", nil)
  91. }