diff options
| author | Sergey M․ <dstftw@gmail.com> | 2017-02-01 00:29:29 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2017-02-01 00:29:29 +0700 | 
| commit | 7c5329e6f4152b48c5476b1b9b8ab931caa10331 (patch) | |
| tree | 9dc41c27d83dfb5971cb6950ea32e6a414eda4bc | |
| parent | 8fd65faece98139def3a6538e98053bebd400263 (diff) | |
[nrk] Improve extraction and update tests (closes #11571)
| -rw-r--r-- | youtube_dl/extractor/nrk.py | 145 | 
1 files changed, 111 insertions, 34 deletions
diff --git a/youtube_dl/extractor/nrk.py b/youtube_dl/extractor/nrk.py index 26604f84f..fc3c0cd3c 100644 --- a/youtube_dl/extractor/nrk.py +++ b/youtube_dl/extractor/nrk.py @@ -134,11 +134,15 @@ class NRKBaseIE(InfoExtractor):              _season_episode = data.get('scoresStatistics', {}).get('springStreamStream') or \                  data.get('relativeOriginUrl', '')              EPISODENUM_RE = [ -                r'/s(?P<season>\d+)e(?P<episode>\d+)\.', -                r'/sesong-(?P<season>\d+)/episode-(?P<episode>\d+)', +                r'/s(?P<season>\d{,2})e(?P<episode>\d{,2})\.', +                r'/sesong-(?P<season>\d{,2})/episode-(?P<episode>\d{,2})',              ] -            season_number = int_or_none(self._search_regex(EPISODENUM_RE, _season_episode, "S##E##", fatal=False, group='season')) -            episode_number = int_or_none(self._search_regex(EPISODENUM_RE, _season_episode, "S##E##", fatal=False, group='episode')) +            season_number = int_or_none(self._search_regex( +                EPISODENUM_RE, _season_episode, 'season number', +                default=None, group='season')) +            episode_number = int_or_none(self._search_regex( +                EPISODENUM_RE, _season_episode, 'episode number', +                default=None, group='episode'))          thumbnails = None          images = data.get('images') @@ -243,54 +247,102 @@ class NRKTVIE(NRKBaseIE):              'title': '20 spørsmål 23.05.2014',              'description': 'md5:bdea103bc35494c143c6a9acdd84887a',              'duration': 1741, +            'series': '20 spørsmål - TV', +            'episode': '23.05.2014',          },      }, {          'url': 'https://tv.nrk.no/program/mdfp15000514', -        'md5': '43d0be26663d380603a9cf0c24366531',          'info_dict': {              'id': 'MDFP15000514CA',              'ext': 'mp4',              'title': 'Grunnlovsjubiléet - Stor ståhei for ingenting 24.05.2014',              'description': 'md5:89290c5ccde1b3a24bb8050ab67fe1db',              'duration': 4605, +            'series': 'Kunnskapskanalen', +            'episode': '24.05.2014', +        }, +        'params': { +            'skip_download': True,          },      }, {          # single playlist video          'url': 'https://tv.nrk.no/serie/tour-de-ski/MSPO40010515/06-01-2015#del=2', -        'md5': 'adbd1dbd813edaf532b0a253780719c2',          'info_dict': {              'id': 'MSPO40010515-part2',              'ext': 'flv',              'title': 'Tour de Ski: Sprint fri teknikk, kvinner og menn 06.01.2015 (del 2:2)',              'description': 'md5:238b67b97a4ac7d7b4bf0edf8cc57d26',          }, -        'skip': 'Only works from Norway', +        'params': { +            'skip_download': True, +        }, +        'expected_warnings': ['Video is geo restricted'], +        'skip': 'particular part is not supported currently',      }, {          'url': 'https://tv.nrk.no/serie/tour-de-ski/MSPO40010515/06-01-2015',          'playlist': [{ -            'md5': '9480285eff92d64f06e02a5367970a7a',              'info_dict': { -                'id': 'MSPO40010515-part1', -                'ext': 'flv', -                'title': 'Tour de Ski: Sprint fri teknikk, kvinner og menn 06.01.2015 (del 1:2)', -                'description': 'md5:238b67b97a4ac7d7b4bf0edf8cc57d26', +                'id': 'MSPO40010515AH', +                'ext': 'mp4', +                'title': 'Sprint fri teknikk, kvinner og menn 06.01.2015 (Part 1)', +                'description': 'md5:c03aba1e917561eface5214020551b7a', +                'duration': 772, +                'series': 'Tour de Ski', +                'episode': '06.01.2015', +            }, +            'params': { +                'skip_download': True,              },          }, { -            'md5': 'adbd1dbd813edaf532b0a253780719c2',              'info_dict': { -                'id': 'MSPO40010515-part2', -                'ext': 'flv', -                'title': 'Tour de Ski: Sprint fri teknikk, kvinner og menn 06.01.2015 (del 2:2)', -                'description': 'md5:238b67b97a4ac7d7b4bf0edf8cc57d26', +                'id': 'MSPO40010515BH', +                'ext': 'mp4', +                'title': 'Sprint fri teknikk, kvinner og menn 06.01.2015 (Part 2)', +                'description': 'md5:c03aba1e917561eface5214020551b7a', +                'duration': 6175, +                'series': 'Tour de Ski', +                'episode': '06.01.2015', +            }, +            'params': { +                'skip_download': True,              },          }],          'info_dict': {              'id': 'MSPO40010515', -            'title': 'Tour de Ski: Sprint fri teknikk, kvinner og menn', -            'description': 'md5:238b67b97a4ac7d7b4bf0edf8cc57d26', -            'duration': 6947.52, +            'title': 'Sprint fri teknikk, kvinner og menn 06.01.2015', +            'description': 'md5:c03aba1e917561eface5214020551b7a', +        }, +        'expected_warnings': ['Video is geo restricted'], +    }, { +        'url': 'https://tv.nrk.no/serie/anno/KMTE50001317/sesong-3/episode-13', +        'info_dict': { +            'id': 'KMTE50001317AA', +            'ext': 'mp4', +            'title': 'Anno 13:30', +            'description': 'md5:11d9613661a8dbe6f9bef54e3a4cbbfa', +            'duration': 2340, +            'series': 'Anno', +            'episode': '13:30', +            'season_number': 3, +            'episode_number': 13, +        }, +        'params': { +            'skip_download': True, +        }, +    }, { +        'url': 'https://tv.nrk.no/serie/nytt-paa-nytt/MUHH46000317/27-01-2017', +        'info_dict': { +            'id': 'MUHH46000317AA', +            'ext': 'mp4', +            'title': 'Nytt på Nytt 27.01.2017', +            'description': 'md5:5358d6388fba0ea6f0b6d11c48b9eb4b', +            'duration': 1796, +            'series': 'Nytt på nytt', +            'episode': '27.01.2017', +        }, +        'params': { +            'skip_download': True,          }, -        'skip': 'Only works from Norway',      }, {          'url': 'https://radio.nrk.no/serie/dagsnytt/NPUB21019315/12-07-2015#',          'only_matching': True, @@ -377,36 +429,61 @@ class NRKTVEpisodesIE(NRKPlaylistBaseIE):  class NRKTVSeriesIE(InfoExtractor): -    _VALID_URL = r'https?://tv\.nrk\.no/serie/(?P<id>[^/]+)/?' -    _ITEM_RE = r'data-season=["\'](?P<id>\d+)["\']' +    _VALID_URL = r'https?://(?:tv|radio)\.nrk(?:super)?\.no/serie/(?P<id>[^/]+)' +    _ITEM_RE = r'(?:data-season=["\']|id=["\']season-)(?P<id>\d+)'      _TESTS = [{ +        'url': 'https://tv.nrk.no/serie/groenn-glede', +        'info_dict': { +            'id': 'groenn-glede', +            'title': 'Grønn glede', +            'description': 'md5:7576e92ae7f65da6993cf90ee29e4608', +        }, +        'playlist_mincount': 9, +    }, { +        'url': 'http://tv.nrksuper.no/serie/labyrint', +        'info_dict': { +            'id': 'labyrint', +            'title': 'Labyrint', +            'description': 'md5:58afd450974c89e27d5a19212eee7115', +        }, +        'playlist_mincount': 3, +    }, {          'url': 'https://tv.nrk.no/serie/broedrene-dal-og-spektralsteinene', -        'playlist_count': 1, +        'only_matching': True,      }, {          'url': 'https://tv.nrk.no/serie/saving-the-human-race', -        'playlist_count': 1, +        'only_matching': True,      }, {          'url': 'https://tv.nrk.no/serie/postmann-pat', -        'playlist_count': 3, -    }, { -        'url': 'https://tv.nrk.no/serie/groenn-glede', -        'playlist_count': 9, +        'only_matching': True,      }] +    @classmethod +    def suitable(cls, url): +        return False if NRKTVIE.suitable(url) else super(NRKTVSeriesIE, cls).suitable(url) +      def _real_extract(self, url):          series_id = self._match_id(url)          webpage = self._download_webpage(url, series_id)          entries = [ -            self.url_result('https://tv.nrk.no/program/Episodes/{series}/{season}'.format( -                series=series_id, -                season=season_id -            )) +            self.url_result( +                'https://tv.nrk.no/program/Episodes/{series}/{season}'.format( +                    series=series_id, season=season_id))              for season_id in re.findall(self._ITEM_RE, webpage)          ] -        return self.playlist_result(entries) +        title = self._html_search_meta( +            'seriestitle', webpage, +            'title', default=None) or self._og_search_title( +            webpage, fatal=False) + +        description = self._html_search_meta( +            'series_description', webpage, +            'description', default=None) or self._og_search_description(webpage) + +        return self.playlist_result(entries, series_id, title, description)  class NRKSkoleIE(InfoExtractor):  | 
