aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Kuznetsov <evgeny@kuznetsov.md>2020-02-05 09:28:20 +0300
committerEvgeny Kuznetsov <evgeny@kuznetsov.md>2020-02-05 09:28:20 +0300
commit85caee2d9cad1f022e7101b1a04016f92fda64d1 (patch)
tree5f396c2094481f1a806ad219669ebf75ff6af6a8
parentec0baaa14313e84af97ea1783559e5ccdc293c8e (diff)
downloadradiorus-rss-85caee2d9cad1f022e7101b1a04016f92fda64d1.tar.gz
radiorus-rss-85caee2d9cad1f022e7101b1a04016f92fda64d1.zip
more testing
-rw-r--r--main.go39
-rw-r--r--main_test.go22
2 files changed, 48 insertions, 13 deletions
diff --git a/main.go b/main.go
index 7687793..9ffdafd 100644
--- a/main.go
+++ b/main.go
@@ -44,7 +44,6 @@ var (
programNameRe = regexp.MustCompile(`<h2>(.+?)?</h2>`)
programAboutRe = regexp.MustCompile(`(?s)<div class="brand__content_text__anons">(.+?)?</div>`)
programImageRe = regexp.MustCompile(`(?s)<div class="brand\-promo__header">(.+?)?<img src="(.+?)?"(.+?)?alt='(.+?)?'>`)
- episodeDateRe = regexp.MustCompile(`brand\-time brand\-menu\-link">(.+?)?\.(.+?)?\.(.+?)? в (.+?)?:(.+?)?</a>`)
episodeDescRe = regexp.MustCompile(`<p class="anons">(.+?)?</p>`)
episodeTitleRe = regexp.MustCompile(`title brand\-menu\-link">(.+?)?</a>`)
episodeUrlRe = regexp.MustCompile(`<a href="/brand/(.+?)?" class="title`)
@@ -53,6 +52,8 @@ var (
errBadEpisode = fmt.Errorf("bad episode")
errCantParse = fmt.Errorf("could not parse page")
+
+ moscow = time.FixedZone("Moscow Time", int((3 * time.Hour).Seconds()))
)
func main() {
@@ -135,29 +136,41 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) {
episodeUrl := urlPrefix + string(episodeUrlRe.FindSubmatch(episode)[1])
episodeTitle := string(episodeTitleRe.FindSubmatch(episode)[1])
enclosure := findEnclosure(episode)
- dateBytes := episodeDateRe.FindSubmatch(episode)
- var date [5]int
- for i, b := range dateBytes[1:] {
- d, err := strconv.Atoi(string(b))
- if err != nil {
- log.Fatal(err)
- }
- date[i] = d
- }
- moscow := time.FixedZone("Moscow Time", int((3 * time.Hour).Seconds()))
- episodeDate := time.Date(date[2], time.Month(date[1]), date[0], date[3], date[4], 0, 0, moscow)
+ date := findDate(episode)
feed.Add(&feeds.Item{
Id: episodeID(episodeUrl),
Link: &feeds.Link{Href: episodeUrl},
Title: episodeTitle,
Enclosure: enclosure,
- Created: episodeDate,
+ Created: date,
})
}
return nil
}
+func findDate(ep []byte) time.Time {
+ episodeDateRe := regexp.MustCompile(`brand\-time brand\-menu\-link">(.+?)?\.(.+?)?\.(.+?)? в (.+?)?:(.+?)?</a>`)
+ dateBytes := episodeDateRe.FindSubmatch(ep)
+ return parseDate(dateBytes)
+}
+
+func parseDate(bytes [][]byte) time.Time {
+ if len(bytes) < 4 {
+ return time.Date(1970, time.January, 1, 0, 0, 0, 0, moscow)
+ }
+
+ var date [5]int
+ for i, b := range bytes[1:] {
+ d, err := strconv.Atoi(string(b))
+ if err != nil {
+ return time.Date(1970, time.January, 1, 0, 0, 0, 0, moscow)
+ }
+ date[i] = d
+ }
+ return time.Date(date[2], time.Month(date[1]), date[0], date[3], date[4], 0, 0, moscow)
+}
+
func findEnclosure(ep []byte) *feeds.Enclosure {
re := regexp.MustCompile(`data\-type="audio"\s+data\-id="(.+?)?">`)
diff --git a/main_test.go b/main_test.go
index d403753..73dc0c8 100644
--- a/main_test.go
+++ b/main_test.go
@@ -29,6 +29,7 @@ import (
"strings"
"sync"
"testing"
+ "time"
"github.com/gorilla/feeds"
)
@@ -279,3 +280,24 @@ func TestStripLink(t *testing.T) {
}
}
}
+
+func TestParseDate(t *testing.T) {
+ type testval struct {
+ b [][]byte
+ d time.Time
+ }
+
+ var tests = []testval{
+ {[][]byte{[]byte{}, []byte("24"), []byte("11"), []byte(`2019`), []byte("14"), []byte("10")}, time.Date(2019, time.November, 24, 14, 10, 0, 0, moscow)},
+ {[][]byte{[]byte("foo"), []byte("bar"), []byte("baz"), []byte("qux"), []byte("none")}, time.Date(1970, time.January, 1, 0, 0, 0, 0, moscow)},
+ {[][]byte{}, time.Date(1970, time.January, 1, 0, 0, 0, 0, moscow)},
+ }
+
+ for _, test := range tests {
+ got := parseDate(test.b)
+ want := test.d
+ if !got.Equal(want) {
+ t.Error("want:", want, "got:", got)
+ }
+ }
+}