mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-12-06 06:45:00 +01:00
Merge 7755b3f855 into 36b29bb353
This commit is contained in:
commit
c7afeefe0d
1 changed files with 35 additions and 8 deletions
|
|
@ -2,7 +2,9 @@ from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
clean_html,
|
clean_html,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
smuggle_url,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
|
unsmuggle_url,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import traverse_obj
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
@ -20,10 +22,10 @@ class ERRJupiterIE(InfoExtractor):
|
||||||
'title': 'Siin me oleme!',
|
'title': 'Siin me oleme!',
|
||||||
'alt_title': '',
|
'alt_title': '',
|
||||||
'description': 'md5:1825b795f5f7584241aeb59e5bbb4f70',
|
'description': 'md5:1825b795f5f7584241aeb59e5bbb4f70',
|
||||||
'release_date': '20231226',
|
'release_date': '20250623',
|
||||||
'upload_date': '20201217',
|
'upload_date': '20201217',
|
||||||
'modified_date': '20201217',
|
'modified_date': '20201217',
|
||||||
'release_timestamp': 1703577600,
|
'release_timestamp': 1750688400,
|
||||||
'timestamp': 1608210000,
|
'timestamp': 1608210000,
|
||||||
'modified_timestamp': 1608220800,
|
'modified_timestamp': 1608220800,
|
||||||
'release_year': 1978,
|
'release_year': 1978,
|
||||||
|
|
@ -174,12 +176,15 @@ class ERRJupiterIE(InfoExtractor):
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
url, idata = unsmuggle_url(url, {})
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
data = self._download_json(
|
data = self._download_json(
|
||||||
'https://services.err.ee/api/v2/vodContent/getContentPageData', video_id,
|
'https://services.err.ee/api/v2/vodContent/getContentPageData', video_id,
|
||||||
query={'contentId': video_id})['data']['mainContent']
|
query={'contentId': video_id})['data']
|
||||||
|
|
||||||
media_data = traverse_obj(data, ('medias', ..., {dict}), get_all=False)
|
main_data = data.get('mainContent')
|
||||||
|
|
||||||
|
media_data = traverse_obj(main_data, ('medias', ..., {dict}), get_all=False)
|
||||||
if traverse_obj(media_data, ('restrictions', 'drm', {bool})):
|
if traverse_obj(media_data, ('restrictions', 'drm', {bool})):
|
||||||
self.report_drm(video_id)
|
self.report_drm(video_id)
|
||||||
|
|
||||||
|
|
@ -200,11 +205,11 @@ class ERRJupiterIE(InfoExtractor):
|
||||||
'format_id': 'http',
|
'format_id': 'http',
|
||||||
})
|
})
|
||||||
|
|
||||||
return {
|
metadata = {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
**traverse_obj(data, {
|
**traverse_obj(main_data, {
|
||||||
'title': ('heading', {str}),
|
'title': ('heading', {str}),
|
||||||
'alt_title': ('subHeading', {str}),
|
'alt_title': ('subHeading', {str}),
|
||||||
'description': (('lead', 'body'), {clean_html}, filter),
|
'description': (('lead', 'body'), {clean_html}, filter),
|
||||||
|
|
@ -213,12 +218,34 @@ class ERRJupiterIE(InfoExtractor):
|
||||||
'release_timestamp': (('scheduleStart', 'publicStart'), {int_or_none}),
|
'release_timestamp': (('scheduleStart', 'publicStart'), {int_or_none}),
|
||||||
'release_year': ('year', {int_or_none}),
|
'release_year': ('year', {int_or_none}),
|
||||||
}, get_all=False),
|
}, get_all=False),
|
||||||
**(traverse_obj(data, {
|
}
|
||||||
|
|
||||||
|
# Early return for non-episode types ('movies', ...?)
|
||||||
|
if main_data.get('type') != 'episode':
|
||||||
|
return metadata
|
||||||
|
|
||||||
|
metadata |= {
|
||||||
|
**(traverse_obj(main_data, {
|
||||||
'series': ('heading', {str}),
|
'series': ('heading', {str}),
|
||||||
'series_id': ('rootContentId', {str_or_none}),
|
'series_id': ('rootContentId', {str_or_none}),
|
||||||
'episode': ('subHeading', {str}),
|
'episode': ('subHeading', {str}),
|
||||||
'season_number': ('season', {int_or_none}),
|
'season_number': ('season', {int_or_none}),
|
||||||
'episode_number': ('episode', {int_or_none}),
|
'episode_number': ('episode', {int_or_none}),
|
||||||
'episode_id': ('id', {str_or_none}),
|
'episode_id': ('id', {str_or_none}),
|
||||||
}) if data.get('type') == 'episode' else {}),
|
})),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if season_data := data.get('seasonList'):
|
||||||
|
# XXX: Apparently we need to fill out the playlist_id
|
||||||
|
if self._yes_playlist('dummy-id', video_id, idata):
|
||||||
|
playlist_type = season_data.get('type')
|
||||||
|
if playlist_type in ('seasonal', 'monthly', 'shortSeriesList'):
|
||||||
|
active_season = next(season for season in season_data.get('items') if season.get('contents'))
|
||||||
|
entries = [
|
||||||
|
self.url_result(smuggle_url(episode['url'], {'force_noplaylist': True}))
|
||||||
|
for episode in active_season.get('contents', [])
|
||||||
|
]
|
||||||
|
return self.playlist_result(entries, video_id, **metadata)
|
||||||
|
else:
|
||||||
|
self.report_warning(f'Unhandled playlist type {playlist_type}, skipping playlist...')
|
||||||
|
return metadata
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue