mirror of
https://github.com/yt-dlp/yt-dlp
synced 2024-12-28 22:24:34 +01:00
[nrktv:episodes] Add support for episodes (#11571)
This commit is contained in:
parent
e5e19379be
commit
966815e139
2 changed files with 51 additions and 16 deletions
|
@ -655,6 +655,7 @@ from .nrk import (
|
||||||
NRKSkoleIE,
|
NRKSkoleIE,
|
||||||
NRKTVIE,
|
NRKTVIE,
|
||||||
NRKTVDirekteIE,
|
NRKTVDirekteIE,
|
||||||
|
NRKTVEpisodesIE,
|
||||||
)
|
)
|
||||||
from .ntvde import NTVDeIE
|
from .ntvde import NTVDeIE
|
||||||
from .ntvru import NTVRuIE
|
from .ntvru import NTVRuIE
|
||||||
|
|
|
@ -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):
|
class NRKPlaylistBaseIE(InfoExtractor):
|
||||||
_VALID_URL = r'https?://(?:www\.)?nrk\.no/(?!video|skole)(?:[^/]+/)+(?P<id>[^/]+)'
|
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):
|
def _extract_title(self, webpage):
|
||||||
playlist_id = self._match_id(url)
|
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)
|
class NRKTVEpisodesIE(NRKPlaylistBaseIE):
|
||||||
playlist_description = self._og_search_description(webpage)
|
_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(
|
def _extract_title(self, webpage):
|
||||||
entries, playlist_id, playlist_title, playlist_description)
|
return self._html_search_regex(
|
||||||
|
r'<h1>([^<]+)</h1>', webpage, 'title', fatal=False)
|
||||||
|
|
||||||
|
|
||||||
class NRKSkoleIE(InfoExtractor):
|
class NRKSkoleIE(InfoExtractor):
|
||||||
|
|
Loading…
Reference in a new issue