-
Notifications
You must be signed in to change notification settings - Fork 7
/
main.go
109 lines (94 loc) · 2.41 KB
/
main.go
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package main
import (
"errors"
"flag"
"fmt"
"io"
"io/fs"
"log"
"os"
"path/filepath"
"time"
dataio "github.com/geniass/ebucks-dealz/pkg/io"
"github.com/geniass/ebucks-dealz/pkg/scraper"
"github.com/geniass/ebucks-dealz/pkg/web"
)
func main() {
dataDirNameArg := flag.String("data-dir", "./data", "directory that contains scraped data files")
ouputDirArg := flag.String("output-dir", "docs", "data to write rendered HTML content to")
pagePathPrefixArg := flag.String("path-prefix", "", "prefix page link URLs (in case pages are hosted at a subpath); should start with '/'")
flag.Parse()
if err := os.MkdirAll(*ouputDirArg, os.ModeDir|0775); err != nil {
log.Fatal(err)
}
lastUpdated := time.Now()
baseContext := web.BaseContext{PathPrefix: *pagePathPrefixArg}
// Home page
err := renderToFile(*ouputDirArg, "index.html", func(w io.Writer) error {
return web.RenderHome(w, baseContext)
})
if err != nil {
log.Fatal(err)
}
dataDir := filepath.Join(*dataDirNameArg, "raw")
ps, err := dataio.LoadFromDir(dataDir)
if errors.Is(err, fs.ErrNotExist) {
log.Printf("WARNING: data dir %q does not exist, assuming no deals...\n", dataDir)
} else if err != nil {
log.Fatal(err)
}
for _, p := range ps {
fmt.Printf("%+v\n", p)
}
{
discounted := []scraper.Product{}
for _, p := range ps {
if p.Percentage > 0 {
discounted = append(discounted, p.Product)
}
}
err := renderToFile(*ouputDirArg, "discount.html", func(w io.Writer) error {
c := web.DealzContext{
BaseContext: baseContext,
Title: "Discounted (40%)",
LastUpdated: lastUpdated,
Products: discounted,
}
return web.RenderDealz(w, c)
})
if err != nil {
log.Fatal(err)
}
}
{
otherProducts := []scraper.Product{}
for _, p := range ps {
if p.Percentage == 0 {
otherProducts = append(otherProducts, p.Product)
}
}
err := renderToFile(*ouputDirArg, "other.html", func(w io.Writer) error {
c := web.DealzContext{
BaseContext: baseContext,
Title: "Other Products",
LastUpdated: lastUpdated,
Products: otherProducts,
}
return web.RenderDealz(w, c)
})
if err != nil {
log.Fatal(err)
}
}
}
func renderToFile(dir string, filename string, renderFunc func(w io.Writer) error) error {
f, err := os.Create(filepath.Join(dir, filename))
if err != nil {
return err
}
defer f.Close()
if err := renderFunc(f); err != nil {
return err
}
return nil
}