1diff --git a/Makefile b/Makefile
2index e498b3570b613b0e1ce10d4b35440036bc63e39d..0bb3b319a53bdae889583b3a6dc8c64c70c8cb5c 100644
3--- a/Makefile
4+++ b/Makefile
5@@ -23,3 +23,6 @@ upx --best --ultra-brute $(OUT)
6
7 run:
8 $(GO_RUN) .
9+
10+series:
11+ $(GO_RUN) . series
12diff --git a/main.go b/main.go
13index b9bed96fefc2d2eb2286a5c0c529520ede26575b..22d1489b26af1ccd0d907ddec6974bc518acc0aa 100644
14--- a/main.go
15+++ b/main.go
16@@ -7,6 +7,7 @@ "flag"
17 "fmt"
18 "io"
19 "net/http"
20+ "os"
21 "regexp"
22 "strconv"
23 "strings"
24@@ -18,22 +19,34 @@ "github.com/prometheus/client_golang/prometheus/promauto"
25 "github.com/prometheus/client_golang/prometheus/promhttp"
26 )
27
28-type ErrorRequestHandler func(w http.ResponseWriter, r *http.Request) error
29-
30 const (
31 FeedUrl = "https://api.jovemnerd.com.br/feed-nerdcast/"
32 )
33
34+type (
35+ ErrorRequestHandler func(w http.ResponseWriter, r *http.Request) error
36+)
37+
38 var (
39- RegexCollection = map[string]string{
40- "nerdcast": "NerdCast [0-9]+[a-c]* -",
41- "empreendedor": "Empreendedor [0-9]+ -",
42- "mamicas": "Caneca de Mamicas [0-9]+ -",
43- "english": "Speak English [0-9]+ -",
44- "nerdcash": "NerdCash [0-9]+ -",
45- "bunker": "Lá do Bunker [0-9]+ -",
46- "tech": "NerdTech [0-9]+ -",
47- "genera": "Generacast [0-9]+ -",
48+ SerieRegex = regexp.MustCompile(`(?P<serie>.+) (?P<number>[0-9abc]+) \- (?P<title>.+)`)
49+)
50+
51+var (
52+ regexCollection = map[string]string{
53+ "nerdcast": "NerdCast [0-9]+[a-c]*",
54+ "empreendedor": "Empreendedor [0-9]+",
55+ "mamicas": "Caneca de Mamicas [0-9]+",
56+ "english": "Speak English [0-9]+",
57+ "nerdcash": "NerdCash [0-9]+",
58+ "bunker": "Lá do Bunker( LDB especial Oscar|) [0-9]+",
59+ "tech": "NerdTech [0-9]+",
60+ "genera": "Generacast [0-9]+",
61+ "rpg": "NerdCast RPG [0-9]+[a-c]*",
62+ "catar": "Vai te Catar [0-9]+",
63+ "cloud": "Nerd na Cloud [0-9]+",
64+ "contar": "Vou (T|t)e Contar [0-9]+",
65+ "parceiro": "Papo de Parceiro [0-9]+",
66+ "cash": "NerdCash [0-9]+",
67 }
68
69 feedRequest = promauto.NewHistogramVec(prometheus.HistogramOpts{
70@@ -60,7 +73,7 @@
71 var series []string
72
73 for _, q := range strings.Split(query, ",") {
74- if _, ok := RegexCollection[q]; ok {
75+ if _, ok := regexCollection[q]; ok {
76 series = append(series, q)
77 }
78 }
79@@ -74,7 +87,7 @@ }
80
81 func match(title string, series []string) bool {
82 for _, s := range series {
83- if ok, err := regexp.MatchString(RegexCollection[s], title); err == nil && ok {
84+ if ok, err := regexp.MatchString(regexCollection[s], title); err == nil && ok {
85 return true
86 }
87 }
88@@ -224,7 +237,44 @@
89 return nil
90 }
91
92+func genSeries() error {
93+ xml, err := fetchXML(context.Background())
94+ if err != nil {
95+ return err
96+ }
97+
98+ doc := etree.NewDocument()
99+ err = doc.ReadFromBytes(xml)
100+ if err != nil {
101+ return err
102+ }
103+
104+ unique := make(map[string]any)
105+ els := doc.FindElements("//channel/item")
106+ for _, e := range els {
107+ txt := e.FindElement("title").Text()
108+ res := SerieRegex.FindStringSubmatch(txt)
109+ if len(res) > 1 {
110+ unique[res[1]] = nil
111+ }
112+ }
113+
114+ for k := range unique {
115+ fmt.Println(k)
116+ }
117+
118+ return nil
119+}
120+
121 func main() {
122+ if len(os.Args) > 1 && os.Args[1] == "series" {
123+ err := genSeries()
124+ if err != nil {
125+ panic(err.Error())
126+ }
127+ return
128+ }
129+
130 var (
131 addr = flag.String("addr", ":8080", "Server address")
132 )