|
@ -207,7 +207,15 @@ class NRKIE(NRKBaseIE): |
|
|
|
|
|
|
|
|
class NRKTVIE(NRKBaseIE): |
|
|
class NRKTVIE(NRKBaseIE): |
|
|
IE_DESC = 'NRK TV and NRK Radio' |
|
|
IE_DESC = 'NRK TV and NRK Radio' |
|
|
_VALID_URL = r'https?://(?:tv|radio)\.nrk(?:super)?\.no/(?:serie/[^/]+|program)/(?P<id>[a-zA-Z]{4}\d{8})(?:/\d{2}-\d{2}-\d{4})?(?:#del=(?P<part_id>\d+))?' |
|
|
|
|
|
|
|
|
_EPISODE_RE = r'(?P<id>[a-zA-Z]{4}\d{8})' |
|
|
|
|
|
_VALID_URL = r'''(?x) |
|
|
|
|
|
https?:// |
|
|
|
|
|
(?:tv|radio)\.nrk(?:super)?\.no/ |
|
|
|
|
|
(?:serie/[^/]+|program)/ |
|
|
|
|
|
(?![Ee]pisodes)%s |
|
|
|
|
|
(?:/\d{2}-\d{2}-\d{4})? |
|
|
|
|
|
(?:\#del=(?P<part_id>\d+))? |
|
|
|
|
|
''' % _EPISODE_RE |
|
|
_API_HOST = 'psapi-we.nrk.no' |
|
|
_API_HOST = 'psapi-we.nrk.no' |
|
|
|
|
|
|
|
|
_TESTS = [{ |
|
|
_TESTS = [{ |
|
@ -286,9 +294,30 @@ class NRKTVDirekteIE(NRKTVIE): |
|
|
}] |
|
|
}] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NRKPlaylistIE(InfoExtractor): |
|
|
|
|
|
_VALID_URL = r'https?://(?:www\.)?nrk\.no/(?!video|skole)(?:[^/]+/)+(?P<id>[^/]+)' |
|
|
|
|
|
|
|
|
class NRKPlaylistBaseIE(InfoExtractor): |
|
|
|
|
|
def _extract_description(self, webpage): |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
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, NRKIE.ie_key()) |
|
|
|
|
|
for video_id in re.findall(self._ITEM_RE, webpage) |
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
playlist_title = self. _extract_title(webpage) |
|
|
|
|
|
playlist_description = self._extract_description(webpage) |
|
|
|
|
|
|
|
|
|
|
|
return self.playlist_result( |
|
|
|
|
|
entries, playlist_id, playlist_title, playlist_description) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NRKPlaylistIE(NRKPlaylistBaseIE): |
|
|
|
|
|
_VALID_URL = r'https?://(?:www\.)?nrk\.no/(?!video|skole)(?:[^/]+/)+(?P<id>[^/]+)' |
|
|
|
|
|
_ITEM_RE = r'class="[^"]*\brich\b[^"]*"[^>]+data-video-id="([^"]+)"' |
|
|
_TESTS = [{ |
|
|
_TESTS = [{ |
|
|
'url': 'http://www.nrk.no/troms/gjenopplev-den-historiske-solformorkelsen-1.12270763', |
|
|
'url': 'http://www.nrk.no/troms/gjenopplev-den-historiske-solformorkelsen-1.12270763', |
|
|
'info_dict': { |
|
|
'info_dict': { |
|
@ -307,23 +336,28 @@ class NRKPlaylistIE(InfoExtractor): |
|
|
'playlist_count': 5, |
|
|
'playlist_count': 5, |
|
|
}] |
|
|
}] |
|
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
|
|
|
playlist_id = self._match_id(url) |
|
|
|
|
|
|
|
|
def _extract_title(self, webpage): |
|
|
|
|
|
return self._og_search_title(webpage, fatal=False) |
|
|
|
|
|
|
|
|
webpage = self._download_webpage(url, playlist_id) |
|
|
|
|
|
|
|
|
def _extract_description(self, webpage): |
|
|
|
|
|
return self._og_search_description(webpage) |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
class NRKTVEpisodesIE(NRKPlaylistBaseIE): |
|
|
|
|
|
_VALID_URL = r'https?://tv\.nrk\.no/program/[Ee]pisodes/[^/]+/(?P<id>\d+)' |
|
|
|
|
|
_ITEM_RE = r'data-episode=["\']%s' % NRKTVIE._EPISODE_RE |
|
|
|
|
|
_TESTS = [{ |
|
|
|
|
|
'url': 'https://tv.nrk.no/program/episodes/nytt-paa-nytt/69031', |
|
|
|
|
|
'info_dict': { |
|
|
|
|
|
'id': '69031', |
|
|
|
|
|
'title': 'Nytt på nytt, sesong: 201210', |
|
|
|
|
|
}, |
|
|
|
|
|
'playlist_count': 4, |
|
|
|
|
|
}] |
|
|
|
|
|
|
|
|
return self.playlist_result( |
|
|
|
|
|
entries, playlist_id, playlist_title, playlist_description) |
|
|
|
|
|
|
|
|
def _extract_title(self, webpage): |
|
|
|
|
|
return self._html_search_regex( |
|
|
|
|
|
r'<h1>([^<]+)</h1>', webpage, 'title', fatal=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NRKSkoleIE(InfoExtractor): |
|
|
class NRKSkoleIE(InfoExtractor): |
|
|