From 587088fc7d93c4e3bb918b97ec2a27f54d6f6db8 Mon Sep 17 00:00:00 2001 From: Evgeny Kuznetsov Date: Tue, 4 Feb 2020 17:06:32 +0300 Subject: fix processing page with upcoming announce --- main.go | 9 +- main_test.go | 50 + testdata/TestFindEpisodes.episodes.59798.golden | 177 +++ testdata/TestFindEpisodes.episodes.63147.golden | 31 + testdata/TestFindEpisodes.episodes.golden | 181 +++ testdata/TestUpdatingFeed.golden | 92 ++ testdata/TestVideoFeed.golden | 16 + testdata/episodes.59798 | 1404 +++++++++++++++++++++++ 8 files changed, 1958 insertions(+), 2 deletions(-) create mode 100644 testdata/TestFindEpisodes.episodes.59798.golden create mode 100644 testdata/TestFindEpisodes.episodes.63147.golden create mode 100644 testdata/TestFindEpisodes.episodes.golden create mode 100644 testdata/TestUpdatingFeed.golden create mode 100644 testdata/episodes.59798 diff --git a/main.go b/main.go index 83a14ef..5d7115b 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,6 @@ var ( programNameRe = regexp.MustCompile(`

(.+?)?

`) programAboutRe = regexp.MustCompile(`(?s)
(.+?)?
`) programImageRe = regexp.MustCompile(`(?s)
(.+?)?`) - episodeRe = regexp.MustCompile(`(?s)
(.+?)?
`) episodeAudioRe = regexp.MustCompile(`data\-id="(.+?)?">`) episodeDateRe = regexp.MustCompile(`brand\-time brand\-menu\-link">(.+?)?\.(.+?)?\.(.+?)? в (.+?)?:(.+?)?`) episodeDescRe = regexp.MustCompile(`

(.+?)?

`) @@ -133,7 +132,7 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) { Title: string(programImage[4]), } - episodes := episodeRe.FindAll(page, -1) + episodes := findEpisodes(page) urlPrefix := episodeURLPrefix(feed.Link.Href) for _, episode := range episodes { @@ -170,6 +169,12 @@ func populateFeed(feed *feeds.Feed, page []byte) (err error) { return nil } +func findEpisodes(page []byte) [][]byte { + episodeRe := regexp.MustCompile(`(?s)
(.+?)?data-id="(.+?)">
`) + episodes := episodeRe.FindAll(page, -1) + return episodes +} + func describeFeed(feed *feeds.Feed, wg *sync.WaitGroup) { defer wg.Done() url := strings.TrimSuffix(feed.Link.Href, "episodes") + "about" diff --git a/main_test.go b/main_test.go index b744537..1c6363b 100644 --- a/main_test.go +++ b/main_test.go @@ -83,6 +83,56 @@ func TestFeed(t *testing.T) { } } +func TestFindEpisodes(t *testing.T) { + var tests = []string{ + "episodes", + "episodes.59798", + "episodes.63147", + } + + for _, test := range tests { + page := helperLoadBytes(t, test) + page = cleanText(page) + + actual := bytes.Join(findEpisodes(page), []byte("\n&&&\n")) + golden := filepath.Join("testdata", t.Name()+"."+test+".golden") + if *update { + writeFile(actual, golden) + } + expected, _ := ioutil.ReadFile(golden) + + if !bytes.Equal(actual, expected) { + t.Fail() + } + } +} + +func TestUpdatingFeed(t *testing.T) { + var page []byte + + feed := &feeds.Feed{ + Link: &feeds.Link{Href: "http://www.radiorus.ru/brand/59798/episodes"}, + } + + page = helperLoadBytes(t, "episodes.59798") + page = cleanText(page) + + if err := populateFeed(feed, page); err != nil { + t.Fatal(err) + } + + actual := createFeed(feed) + golden := filepath.Join("testdata", t.Name()+".golden") + if *update { + writeFile(actual, golden) + } + expected, _ := ioutil.ReadFile(golden) + + if !bytes.Equal(actual, expected) { + t.Fail() + } +} + func TestVideoFeed(t *testing.T) { var page []byte diff --git a/testdata/TestFindEpisodes.episodes.59798.golden b/testdata/TestFindEpisodes.episodes.59798.golden new file mode 100644 index 0000000..601ab8c --- /dev/null +++ b/testdata/TestFindEpisodes.episodes.59798.golden @@ -0,0 +1,177 @@ +
+ + 29.01.2020 в 00:25 + Захарий Палиашвили "Абесалом и Этери" + Подробнее + +
+&&& +
+ + 22.01.2020 в 00:25 + Антонио Вивальди "Геркулес на Термодонте" + Подробнее + + +
+&&& +
+ + 15.01.2020 в 00:25 + Моисей (Мечислав) Вайнберг "Пассажирка" + Подробнее + + +
+&&& +
+ + 08.01.2020 в 00:27 + Николай Римский-Корсаков "Снегурочка" + Подробнее + + +
+&&& +
+ + 01.01.2020 в 00:50 + Вольфганг Амадей Моцарт "Похищение из сераля" + Подробнее + + +
+&&& +
+ + 25.12.2019 в 06:50 + Жан-Жака Руссо "Деревенский колдун" + Подробнее + + +
+&&& +
+ + 18.12.2019 в 06:50 + Джузеппе Верди "Трубадур" + Подробнее + + +
+&&& +
+ + 11.12.2019 в 06:50 + Пётр Чайковский "Мазепа" + Подробнее + + +
+&&& +
+ + 04.12.2019 в 00:25 + Джон Адамс "Цветущее дерево" + Подробнее + + +
+&&& +
+ + 27.11.2019 в 00:25 + Джузеппе Верди "Дон Карлос" + Подробнее + + +
\ No newline at end of file diff --git a/testdata/TestFindEpisodes.episodes.63147.golden b/testdata/TestFindEpisodes.episodes.63147.golden new file mode 100644 index 0000000..37379d4 --- /dev/null +++ b/testdata/TestFindEpisodes.episodes.63147.golden @@ -0,0 +1,31 @@ +
+ + 04.02.2020 в 04:10 + Эфир от 04.02.2020 (04:10) + Подробнее + +
+&&& +
+ + 03.02.2020 в 23:10 + Эфир от 03.02.2020 (23:10) + Подробнее + +
\ No newline at end of file diff --git a/testdata/TestFindEpisodes.episodes.golden b/testdata/TestFindEpisodes.episodes.golden new file mode 100644 index 0000000..e4fa9a3 --- /dev/null +++ b/testdata/TestFindEpisodes.episodes.golden @@ -0,0 +1,181 @@ +
+ + 26.01.2020 в 14:10 + Новые имена 27 + Подробнее + + +
+&&& +
+ + 19.01.2020 в 14:10 + The Cure + Подробнее + + +
+&&& +
+ + 12.01.2020 в 14:10 + Новые песни января + Подробнее + + +
+&&& +
+ + 05.01.2020 в 14:10 + Новогодние притчи + Подробнее + + +
+&&& +
+ + 29.12.2019 в 14:10 + С наступающим! + Подробнее + + +
+&&& +
+ + 22.12.2019 в 14:10 + Рождество + Подробнее + + +
+&&& +
+ + 15.12.2019 в 14:10 + "То да сё # 6" (Сила музыки) + Подробнее + + +
+&&& +
+ + 08.12.2019 в 14:10 + Новые песни декабря + Подробнее + + +
+&&& +
+ + 01.12.2019 в 14:10 + То да сё № 5 + Подробнее + + +
+&&& +
+ + 24.11.2019 в 14:10 + ELO: "Из ниоткуда" 2019 + Подробнее + + +
\ No newline at end of file diff --git a/testdata/TestUpdatingFeed.golden b/testdata/TestUpdatingFeed.golden new file mode 100644 index 0000000..8cbbf32 --- /dev/null +++ b/testdata/TestUpdatingFeed.golden @@ -0,0 +1,92 @@ + + + "Мы очень любим оперу" + http://www.radiorus.ru/brand/59798/episodes + + + https://cdn-st1.rtr-vesti.ru/vh/pictures/xw/183/780/0.jpg + "Мы очень любим оперу" + http://www.radiorus.ru/brand/59798/episodes + + + Захарий Палиашвили "Абесалом и Этери" + http://www.radiorus.ru/brand/59798/episode/2237240 + + + http://www.radiorus.ru/brand/59798/episode/2237240 + Wed, 29 Jan 2020 00:25:00 +0300 + + + Антонио Вивальди "Геркулес на Термодонте" + http://www.radiorus.ru/brand/59798/episode/2237251 + + + http://www.radiorus.ru/brand/59798/episode/2237251 + Wed, 22 Jan 2020 00:25:00 +0300 + + + Моисей (Мечислав) Вайнберг "Пассажирка" + http://www.radiorus.ru/brand/59798/episode/2236450 + + + http://www.radiorus.ru/brand/59798/episode/2236450 + Wed, 15 Jan 2020 00:25:00 +0300 + + + Николай Римский-Корсаков "Снегурочка" + http://www.radiorus.ru/brand/59798/episode/2234127 + + + http://www.radiorus.ru/brand/59798/episode/2234127 + Wed, 08 Jan 2020 00:27:00 +0300 + + + Вольфганг Амадей Моцарт "Похищение из сераля" + http://www.radiorus.ru/brand/59798/episode/2233607 + + + http://www.radiorus.ru/brand/59798/episode/2233607 + Wed, 01 Jan 2020 00:50:00 +0300 + + + Жан-Жака Руссо "Деревенский колдун" + http://www.radiorus.ru/brand/59798/episode/2228317 + + + http://www.radiorus.ru/brand/59798/episode/2228317 + Wed, 25 Dec 2019 06:50:00 +0300 + + + Джузеппе Верди "Трубадур" + http://www.radiorus.ru/brand/59798/episode/2228301 + + + http://www.radiorus.ru/brand/59798/episode/2228301 + Wed, 18 Dec 2019 06:50:00 +0300 + + + Пётр Чайковский "Мазепа" + http://www.radiorus.ru/brand/59798/episode/2228283 + + + http://www.radiorus.ru/brand/59798/episode/2228283 + Wed, 11 Dec 2019 06:50:00 +0300 + + + Джон Адамс "Цветущее дерево" + http://www.radiorus.ru/brand/59798/episode/2224956 + + + http://www.radiorus.ru/brand/59798/episode/2224956 + Wed, 04 Dec 2019 00:25:00 +0300 + + + Джузеппе Верди "Дон Карлос" + http://www.radiorus.ru/brand/59798/episode/2221310 + + + http://www.radiorus.ru/brand/59798/episode/2221310 + Wed, 27 Nov 2019 00:25:00 +0300 + + + \ No newline at end of file diff --git a/testdata/TestVideoFeed.golden b/testdata/TestVideoFeed.golden index cff3c89..11d6bd9 100644 --- a/testdata/TestVideoFeed.golden +++ b/testdata/TestVideoFeed.golden @@ -8,5 +8,21 @@ "Джазовое настроение" http://www.radiorus.ru/brand/63147/episodes + + Эфир от 04.02.2020 (04:10) + http://www.radiorus.ru/brand/63147/episode/2244130 + + + http://www.radiorus.ru/brand/63147/episode/2244130 + Tue, 04 Feb 2020 04:10:00 +0300 + + + Эфир от 03.02.2020 (23:10) + http://www.radiorus.ru/brand/63147/episode/2244008 + + + http://www.radiorus.ru/brand/63147/episode/2244008 + Mon, 03 Feb 2020 23:10:00 +0300 + \ No newline at end of file diff --git a/testdata/episodes.59798 b/testdata/episodes.59798 new file mode 100644 index 0000000..032cc41 --- /dev/null +++ b/testdata/episodes.59798 @@ -0,0 +1,1404 @@ + + + + + Выпуски / "Мы очень любим оперу" / Радиостанция «Радио России» + + + + + + + + + + +
+
+ + + + + +
+7 800 222 999 2
+ + +
+
+ +
+
+ + +
+ +
+ + + + +
+
Выбрать рубрику
+
+ +
+
Выбрать дату +
+
+
+ +
+ + +
+
+
+
+ + + + +
+ + + + + + + +
+ + +
+ + + + + +
+ +
+ +
+ + + + + + + +
+ + + + + + + + +
+
+
+ Показать еще +
+
+
+
+
+
+
+
+ + + +
+
+
+ +
+ + +
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 21:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 03.02.2020 (21:10) +
+

Эфир от 03.02.2020 (21:10)

+

Начало в 21:10 + "Шинель" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

"Это БЫВШАЯ интересно" (Радио России). Эфир от 03.02.2020 (21:35)

+

Начало в 21:35 +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 22:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 03.02.2020 (22:10) +
+

Эфир от 03.02.2020 (22:10)

+

Начало в 22:10 + "Стадион". Спортивная программа +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Джонатан Свифт  "Путешествия Гулливера". Часть 11-я +
+

Джонатан Свифт  "Путешествия Гулливера". Часть 11-я

+

Начало в 22:30 + "Литературный сериал" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 23:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 03.02.2020 (23:10) +
+

Эфир от 03.02.2020 (23:10)

+

Начало в 23:10 + "Джазовое настроение" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 00:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Антон Чехов "Скучная история". Серия 2-я +
+

Антон Чехов "Скучная история". Серия 2-я

+

Начало в 00:10 + "Литературный сериал" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

"Люди и песни"

+

Начало в 00:25 +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 04.02.2020 (00:35) +
+

Эфир от 04.02.2020 (00:35)

+

Начало в 00:35 + Время. События. Люди +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 01:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

"Это интересно"

+

Начало в 01:10 +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Музыкальная программа +
+

Музыкальная программа

+

Начало в 01:35 + Музыкальная программа +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 02:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Этот безумный мир" +
+

"Этот безумный мир"

+

Начало в 02:10 + "Этот безумный мир" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Права женщин и равноправие полов +
+

Права женщин и равноправие полов

+

Начало в 02:25 + "История из истории" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Дина Рубина. Наполеонов обоз. Книга 3. Ангельский рожок. Серия 39-я +
+

Дина Рубина. Наполеонов обоз. Книга 3. Ангельский рожок. Серия 39-я

+

Начало в 02:30 + "Литературный сериал" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 03:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Бен Элтон "Время и снова время". Серия 15-я +
+

Бен Элтон "Время и снова время". Серия 15-я

+

Начало в 03:10 + "Литературный сериал" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Музыкальная программа +
+

Музыкальная программа

+

Начало в 03:35 + Музыкальная программа +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 04:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 04.02.2020 (04:10) +
+

Эфир от 04.02.2020 (04:10)

+

Начало в 04:10 + "Джазовое настроение" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 05:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Джонатан Свифт  "Путешествия Гулливера". Часть 12-я +
+

Джонатан Свифт  "Путешествия Гулливера". Часть 12-я

+

Начало в 05:10 + "Литературный сериал" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 04.02.2020 (05:35) +
+

Эфир от 04.02.2020 (05:35)

+

Начало в 05:35 + "Голоса и звуки Земли" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 06:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Этот безумный мир" +
+

"Этот безумный мир"

+

Начало в 06:10 + "Этот безумный мир" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Росконтроль проверил популярные бренды куриных яиц +
+

Росконтроль проверил популярные бренды куриных яиц

+

Начало в 06:25 + "Обрати внимание" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Адыгейский сыр: пальмовое масло доплыло до Адыгеи +
+

Адыгейский сыр: пальмовое масло доплыло до Адыгеи

+

Начало в 06:30 + "Обрати внимание" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

"Это БЫВШАЯ интересно" (Радио России). Эфир от 04.02.2020 (06:35)

+

Начало в 06:35 +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Скажи мне что-нибудь, и я скажу, кто ты... +
+

Скажи мне что-нибудь, и я скажу, кто ты...

+

Начало в 06:50 + "С русского на русский" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 07:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Утренние новости +
+

Утренние новости

+

Начало в 07:10 + "Сигналы точного времени" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Очистить смартфоны для российских приложений! +
+

Очистить смартфоны для российских приложений!

+

Начало в 07:30 + "Сигналы точного времени" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Долги россиян за 10 лет выросли в 6 раз +
+

Долги россиян за 10 лет выросли в 6 раз

+

Начало в 07:45 + "Сигналы точного времени" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ "Вести" +
+

"Вести"

+

Начало в 08:00 + "Вести" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Эфир от 04.02.2020 (08:10) +
+

Эфир от 04.02.2020 (08:10)

+

Начало в 08:10 + "Сигналы точного времени" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+ Рошаль оценил качество медпомощи в школах на "троечку с минусом" +
+

Рошаль оценил качество медпомощи в школах на "троечку с минусом"

+

Начало в 08:35 + "Сигналы точного времени" +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
Прямой эфир
+
+
+
+
Радио России
+
Радио России FM
+
+
+ +
+
+

Программа

+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3