diff options
Diffstat (limited to 'youtube_dl/extractor/nrk.py')
| -rw-r--r-- | youtube_dl/extractor/nrk.py | 80 | 
1 files changed, 60 insertions, 20 deletions
| diff --git a/youtube_dl/extractor/nrk.py b/youtube_dl/extractor/nrk.py index 1e4cfa2e7..e91d3a248 100644 --- a/youtube_dl/extractor/nrk.py +++ b/youtube_dl/extractor/nrk.py @@ -14,46 +14,48 @@ from ..utils import (  class NRKIE(InfoExtractor): -    _VALID_URL = r'http://(?:www\.)?nrk\.no/(?:video|lyd)/[^/]+/(?P<id>[\dA-F]{16})' +    _VALID_URL = r'(?:nrk:|http://(?:www\.)?nrk\.no/video/PS\*)(?P<id>\d+)'      _TESTS = [          { -            'url': 'http://www.nrk.no/video/dompap_og_andre_fugler_i_piip_show/D0FA54B5C8B6CE59/emne/piipshow/', -            'md5': 'a6eac35052f3b242bb6bb7f43aed5886', +            'url': 'http://www.nrk.no/video/PS*150533', +            'md5': 'bccd850baebefe23b56d708a113229c2',              'info_dict': {                  'id': '150533',                  'ext': 'flv',                  'title': 'Dompap og andre fugler i Piip-Show', -                'description': 'md5:d9261ba34c43b61c812cb6b0269a5c8f' +                'description': 'md5:d9261ba34c43b61c812cb6b0269a5c8f', +                'duration': 263,              }          },          { -            'url': 'http://www.nrk.no/lyd/lyd_av_oppleser_for_blinde/AEFDDD5473BA0198/', -            'md5': '3471f2a51718195164e88f46bf427668', +            'url': 'http://www.nrk.no/video/PS*154915', +            'md5': '0b1493ba1aae7d9579a5ad5531bc395a',              'info_dict': {                  'id': '154915',                  'ext': 'flv',                  'title': 'Slik høres internett ut når du er blind',                  'description': 'md5:a621f5cc1bd75c8d5104cb048c6b8568', +                'duration': 20,              }          },      ]      def _real_extract(self, url): -        mobj = re.match(self._VALID_URL, url) -        video_id = mobj.group('id') - -        page = self._download_webpage(url, video_id) - -        video_id = self._html_search_regex(r'<div class="nrk-video" data-nrk-id="(\d+)">', page, 'video id') +        video_id = self._match_id(url)          data = self._download_json( -            'http://v7.psapi.nrk.no/mediaelement/%s' % video_id, video_id, 'Downloading media JSON') +            'http://v8.psapi.nrk.no/mediaelement/%s' % video_id, +            video_id, 'Downloading media JSON')          if data['usageRights']['isGeoBlocked']: -            raise ExtractorError('NRK har ikke rettig-heter til å vise dette programmet utenfor Norge', expected=True) +            raise ExtractorError( +                'NRK har ikke rettig-heter til å vise dette programmet utenfor Norge', +                expected=True) + +        video_url = data['mediaUrl'] + '?hdcore=3.5.0&plugin=aasp-3.5.0.151.81' -        video_url = data['mediaUrl'] + '?hdcore=3.1.1&plugin=aasp-3.1.1.69.124' +        duration = parse_duration(data.get('duration'))          images = data.get('images')          if images: @@ -69,10 +71,51 @@ class NRKIE(InfoExtractor):              'ext': 'flv',              'title': data['title'],              'description': data['description'], +            'duration': duration,              'thumbnail': thumbnail,          } +class NRKPlaylistIE(InfoExtractor): +    _VALID_URL = r'http://(?:www\.)?nrk\.no/(?!video)(?:[^/]+/)+(?P<id>[^/]+)' + +    _TESTS = [{ +        'url': 'http://www.nrk.no/troms/gjenopplev-den-historiske-solformorkelsen-1.12270763', +        'info_dict': { +            'id': 'gjenopplev-den-historiske-solformorkelsen-1.12270763', +            'title': 'Gjenopplev den historiske solformørkelsen', +            'description': 'md5:c2df8ea3bac5654a26fc2834a542feed', +        }, +        'playlist_count': 2, +    }, { +        'url': 'http://www.nrk.no/kultur/bok/rivertonprisen-til-karin-fossum-1.12266449', +        'info_dict': { +            'id': 'rivertonprisen-til-karin-fossum-1.12266449', +            'title': 'Rivertonprisen til Karin Fossum', +            'description': 'Første kvinne på 15 år til å vinne krimlitteraturprisen.', +        }, +        'playlist_count': 5, +    }] + +    def _real_extract(self, url): +        playlist_id = self._match_id(url) + +        webpage = self._download_webpage(url, playlist_id) + +        entries = [ +            self.url_result('nrk:%s' % video_id, 'NRK') +            for video_id in re.findall( +                r'class="[^"]*\brich\b[^"]*"[^>]+data-video-id="([^"]+)"', +                webpage) +        ] + +        playlist_title = self._og_search_title(webpage) +        playlist_description = self._og_search_description(webpage) + +        return self.playlist_result( +            entries, playlist_id, playlist_title, playlist_description) + +  class NRKTVIE(InfoExtractor):      _VALID_URL = r'(?P<baseurl>http://tv\.nrk(?:super)?\.no/)(?:serie/[^/]+|program)/(?P<id>[a-zA-Z]{4}\d{8})(?:/\d{2}-\d{2}-\d{4})?(?:#del=(?P<part_id>\d+))?' @@ -149,9 +192,6 @@ class NRKTVIE(InfoExtractor):          }      ] -    def _seconds2str(self, s): -        return '%02d:%02d:%02d.%03d' % (s / 3600, (s % 3600) / 60, s % 60, (s % 1) * 1000) -      def _debug_print(self, txt):          if self._downloader.params.get('verbose', False):              self.to_screen('[debug] %s' % txt) @@ -168,8 +208,8 @@ class NRKTVIE(InfoExtractor):          for pos, p in enumerate(ps):              begin = parse_duration(p.get('begin'))              duration = parse_duration(p.get('dur')) -            starttime = self._seconds2str(begin) -            endtime = self._seconds2str(begin + duration) +            starttime = self._subtitles_timecode(begin) +            endtime = self._subtitles_timecode(begin + duration)              srt += '%s\r\n%s --> %s\r\n%s\r\n\r\n' % (compat_str(pos), starttime, endtime, p.text)          return {lang: [              {'ext': 'ttml', 'url': url}, | 
