diff options
author | Evgeny Kuznetsov <evgeny@kuznetsov.md> | 2022-04-29 17:57:45 +0300 |
---|---|---|
committer | Evgeny Kuznetsov <evgeny@kuznetsov.md> | 2022-04-29 17:57:45 +0300 |
commit | c6abeb08768566dcdac5b9adb57207814472d8f5 (patch) | |
tree | ea39d231e1bb4d3eaccbc9ebaecc3b1cfabacb96 | |
parent | 0230ce2283f0c8ff21398bd9e42d39fa0d4213fe (diff) | |
download | radiorus-rss-c6abeb08768566dcdac5b9adb57207814472d8f5.tar.gz radiorus-rss-c6abeb08768566dcdac5b9adb57207814472d8f5.zip |
don't die on smotrim.ru redirects
-rw-r--r-- | main.go | 162 | ||||
-rw-r--r-- | main_test.go | 60 | ||||
-rw-r--r-- | testdata/TestPopulateFeed.golden | 152 | ||||
-rw-r--r-- | testdata/smotrim.57083 | 1824 |
4 files changed, 2169 insertions, 29 deletions
@@ -22,6 +22,7 @@ import ( "io/ioutil" "log" "net/http" + "net/url" "regexp" "strconv" "strings" @@ -77,8 +78,10 @@ func processURL(url string) *feeds.Feed { feed := getFeed(url) var wg sync.WaitGroup - wg.Add(1) - go describeFeed(feed, &wg) + if feed.Description == "" { + wg.Add(1) + go describeFeed(feed, &wg) + } describeEpisodes(feed) wg.Wait() @@ -100,11 +103,11 @@ func writeFile(output []byte, filename string) { } func getFeed(url string) (feed *feeds.Feed) { + page, url := getPage(url) feed = &feeds.Feed{ Link: &feeds.Link{Href: url}, } - page := getPage(url) if err := populateFeed(feed, page); err != nil { err = fmt.Errorf("could not process %v: %w", url, err) log.Fatal(err) @@ -114,43 +117,121 @@ func getFeed(url string) (feed *feeds.Feed) { } func populateFeed(feed *feeds.Feed, page []byte) (err error) { - title, err := parseSingle(page, programNameRe) + feed.Title, err = parseText(page, ".brand-main-item__title") + if feed.Title == "" { + feed.Title, err = parseProgrammeTitle(page) + } + if err != nil { return fmt.Errorf("bad programme page: title not found") } - feed.Title = stripLink(string(title)) - addFeedImage(page, feed) + feed.Description, _ = parseText(page, ".program-about__text") - episodes := findEpisodes(page) - urlPrefix := episodeURLPrefix(feed.Link.Href) + addFeedImage(page, feed) - for _, episode := range episodes { - if len(episodeUrlRe.FindAllSubmatch(episode, -1)) > 1 { - return errBadEpisode + switch site := parseSite(feed); site { + case "smotrim.ru": + err = populateSmotrimEpisodes(feed, page) + default: + episodes := findEpisodes(page) + urlPrefix := episodeURLPrefix(feed.Link.Href) + + for _, episode := range episodes { + if len(episodeUrlRe.FindAllSubmatch(episode, -1)) > 1 { + return errBadEpisode + } + url, err := parseSingle(episode, episodeUrlRe) + if err != nil { + return errBadEpisode + } + episodeUrl := urlPrefix + string(url) + title, _ := parseSingle(episode, episodeTitleRe) + episodeTitle := string(title) + enclosure := findEnclosure(episode) + date := findDate(episode) + + feed.Add(&feeds.Item{ + Id: episodeID(episodeUrl), + Link: &feeds.Link{Href: episodeUrl}, + Title: episodeTitle, + Enclosure: enclosure, + Created: date, + }) } - url, err := parseSingle(episode, episodeUrlRe) + } + return +} + +func populateSmotrimEpisodes(feed *feeds.Feed, page []byte) (err error) { + doc, err := goquery.NewDocumentFromReader(bytes.NewReader(page)) + if err != nil { + return + } + base, err := url.Parse(feed.Link.Href) + if err != nil { + return + } + doc.Find(".episode-card").Each(func(i int, s *goquery.Selection) { + l, _ := s.Find(".episode-card__link").Attr("href") + id := strings.TrimPrefix(l, "/audio/") + link, err := base.Parse(l) if err != nil { - return errBadEpisode + return } - episodeUrl := urlPrefix + string(url) - title, _ := parseSingle(episode, episodeTitleRe) - episodeTitle := string(title) - enclosure := findEnclosure(episode) - date := findDate(episode) - + title := strings.TrimSpace(strings.TrimPrefix(s.Find(".episode-card__title").Text(), s.Find(".episode-card__title__brand").Text())) feed.Add(&feeds.Item{ - Id: episodeID(episodeUrl), - Link: &feeds.Link{Href: episodeUrl}, - Title: episodeTitle, - Enclosure: enclosure, - Created: date, + Id: id, + Link: &feeds.Link{Href: link.String()}, + Title: title, + Enclosure: enclosure(id), }) + }) + return +} + +func parseSite(feed *feeds.Feed) string { + u, err := url.Parse(feed.Link.Href) + if err != nil { + return "" + } + return u.Hostname() +} + +func parseProgrammeTitle(page []byte) (title string, err error) { + t, err := parseSingle(page, programNameRe) + if err != nil { + return } + title = stripLink(string(t)) + return +} + +func parseText(page []byte, sel string) (title string, err error) { + doc, err := goquery.NewDocumentFromReader(bytes.NewReader(page)) + if err != nil { + return + } + title = strings.TrimSpace(doc.Find(sel).Text()) return } func addFeedImage(page []byte, feed *feeds.Feed) { + doc, err := goquery.NewDocumentFromReader(bytes.NewReader(page)) + if err != nil { + return + } + img := doc.Find(".brand-main-item__picture").Find("img") + if src, ok := img.Attr("src"); ok { + t, _ := img.Attr("title") + feed.Image = &feeds.Image{ + Link: feed.Link.Href, + Url: src, + Title: t, + } + return + } + programImage, err := parse(page, programImageRe, 4) if err == nil { feed.Image = &feeds.Image{ @@ -209,7 +290,12 @@ func findEnclosure(ep []byte) *feeds.Enclosure { return &feeds.Enclosure{} } - url := "https://audio.vgtrk.com/download?id=" + string(res) + return enclosure(string(res)) +} + +func enclosure(no string) *feeds.Enclosure { + + url := "https://audio.vgtrk.com/download?id=" + string(no) return &feeds.Enclosure{ Url: url, @@ -227,7 +313,7 @@ func findEpisodes(page []byte) [][]byte { func describeFeed(feed *feeds.Feed, wg *sync.WaitGroup) { defer wg.Done() url := strings.TrimSuffix(feed.Link.Href, "episodes") + "about" - page := getPage(url) + page, _ := getPage(url) desc, err := processFeedDesc(page) if err != nil { log.Printf("could not find programme description on page %v: %v", url, err) @@ -255,12 +341,29 @@ func describeEpisodes(feed *feeds.Feed) { func describeEpisode(item *feeds.Item, wg *sync.WaitGroup) { defer wg.Done() - page := getPage(item.Link.Href) + page, _ := getPage(item.Link.Href) desc, err := processEpisodeDesc(page) if err != nil { log.Printf("could not find episode description on page %v: %v", item.Link.Href, err) } item.Description = desc + if item.Created.IsZero() { + item.Created = parseSmotrimDate(page) + } +} + +func parseSmotrimDate(page []byte) (t time.Time) { + s, err := parseText(page, ".video__date") + if err != nil { + return + } + mnths := [12]string{"января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"} + for i, mnt := range mnths { + s = strings.ReplaceAll(s, mnt, strconv.Itoa(i+1)) + } + s = fmt.Sprintf("%s z+03", s) + t, _ = time.Parse("2 1 2006, 15:04 z-07", s) + return } func processEpisodeDesc(page []byte) (string, error) { @@ -271,6 +374,7 @@ func processEpisodeDesc(page []byte) (string, error) { var r []string r = addText(r, doc.Find(".brand-episode__head").Find(".anons").Text()) r = addText(r, doc.Find(".brand-episode__body").Find(".body").Text()) + r = addText(r, strings.TrimSpace(doc.Find(".video__body").Text())) res := strings.Join(r, "\n\n") if res == "" { @@ -286,7 +390,7 @@ func addText(arr []string, str string) []string { return arr } -func getPage(pageUrl string) []byte { +func getPage(pageUrl string) ([]byte, string) { client := &http.Client{} req, err := http.NewRequest("GET", pageUrl, nil) if err != nil { @@ -305,7 +409,7 @@ func getPage(pageUrl string) []byte { page = cleanText(page) - return page + return page, res.Request.URL.String() } // cleanText replaces HTML-encoded symbols with proper UTF diff --git a/main_test.go b/main_test.go index 6c5c172..82dc506 100644 --- a/main_test.go +++ b/main_test.go @@ -166,6 +166,25 @@ func TestUpdatingFeed(t *testing.T) { assertGolden(t, actual, golden) } +func TestPopulateFeed(t *testing.T) { + var page []byte + + feed := &feeds.Feed{ + Link: &feeds.Link{Href: "https://smotrim.ru/brand/57083"}, + } + + page = helperLoadBytes(t, "smotrim.57083") + page = cleanText(page) + + if err := populateFeed(feed, page); err != nil { + t.Fatal(err) + } + + actual := createFeed(feed) + golden := filepath.Join("testdata", t.Name()+".golden") + assertGolden(t, actual, golden) +} + func TestMissingEpisode(t *testing.T) { server := helperMockServer(t) defer helperCleanupServer(t) @@ -245,6 +264,47 @@ func BenchmarkServedFeed(b *testing.B) { } } +func TestGetFeed(t *testing.T) { + radiorus := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + page := helperLoadBytes(t, "episodes") + _, _ = w.Write(page) + })) + defer radiorus.Close() + + smotrim := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + page := helperLoadBytes(t, "smotrim.57083") + _, _ = w.Write(page) + })) + defer smotrim.Close() + + redir := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Redirect(w, r, smotrim.URL, 301) + })) + defer redir.Close() + + tests := map[string]struct { + url string + want string + desc bool + }{ + "radiorus": {radiorus.URL, radiorus.URL, false}, + "smotrim": {redir.URL, smotrim.URL, true}, + } + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + feed := getFeed(tc.url) + if tc.want != feed.Link.Href { + t.Fatalf("\nwant %s, got %s", tc.want, feed.Link.Href) + } + ne := feed.Description != "" + if ne != tc.desc { + t.Fatalf("\nwant %v, got %v", tc.desc, ne) + } + }) + } +} + func helperMockServer(t testing.TB) *httptest.Server { t.Helper() diff --git a/testdata/TestPopulateFeed.golden b/testdata/TestPopulateFeed.golden new file mode 100644 index 0000000..221c9fe --- /dev/null +++ b/testdata/TestPopulateFeed.golden @@ -0,0 +1,152 @@ +<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"> + <channel> + <title>Аэростат</title> + <link>https://smotrim.ru/brand/57083</link> + <description>Вы не можете быть до конца уверены, что на этот раз вам откроет БГ – будь то взгляд на группу Doors или столь глобальные вопросы, как: что такое новое время, как делится история мира в соответствии с древней индийской космогонией, стоит ли ждать ветра перемен, ждет ли нас духовное возрождение, где граница между прошлым и будущим. А может и вовсе не стоит искать ответы на эти вопросы? Потому что это не те вопросы, а потому и ответы не приведут вас к истине...

Прислушаемся к Борису Гребенщикову, который с улыбкой говорит всем нам "Здравствуйте!" и находит самые простые ответы...</description> + <image> + <url>https://cdnapi.smotrim.ru/api/v1/pictures/1246171/mw/redirect</url> + <title>Аэростат</title> + <link>https://smotrim.ru/brand/57083</link> + </image> + <item> + <title>Выпуск 884. Ответы на Вопросы</title> + <link>https://smotrim.ru/audio/2628425</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2628425" length="1024" type="audio/mpeg"></enclosure> + <guid>2628425</guid> + </item> + <item> + <title>Выпуск 883. Judy Collins Wildflowers</title> + <link>https://smotrim.ru/audio/2627161</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2627161" length="1024" type="audio/mpeg"></enclosure> + <guid>2627161</guid> + </item> + <item> + <title>Выпуск 882. Новое То да Сё</title> + <link>https://smotrim.ru/audio/2625692</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2625692" length="1024" type="audio/mpeg"></enclosure> + <guid>2625692</guid> + </item> + <item> + <title>Выпуск 881. Новые Песни Апреля</title> + <link>https://smotrim.ru/audio/2624678</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2624678" length="1024" type="audio/mpeg"></enclosure> + <guid>2624678</guid> + </item> + <item> + <title>Выпуск 880. Что такое концерт</title> + <link>https://smotrim.ru/audio/2623811</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2623811" length="1024" type="audio/mpeg"></enclosure> + <guid>2623811</guid> + </item> + <item> + <title>Выпуск 879. То да Сё № 22</title> + <link>https://smotrim.ru/audio/2622374</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2622374" length="1024" type="audio/mpeg"></enclosure> + <guid>2622374</guid> + </item> + <item> + <title>Выпуск 878. Целительная сила музыки</title> + <link>https://smotrim.ru/audio/2621443</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2621443" length="1024" type="audio/mpeg"></enclosure> + <guid>2621443</guid> + </item> + <item> + <title>Выпуск 877. Новые Песни Марта</title> + <link>https://smotrim.ru/audio/2619992</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2619992" length="1024" type="audio/mpeg"></enclosure> + <guid>2619992</guid> + </item> + <item> + <title>Выпуск 876. Шаманизм</title> + <link>https://smotrim.ru/audio/2618401</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2618401" length="1024" type="audio/mpeg"></enclosure> + <guid>2618401</guid> + </item> + <item> + <title>Выпуск 875. Новые Имена</title> + <link>https://smotrim.ru/audio/2617736</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2617736" length="1024" type="audio/mpeg"></enclosure> + <guid>2617736</guid> + </item> + <item> + <title>Выпуск 874. То да сё № 21</title> + <link>https://smotrim.ru/audio/2615992</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2615992" length="1024" type="audio/mpeg"></enclosure> + <guid>2615992</guid> + </item> + <item> + <title>Выпуск 873. Новые Песни Февраля</title> + <link>https://smotrim.ru/audio/2614575</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2614575" length="1024" type="audio/mpeg"></enclosure> + <guid>2614575</guid> + </item> + <item> + <title>Выпуск 872. Имболк: Романтизм</title> + <link>https://smotrim.ru/audio/2613623</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2613623" length="1024" type="audio/mpeg"></enclosure> + <guid>2613623</guid> + </item> + <item> + <title>Выпуск 871. Кто Есть Кто?</title> + <link>https://smotrim.ru/audio/2611838</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2611838" length="1024" type="audio/mpeg"></enclosure> + <guid>2611838</guid> + </item> + <item> + <title>Выпуск 870. То и Сё № 20</title> + <link>https://smotrim.ru/audio/2610401</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2610401" length="1024" type="audio/mpeg"></enclosure> + <guid>2610401</guid> + </item> + <item> + <title>Выпуск 869. Новые Песни Января</title> + <link>https://smotrim.ru/audio/2607924</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2607924" length="1024" type="audio/mpeg"></enclosure> + <guid>2607924</guid> + </item> + <item> + <title>Выпуск 868. Новогодние притчи</title> + <link>https://smotrim.ru/audio/2607923</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2607923" length="1024" type="audio/mpeg"></enclosure> + <guid>2607923</guid> + </item> + <item> + <title>Выпуск 867. Предновогодняя</title> + <link>https://smotrim.ru/audio/2606839</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2606839" length="1024" type="audio/mpeg"></enclosure> + <guid>2606839</guid> + </item> + <item> + <title>Выпуск 866. Роберт Плант и Элисон Краусс</title> + <link>https://smotrim.ru/audio/2605330</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2605330" length="1024" type="audio/mpeg"></enclosure> + <guid>2605330</guid> + </item> + <item> + <title>Выпуск 865. 8 Наблюдений</title> + <link>https://smotrim.ru/audio/2603883</link> + <description></description> + <enclosure url="https://audio.vgtrk.com/download?id=2603883" length="1024" type="audio/mpeg"></enclosure> + <guid>2603883</guid> + </item> + </channel> +</rss>
\ No newline at end of file diff --git a/testdata/smotrim.57083 b/testdata/smotrim.57083 new file mode 100644 index 0000000..82e63c8 --- /dev/null +++ b/testdata/smotrim.57083 @@ -0,0 +1,1824 @@ +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, viewport-fit=cover"> + + <title>Аэростат, радио, программа, слушать онлайн // Смотрим</title> + + <meta name="description" content="Аэростат, радио, слушать онлайн, на Смотрим, культура"> +<meta name="keywords" content="Аэростат, радио, программа, онлайн, музыка, Борис Гребенщиков, размышления, культура, искусство"> +<meta property="canonical" content="https://smotrim.ru/brand/57083"> + <link rel="amphtml" href="https://smotrim.ru/amp/brand/57083"> + + +<meta property="og:site_name" content="smotrim.ru"> +<meta property="og:type" content="website"> +<meta property="og:url" content="https://smotrim.ru/brand/57083"> +<meta property="og:image" content="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/xw/redirect"> + + + <meta property="og:title" content="Аэростат"> + + <meta property="og:description" content="Программа Бориса Гребенщикова "Аэростат" посвящена истории рок-музыки. Спокойный и ненавязчивый рассказ БГ субъективен, но именно это придает ему особую ценность..."> + + +<meta name="twitter:card" content="summary_large_image"> +<meta property="twitter:url" content="https://smotrim.ru/brand/57083"> +<meta name="twitter:image" content="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/xw/redirect"> + + <meta name="twitter:title" content="Аэростат"> + + <meta name="twitter:description" content="Программа Бориса Гребенщикова "Аэростат" посвящена истории рок-музыки. Спокойный и ненавязчивый рассказ БГ субъективен, но именно это придает ему особую ценность..."> + + <script type="application/ld+json"> + { + "@context": "http://schema.org", + "@type": "TVSeries", + "name": "Аэростат", + "mainEntityOfPage": { + "@type": "WebPage", + "@id": "https://smotrim.ru/brand/57083" + }, + "image": { + "@type": "ImageObject", + "url": "https://cdnapi.smotrim.ru/api/v1/pictures/1246171/hd/redirect", + "height": 1080, + "width": 1920 + }, + "publisher": { + "@type": "Organization", + "name": "Смотрим", + "logo": { + "@type": "ImageObject", + "url": "https://smotrim.ru/i/smotrim_logo_soc_new.png", + "height": 512, + "width": 512 + } + }, + "description": "Программа Бориса Гребенщикова \"Аэростат\" посвящена истории рок-музыки. Спокойный и ненавязчивый рассказ БГ субъективен, но именно это придает ему особую ценность..." +} + </script> + + + + + + + + + + + + + + + + + + + + + + + <link rel="apple-touch-icon" sizes="57x57" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-57x57.png"> + <link rel="apple-touch-icon" sizes="72x72" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-72x72.png"> + <link rel="apple-touch-icon" sizes="76x76" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-76x76.png"> + <link rel="apple-touch-icon" sizes="114x114" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-114x114.png"> + <link rel="apple-touch-icon" sizes="120x120" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-120x120.png"> + <link rel="apple-touch-icon" sizes="144x144" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-144x144.png"> + <link rel="apple-touch-icon" sizes="152x152" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-152x152.png"> + <link rel="apple-touch-icon" sizes="180x180" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/apple-touch-icon-180x180.png"> + + <link rel="icon" type="image/png" sizes="32x32" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/favicon-32x32.png?v=1"> + <link rel="icon" type="image/png" sizes="16x16" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/favicon-16x16.png?v=1"> + <link rel="icon" href="https://cdnmg-st.smotrim.ru/smotrimru/i/favicon/favicon.ico" type="image/x-icon"> + + <link rel="manifest" href="https://cdnmg-st.smotrim.ru/smotrimru/js/manifest.json"> + <meta name="msapplication-TileColor" content="#ffffff"> + <meta name="theme-color" content="#ffffff"> + + + <link rel="stylesheet" href="https://cdnmg-st.smotrim.ru/smotrimru/css/smotrim_71.css?v=1650990624"> + + <!-- Adv slot 292 [ --> +
+
+
+
+
+
+ <script>window.yaContextCb = window.yaContextCb || []</script>
+<script src="https://yandex.ru/ads/system/context.js" async></script>
+
+
+
+
+ + <!-- ] Adv slot 292 --> + + <script> + window.sm = window.sm || {}; + window.sm.highload = false; + </script> + + <!-- header misc code --> +<meta name="yandex-verification" content="947693d7e236def8" /> +<meta name="yandex-verification" content="0c599b7aa3d1f8d2" /> + +<meta name="no-splash" content="/article/2662578,/brand/67430" /> + +<script src="https://assets.vgtrk.com/uid/latest/uid.js?v=11" type="text/javascript"></script> +<style> +.app__main .theme--section { + padding-top: 47px; +} +.app--page-live .tvp-pop-up__picture img { +height: auto; +} +</style> +<!-- End header misc code --> + + + + <script type="text/javascript" src="/js/piwik.js"></script> + + <script type="text/javascript" src="//code.jquery.com/jquery-1.11.3.min.js"></script> + </head> + <body class="app app--scheme-black app--page-brand"> + + <section id="top-slot"> + <div class="slot slot--before-header"> + <!-- Adv slot 293 [ --> +
+
+
+
+
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: _Смотрим / Тест / перетяжка в шапке | desktop-->
+<!--Категория: <не задана>-->
+<!--Тип баннера: 1000x90-->
+<div id="adfox_159706077566131331"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.createAdaptive({
+ ownerId: 166267,
+ containerId: 'adfox_159706077566131331',
+ params: {
+ p1: 'clvim',
+ p2: 'eroq',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ },
+ onLoad: function(data) {
+ var event = new Event('slot.top.load');
+
+ window.dispatchEvent(event);
+ },
+ onRender: function() {
+ var event = new Event('slot.top.render');
+
+ window.dispatchEvent(event);
+ },
+ onError: function(error) {
+ var event = new Event('slot.top.error');
+
+ window.dispatchEvent(event);
+ },
+ onStub: function() {
+ var event = new Event('slot.top.stub');
+
+ window.dispatchEvent(event);
+ }
+ }, [ 'desktop' ], {
+ tabletWidth: 1024,
+ phoneWidth: 736,
+ isAutoReloads: false
+ })
+})
+</script>
+<style>
+
+ .slot {
+ width: 100%;
+ }
+
+
+</style>
+
+
+
+
+
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: smotrim.ru / * / *-->
+<!--Тип баннера: 1x1_R-->
+<!--Расположение: <верх страницы>-->
+<div id="adfox_160892056771289736"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.create({
+ ownerId: 166267,
+ containerId: 'adfox_160892056771289736',
+ params: {
+ pp: 'g',
+ ps: 'egyd',
+ p2: 'gbcy',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ }
+ })
+})
+</script>
+
+
+
+
+
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: smotrim.ru / Главная/весь сайт / 1х1_2-->
+<!--Категория: <не задана>-->
+<!--Тип баннера: 1x1_R-->
+<div id="adfox_162513991204161174"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.create({
+ ownerId: 166267,
+ containerId: 'adfox_162513991204161174',
+ params: {
+ p1: 'cqabr',
+ p2: 'gbcy',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ }
+ })
+ })
+</script>
+
+
+
+
+ + <!-- ] Adv slot 293 --> + </div> + </section> + + <main id="reloadable" class="app__holder"> + <section class="app__main"> + <header class="header"> + <div class="header__logo"> + <a class="header__link" href="/"></a> + </div> + <div class="header__content"> + <div class="header__wrapper"> + <div class="header__navigation"> + <div class="navigation"> + <div class="navigation__control"></div> + <div class="navigation__content"> + <ul class="navigation__list"> + <li class="navigation__item"> + <a class="navigation__link" href="/?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Главное + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/vesti?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Вести + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/cinema?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Кино и шоу + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/radio?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Слушаем + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/channels?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Эфир + </a> + </li> + <li class="navigation__item navigation__special"> + <a class="navigation__link" href="/pick/special-donbass">Специальная военная операция</a> + </li> + </ul> + </div> +</div> + </div> + <div class="header__search"> + <div class="search-form"> + <div class="search-form__control"> + <a class="search-form__button search-form__button--show" href="#show-search-form">Найти</a> + </div> + <div class="search-form__content"> + <form class="search-form__form" method="get" action="/search" autocomplete="off"> + <input class="search-form__query" type="text" value="" placeholder="Найти" name="q"> + <input class="search-form__button search-form__button--clear" type="reset" value="Отчистить"> + <input class="search-form__button search-form__button--submit" type="submit" value="Найти"> + </form> + <div class="search-form__autocomplete"> + + <div class="autocomplete"> + <ul class="autocomplete__list"> + + </ul> + <div class="autocomplete__control"> + <a class="autocomplete__submit" href="/search">Показать все результаты</a> + </div> + </div> + + </div> + </div> + </div> + </div> + <div class="header__geo"> + <div class="geo"> + <div class="geo__inner"> + <div class="geo__icon"> + </div> + <div class="geo__info"></div> + </div> + <div class="dialog dialog-geo"> + <div class="dialog__container"> + <form class="form"> + <div class="dialog__title">Выберите регион</div> + <div class="dialog__content"> + <ul class="list"> + <li class="list__item"> + <input type="text" class="form-input geo-title"> + <div class="dropdown geo-list"> + <div class="dropdown__item">Нижний Новгород</div> + <div class="dropdown__item">Нижний Тагил</div> + <div class="dropdown__item">Нижневартовск</div> + <div class="dropdown__item">Нижнекамск</div> + <div class="dropdown__item">Нижнее Хваршини</div> + <div class="dropdown__item">Нижнее Ишкарты</div> + <div class="dropdown__item">Нижнеидрисово</div> + <div class="dropdown__item">Нижнее Солотвино</div> + </div> + </li> + <li class="list__item"> + <label for="auto">Определять автоматически</label> + <div class="roller"> + <input type="checkbox" id="auto" checked> + <label class="roller__label" for="auto"></label> + </div> + </li> + </ul> + </div> + <div class="dialog__bottom"> + <button class="btn">смотрим</button> + </div> + </form> + </div> +</div> +</div> + </div> + + + + <div class="header__profile"> + <div class="profile"> + <div class="profile__control"> + <span class="profile__link profile__link--favorites"></span> + <a class="profile__link profile__link--user profile__link--notlogged" href="/personal/login?redirect=%2Fbrand%2F57083"> + </a> +<script> + window.isLogged = false; +</script> + </div> + <div class="profile__content"></div> + </div> + </div> + <div class="header__social-groups"> + <div class="social-groups"> + <div class="social-groups__content"> + <ul class="social-groups__list"> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--odnoklassniki" + href="https://ok.ru/group/68835016835126" + target="_blank" + ></a> + </li> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--yzen" + href="https://zen.yandex.ru/smotrimru" + target="_blank" + ></a> + </li> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--telegram" + href="https://t.me/smotrim_ru" + target="_blank" + ></a> + </li> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--tiktok" + href="https://www.tiktok.com/@smotrimru" + target="_blank" + ></a> + </li> + </ul> + </div> +</div> + </div> + <div class="header__store"> + <div class="store"> + <div class="store__preview"></div> + <div class="store__content"> + <h2 class="store__title">Смотрим на</h2> + <ul class="store__list"> + <li class="store__item"> + <a class="store__link" href="https://apps.apple.com/us/app/смотрим-сериалы-кино-и-шоу/id1526501534?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-apps" target="_blank"> + iOS + </a> + </li> + <li class="store__item"> + <a class="store__link" href="https://play.google.com/store/apps/details?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-apps&id=com.vgtrk.smotrim" target="_blank"> + Android + </a> + </li> + </ul> + </div> +</div> + </div> + <div class="header__close"> + <a class="header__button" href="#hide-menu"></a> + </div> + </div> + </div> + <div class="header__mobile-search"> + <a class="header__button" href="#show-search-form"></a> + </div> + <div class="header__burger"> + <a class="header__button" href="#show-menu"></a> + </div> +</header> + + + <section class="brand-main-item"> + <div class="brand-main-item__preview"> + <picture class="brand-main-item__picture"> + <source type="image/jpeg" media="(min-width: 1920px)" srcset="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/hd/redirect 1x, https://cdnapi.smotrim.ru/api/v1/pictures/1246171/dk/redirect 2x"/> + <source type="image/jpeg" media="(min-width: 1280px)" srcset="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/hdr/redirect 1x, https://cdnapi.smotrim.ru/api/v1/pictures/1246171/hd/redirect 2x"/> + <source type="image/jpeg" media="(min-width: 720px)" srcset="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/xw/redirect 1x, https://cdnapi.smotrim.ru/api/v1/pictures/1246171/hdr/redirect 2x"/> + <source type="image/jpeg" media="(min-width: 426px)" srcset="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/lw/redirect 1x, https://cdnapi.smotrim.ru/api/v1/pictures/1246171/xw/redirect 2x"/> + <source type="image/jpeg" media="(max-width: 425px)" srcset="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/vm/redirect 1x, https://cdnapi.smotrim.ru/api/v1/pictures/1246171/vhdr/redirect 2x"/> + <img alt="Аэростат" title="Аэростат" src="https://cdnapi.smotrim.ru/api/v1/pictures/1246171/mw/redirect"/> + </picture> + <script> + + let mainImg = document.querySelector(".brand-main-item__picture > img"); + let mainImgSrc = document.querySelectorAll(".brand-main-item__picture > source"); + mainImg.onerror = function() { + mainImgSrc.forEach(function(item) { + item.setAttribute("srcset", "https://cdnapi.smotrim.ru/api/v1/pictures/1246171/xw/redirect"); + }); + } + </script> + + + <a class="brand-main-item__link" href="/audio/2628425" title="Выпуск 884. Ответы на Вопросы"></a> + + </div> + <div class="brand-main-item__info"> + <div class="brand-main-item__description"> + <div class="brand-main-item__type"> + Программа + </div> + <h1 class="brand-main-item__title"> + Аэростат + </h1> + <div class="brand-main-item__production"> + <span class="brand-main-item__age-restriction">0+</span> + </div> + </div> + + <div class="brand-main-item__social"> + <div class="brand-main-item__bookmark"> + <a class="profile-bookmark" + href="#add-to-favorites" + data-id="57083" + data-type="brand" + data-category="brands" + data-title="Аэростат" + data-subtitle="" + data-picture="1246171" + data-position="0" + data-duration="0" + data-published="" + data-recorded="" + data-created="" + data-modified="" + data-client="web" + > + </a> + </div> + </div> + </div> +</section> + + + + + + + + + + <section class="audio"> + + <header class="audio__header"> + <h2 class="audio__title"> + <a href="/audio/2628425"> + Слушаем + </a> + </h2> + </header> + + <div class="audio__content"> + <div class="audio__slider"> + <ul class="audio__list"> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2628425"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 884. Ответы на Вопросы + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2627161"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 883. Judy Collins Wildflowers + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2625692"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 882. Новое То да Сё + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2624678"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 881. Новые Песни Апреля + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2623811"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 880. Что такое концерт + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2622374"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 879. То да Сё № 22 + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2621443"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 878. Целительная сила музыки + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2619992"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 877. Новые Песни Марта + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2618401"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 876. Шаманизм + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2617736"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 875. Новые Имена + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2615992"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 874. То да сё № 21 + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2614575"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 873. Новые Песни Февраля + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2613623"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 872. Имболк: Романтизм + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2611838"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 871. Кто Есть Кто? + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2610401"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 870. То и Сё № 20 + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2607924"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 869. Новые Песни Января + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2607923"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 868. Новогодние притчи + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2606839"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 867. Предновогодняя + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2605330"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 866. Роберт Плант и Элисон Краусс + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + <li class="audio__item"> + + <div class="episode-card"> + <div class="episode-card__box"> + <a class="episode-card__link" href="/audio/2603883"></a> + <div class="episode-card__info"> + <h3 class="episode-card__title episode-card__title__brand"> + <span> + Аэростат + </span> + </h3> + <h3 class="episode-card__title"> + <span> + Выпуск 865. 8 Наблюдений + </span> + </h3> + + + + <div class="episode-card__icon"></div> + <div class="episode-card__duration"> + 46:01 + </div> + </div> + </div> + </div> + + </li> + </ul> + </div> + + <div class="audio__navigation"> + <a class="audio__button audio__button--prev" href="#prev"></a> + <a class="audio__button audio__button--next" href="#next"></a> + </div> + </div> + + </section> + <div class="section program-about"> + <div class="section__top"> + <div class="section__title">О программе</div> + </div> + <div class="section__content program-about__text"> + <p>Вы не можете быть до конца уверены, что на этот раз вам откроет БГ – будь то взгляд на группу Doors или столь глобальные вопросы, как: что такое новое время, как делится история мира в соответствии с древней индийской космогонией, стоит ли ждать ветра перемен, ждет ли нас духовное возрождение, где граница между прошлым и будущим. А может и вовсе не стоит искать ответы на эти вопросы? Потому что это не те вопросы, а потому и ответы не приведут вас к истине...</p>
+
+<p>Прислушаемся к Борису Гребенщикову, который с улыбкой говорит всем нам "Здравствуйте!" и находит самые простые ответы...</p> + </div> +</div> + <div class="slot slot--default"> + <!-- Adv slot 310 [ --> +
+
+
+
+
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: smotrim.ru / Вести / inpage-->
+<!--Категория: <не задана>-->
+<!--Тип баннера: Inpage combo-->
+<div id="adfox_16088855316344568"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.createAdaptive({
+ ownerId: 166267,
+ containerId: 'adfox_16088855316344568',
+ params: {
+ p1: 'cnuli',
+ p2: 'gyer',
+ insertAfter: 'p',
+ insertPosition: '1',
+ stick: false,
+ stickTo: 'auto',
+ stickyColorScheme: 'light',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ }
+ }, ['desktop'], {
+ tabletWidth: 1024,
+ phoneWidth: 736,
+ isAutoReloads: false
+ })
+ })
+</script>
+
+
+
+
+
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: smotrim.ru / Вести / inpage mobile-->
+<!--Категория: <не задана>-->
+<!--Тип баннера: Inpage combo-->
+<div id="adfox_160888596368771928"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.createAdaptive({
+ ownerId: 166267,
+ containerId: 'adfox_160888596368771928',
+ params: {
+ p1: 'cnulj',
+ p2: 'gyer',
+ insertAfter: 'p',
+ insertPosition: '1',
+ stick: false,
+ stickTo: 'auto',
+ stickyColorScheme: 'light',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ }
+ }, ['tablet', 'phone'], {
+ tabletWidth: 1024,
+ phoneWidth: 736,
+ isAutoReloads: false
+ })
+ })
+</script>
+
+
+
+
+
+ <div class="vgtrk-a1" data-id="604">
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: smotrim.ru / Главная/весь сайт / под 2 анонсом | mobile-->
+<!--Категория: <не задана>-->
+<!--Тип баннера: Мобильный 320х100-->
+<div id="adfox_164008543820976781"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.createAdaptive({
+ ownerId: 166267,
+ containerId: 'adfox_164008543820976781',
+ params: {
+ p1: 'clviw',
+ p2: 'ffei',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ }
+ }, ['tablet', 'phone'], {
+ tabletWidth: 1024,
+ phoneWidth: 736,
+ isAutoReloads: false
+ })
+ })
+</script>
+ </div>
+
+
+
+
+
+ <div class="vgtrk-a1" data-id="592">
+
+ <!--AdFox START-->
+<!--vgtrk.com-->
+<!--Площадка: smotrim.ru / Главная/весь сайт / Перетяжка середина | mobile-->
+<!--Категория: <не задана>-->
+<!--Тип баннера: Мобильный middle-->
+<div style="max-height: 300px; position: relative">
+<div id="adfox_160888808039868553"></div>
+<script>
+ window.yaContextCb.push(()=>{
+ Ya.adfoxCode.createAdaptive({
+ ownerId: 166267,
+ containerId: 'adfox_160888808039868553',
+ params: {
+ p1: 'cnukv',
+ p2: 'hbki',
+ puid2: '',
+ puid3: '',
+ puid4: '',
+ puid10: '',
+ puid11: '',
+ puid12: window.tags,
+ pk: window.tagsTitle,
+ pke: '1'
+ }
+ }, ['tablet', 'phone'], {
+ tabletWidth: 1024,
+ phoneWidth: 736,
+ isAutoReloads: false
+ })
+ })
+</script>
+</div>
+
+ </div>
+
+
+
+
+ + <!-- ] Adv slot 310 --> + </div> + <section id="persons" class="person-slider"> + <header class="person-slider__header"> + <h2 class="person-slider__title">Персоны</h2> + <div class="person-slider__filter"> + <div class="filter"> + <div class="filter__content"> + <div class="filter__slider"> + <ul class="filter__list"> + <li class="filter__item"> + <a class="filter__link" href="#persons-1">Автор и ведущий</a> + </li> + </ul> + </div> + </div> + </div> + </div> + </header> + + + <div id="persons-1" class="person-slider__content"> + <div class="person-slider__slider"> + <ul class="person-slider__list"> + + <li class="person-slider__item"> + <div class="person-slider__box"> + <div class="person-slider__preview"> + <div class="person-slider__picture"> + <a class="person-slider__link" href="/person/210324"> + <img class="swiper-lazy" data-src="https://cdn-st2.rtr-vesti.ru/vh/pictures/b/287/293.jpg" + alt="Борис Гребенщиков" + title="Борис Гребенщиков"> + <div class="swiper-lazy-preloader"></div> + </a> + </div> + </div> + <div class="person-slider__info"> + <h3 class="person-slider__title"> + <a class="person-slider__link" href="/person/210324"> + Борис Гребенщиков + </a> + </h3> + </div> + </div> + </li> + + </ul> + </div> + <div class="person-slider__navigation"> + <div class="person-slider__button-holder"> + <div class="person-slider__button-place"> + <a class="person-slider__button person-slider__button--prev" href="#prev"></a> + </div> + </div> + <div class="person-slider__button-holder"> + <div class="person-slider__button-place"> + <a class="person-slider__button person-slider__button--next" href="#next"></a> + </div> + </div> + </div> + </div> + + </section> + + + + + + + + <section class="brand brand--slider brand--ajax brand--black brand--preset-vhdr"> + <header class="brand__header"> + + <h2 class="brand__title"> + <span> + Слушаем также + </span> + </h2> + + </header> + <div class="brand__content"> + <div class="brand__slider"> + <ul class="brand__list"> + + </ul> + </div> + <div class="brand__navigation"> + <div class="brand__button-holder"> + <div class="brand__button-place"> + <a class="brand__button brand__button--prev" href="#prev"></a> + </div> + </div> + <div class="brand__button-holder"> + <div class="brand__button-place"> + <a class="brand__button brand__button--next" href="#next"></a> + </div> + </div> + </div> + </div> +</section> + <div class="program-top__tags"> + <div class="tags"> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/2550"> + Борис Гребенщиков + </a> + </div> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/43626"> + Радио России + </a> + </div> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/23296"> + аэростат + </a> + </div> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/1078"> + музыка + </a> + </div> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/255439"> + РКПрограммы + </a> + </div> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/250699"> + Радио Культура + </a> + </div> + <div class="tags__item"> + <a class="tags__link" href="/brands/tag/237499"> + музыкальные радиошоу + </a> + </div> + </div> + </div> + <div class="slot slot--default"> + <!-- Adv slot 299 [ --> +
+
+ + <!-- ] Adv slot 299 --> + </div> +<footer class="footer"> + <div class="footer__logo"> + <a class="footer__link" href="/"></a> + </div> + <div class="footer__navigation"> + <div class="navigation"> + <div class="navigation__control"></div> + <div class="navigation__content"> + <ul class="navigation__list"> + <li class="navigation__item"> + <a class="navigation__link" href="/?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Главное + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/vesti?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Вести + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/cinema?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Кино и шоу + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/radio?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Слушаем + </a> + </li> + <li class="navigation__item"> + <a class="navigation__link" href="/channels?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-main"> + Эфир + </a> + </li> + <li class="navigation__item navigation__special"> + <a class="navigation__link" href="/pick/special-donbass">Специальная военная операция</a> + </li> + </ul> + </div> +</div> + </div> + <div class="footer__store"> + <div class="store"> + <div class="store__preview"></div> + <div class="store__content"> + <h2 class="store__title">Смотрим на</h2> + <ul class="store__list"> + <li class="store__item"> + <a class="store__link" href="https://apps.apple.com/us/app/смотрим-сериалы-кино-и-шоу/id1526501534?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-apps" target="_blank"> + iOS + </a> + </li> + <li class="store__item"> + <a class="store__link" href="https://play.google.com/store/apps/details?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-apps&id=com.vgtrk.smotrim" target="_blank"> + Android + </a> + </li> + </ul> + </div> +</div> + </div> + <div class="footer__menu"> + <div class="menu"> + <div class="menu__content"> + <ul class="menu__list"> + <li class="menu__item"> + <a class="menu__link" href="https://smotrim.ru/article/2491124?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-docs"> + О платформе + </a> + </li> + <li class="menu__item"> + <a class="menu__link" href="https://smotrim.ru/article/2469904?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-docs"> + Пользовательское соглашение сервиса "Смотрим" + </a> + </li> + <li class="menu__item"> + <a class="menu__link" href="https://smotrim.ru/article/2469947?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-docs"> + Обратная связь + </a> + </li> + <li class="menu__item"> + <a class="menu__link" target="_blank" href="https://rosreklama.vgtrk.ru/?utm_source=internal&utm_medium=menu-group&utm_campaign=menu-footer-docs"> + Реклама на сайте + </a> + </li> + + </ul> + </div> +</div> + </div> + <div class="footer__info"> + <p>© 2022 Сетевое издание "Смотрим". Учредитель: Федеральное государственное унитарное предприятие "Всероссийская государственная телевизионная и радиовещательная компания" (ВГТРК). <a href="https://rkn.gov.ru/mass-communications/reestr/media/?id=802971" target="_blank">Свидетельство о регистрации СМИ ЭЛ № ФС 77 – 78574 от 08.07.2020</a>. Выдано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций. Главный редактор: Виноградов Е.А. Адрес электронной почты редакции: <a href="mailto:info@smotrim.ru">info@smotrim.ru</a>, телефон редакции: +7(495)232-63-33. Для лиц старше 18 лет. Все права на любые материалы, опубликованные на сайте, защищены в соответствии с российским и международным законодательством об интеллектуальной собственности. Любое использование текстовых, фото, аудио и видеоматериалов возможно только с согласия правообладателя (ВГТРК).</p> + </div> + <div class="footer__age-restriction"> + <i class="footer__icon"></i> + </div> + <div class="footer__social-groups"> + <div class="social-groups"> + <div class="social-groups__content"> + <ul class="social-groups__list"> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--odnoklassniki" + href="https://ok.ru/group/68835016835126" + target="_blank" + ></a> + </li> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--yzen" + href="https://zen.yandex.ru/smotrimru" + target="_blank" + ></a> + </li> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--telegram" + href="https://t.me/smotrim_ru" + target="_blank" + ></a> + </li> + <li class="social-groups__item"> + <a + class="social-groups__link social-groups__link--tiktok" + href="https://www.tiktok.com/@smotrimru" + target="_blank" + ></a> + </li> + </ul> + </div> +</div> + </div> + + <div class="footer__counters"> + <div class="counters"> + <!-- footer counters web --> + +<!-- Yandex.Metrika counter --> +<script type="text/javascript" > + (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; + m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) + (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); + + ym(67731175, "init", { + clickmap:true, + trackLinks:true, + accurateTrackBounce:true, + webvisor:true + }); +</script> +<noscript><div><img src="https://mc.yandex.ru/watch/67731175" style="position:absolute; left:-9999px;" alt="" /></div></noscript> +<!-- /Yandex.Metrika counter --> + +<!-- Yandex.Metrika counter --> +<script type="text/javascript" > + (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; + m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) + (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); + + ym(55382026, "init", { + clickmap:true, + trackLinks:true, + accurateTrackBounce:true, + webvisor:true + }); +</script> +<noscript><div><img src="https://mc.yandex.ru/watch/55382026" style="position:absolute; left:-9999px;" alt="" /></div></noscript> +<!-- /Yandex.Metrika counter --> + +<!-- tns-counter --> +<script language="JavaScript"> + var img = new Image(); + img.src = 'https://www.tns-counter.ru/V13a***R>' + document.referrer.replace(/\*/g,'%2a') + '*vgtrk_ru/ru/CP1251/tmsec=smotrim_total/'; +</script> +<noscript> + <img src="https://www.tns-counter.ru/V13a****vgtrk_ru/ru/CP1251/tmsec=smotrim_total/" width="1" height="1" alt="" /> +</noscript> +<!-- /tns-counter --> +<!-- Rating Mail.ru counter --> +<script type="text/javascript"> +var _tmr = window._tmr || (window._tmr = []); +_tmr.push({id: "3203839", type: "pageView", start: (new Date()).getTime()}); +(function (d, w, id) { + if (d.getElementById(id)) return; + var ts = d.createElement("script"); ts.type = "text/javascript"; ts.async = true; ts.id = id; + ts.src = "https://top-fwz1.mail.ru/js/code.js"; + var f = function () {var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ts, s);}; + if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } +})(document, window, "topmailru-code"); +</script><noscript><div> +<img src="https://top-fwz1.mail.ru/counter?id=3203839;js=na" style="border:0;position:absolute;left:-9999px;" alt="Top.Mail.Ru" /> +</div></noscript> +<!-- //Rating Mail.ru counter --> + +<script> + ((counterHostname) => { + window.MSCounter = { + counterHostname: counterHostname + }; + window.mscounterCallbacks = window.mscounterCallbacks || []; + window.mscounterCallbacks.push(() => { + msCounterExampleCom = new MSCounter.counter({ + 'account':'smotrim', + 'tmsec': 'smotrim', + 'autohit' : true + }); + }); + + const newScript = document.createElement('script'); + newScript.async = true; + newScript.src = `${counterHostname}/ncc/counter.js`; + + const referenceNode = document.querySelector('script'); + if (referenceNode) { + referenceNode.parentNode.insertBefore(newScript, referenceNode); + } else { + document.firstElementChild.appendChild(newScript); + } + })('https://tns-counter.ru/'); +</script> + </div> + </div> +</footer> + </section> + <section class="app__aside"> + + <aside class="aside"> + <section class="aside__control"> + <a class="aside__button aside__button--switch" href="#switch-aside" data-label="Вести"></a> + </section> + <section class="aside__content"> + + <div class="news-feed news-feed--loading "> + <header class="news-feed__header"> + <h2 class="news-feed__title">Сейчас</h2> + + + + + <a class="news-feed__close" href="#hide-news-feed"></a> + </header> + <div class="news-feed__content"> + <ul class="news-feed__list"></ul> + </div> +</div> + + </section> + </aside> + + </section> + </main> + + <section id="outside"> + <div class="dialog-wrapper"> + <div class="dialog-confirm"> + <div class="dialog-confirm__content"> +<!-- <div class="dialog-confirm__title">Вы уверены?</div>--> + <div class="dialog-confirm__text"> + <p></p> + </div> + <div class="dialog-confirm__bottom"> + <button class="btn btn-link btn-no close">Закрыть</button> + <div class="btn btn-link btn-yes">Регистрация</div> + </div> + </div> + </div> + +<!-- <a href="#" class="close"></a>--> +<!----> +<!-- <div class="dialog__title">Зарегистрируйтесь!</div>--> + +</div> + </section> + + <section class="popup"> + <section class="popup__window"> + <header class="popup__header"> + <h2 class="popup__title"></h2> + <div class="popup__control"> + <a class="popup__button popup__button--close" href="#popup-close"></a> + </div> + </header> + <section class="popup__content"></section> + </section> +</section> + + <section id="layout-audio-player" class="layout-player"> + <div class="layout-player__holder"> + <div class="layout-player__picture"> + <a class="layout-player__link" href="#"></a> + </div> + <div class="layout-player__title"></div> + <div class="layout-player__frame"> + + <iframe + name="layout_player" + allow="autoplay" + allowfullscreen="" + src="https://player.vgtrk.com/iframe/audio/id/2525782/sid/smotrim/" + > + </iframe> + </div> + <div class="layout-player__close"> + <span></span> + </div> + </div> + </section> + <section class="grid grid--hidden"> + <section class="grid__section grid__section--main"> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + <div class="grid__column"></div> + </section> + <section class="grid__section grid__section--aside"></section> +</section> + + + <script src="https://cdnmg-st.smotrim.ru/smotrimru/js/smotrim_71.js?v=1650990624"></script> + + <!-- footer misc code --> + + <script> + // old browsers alert + if (/MSIE \d|Trident.*rv:/.test(navigator.userAgent) || window.navigator.userAgent.indexOf("Windows NT 6.0") != -1 || window.navigator.userAgent.indexOf("Windows NT 5.1") != -1 || window.navigator.userAgent.indexOf("Windows NT 5.0") != -1) { + var fileref=document.createElement('script'); + fileref.setAttribute("type","text/javascript"); + fileref.setAttribute("src", "/js/old-browsers.js"); + document.getElementsByTagName("head")[0].appendChild(fileref); + } + // end old browsers alert + </script> + <script> + ym(67731175, 'userParams', { + is_registered: window.isLogged ? 1 : 0 + }); + </script> + + <section id="ajaxify-loader" class="ajaxify-loader"> + <div class="ajaxify-loader__container"> + <div class="ajaxify-loader__icon"></div> + <div class="ajaxify-loader__progress"> + <span></span> + </div> + </div> + </section> + + </body> +</html>
\ No newline at end of file |