cmd/server/genrecs.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
package main
import (
"fmt"
"os"
"strings"
"text/template"
)
type (
blogRec struct {
URL string
Title string
Author string
}
)
func genRecs() {
fmt.Println("Generating blog recommendations...")
recList := genBlogRecs()
fmt.Println("Generating blog recommendation RSS...")
genRSSBlogRecs(recList)
}
func readBlogRecs() []blogRec {
// read file
content, err := os.ReadFile("templates/blogrecs.txt")
if err != nil {
fmt.Printf("ERROR reading blogrecs file: %s\n", err)
}
state := 0 // 1 url, 2 title, 3 author
var b strings.Builder // builder for string parsing
var recList []blogRec
for _, char := range content {
switch state {
case 0:
recList = append(recList, blogRec{})
state = 1
case 1:
if char == '\n' {
recList[len(recList)-1].URL = b.String()
b.Reset()
state = 2
}
b.WriteByte(char)
case 2:
if char == '\n' {
recList[len(recList)-1].Title = b.String()
b.Reset()
state = 3
}
b.WriteByte(char)
case 3:
if char == '\n' {
recList[len(recList)-1].Author = b.String()
b.Reset()
state = 0
}
b.WriteByte(char)
}
}
return recList
}
func genBlogRecs() []blogRec {
recList := readBlogRecs()
// template
tpl, err := template.ParseFiles("templates/blogrecs.html.gotmpl")
if err != nil {
fmt.Printf("ERROR creating template: %s\n", err)
}
f, err := os.Create("html/en/blogrecs.html")
if err != nil {
fmt.Printf("ERROR creating html: %s\n", err)
panic(1)
}
err = tpl.ExecuteTemplate(f, "blogrecs.html.gotmpl", recList)
if err != nil {
fmt.Printf("ERROR executing template: %s\n", err)
}
return recList
}
|