jnfilter @ f0c2bbf9a990b963a225d244974062ee727103d1

  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 	)