Add next video extraction

This commit is contained in:
sepro 2025-01-12 09:48:32 +01:00
parent 07e7a402bb
commit 49065d4bab

View File

@ -1,5 +1,5 @@
from .common import InfoExtractor
from ..utils import parse_iso8601, url_or_none
from ..utils import parse_iso8601, smuggle_url, unsmuggle_url, url_or_none
from ..utils.traversal import traverse_obj
@ -33,13 +33,13 @@ class PiramideTVIE(InfoExtractor):
},
}]
def _real_extract(self, url):
video_id = self._match_id(url)
def _extract_video(self, video_id):
video_data = self._download_json(
f'https://hermes.piramide.tv/video/data/{video_id}', video_id, fatal=False)
formats, subtitles = self._extract_m3u8_formats_and_subtitles(
f'https://cdn.piramide.tv/video/{video_id}/manifest.m3u8', video_id, fatal=False)
return {
next_video = traverse_obj(video_data, ('video', 'next_video', 'id', {str}))
return next_video, {
'id': video_id,
'formats': formats,
'subtitles': subtitles,
@ -54,6 +54,23 @@ class PiramideTVIE(InfoExtractor):
})),
}
def _entries(self, video_id):
visited = set()
while True:
next_video, info = self._extract_video(video_id)
yield info
if not next_video or next_video in visited:
break
visited.add(next_video)
video_id = next_video
def _real_extract(self, url):
url, smuggled_data = unsmuggle_url(url, {})
video_id = self._match_id(url)
if self._yes_playlist(video_id, video_id, smuggled_data):
return self.playlist_result(self._entries(video_id), video_id)
return self._extract_video(video_id)[1]
class PiramideTVChannelIE(InfoExtractor):
_VALID_URL = r'https?://piramide\.tv/channel/(?P<id>[\w-]+)'
@ -69,7 +86,8 @@ class PiramideTVChannelIE(InfoExtractor):
videos = self._download_json(
f'https://hermes.piramide.tv/channel/list/{channel_name}/date/100000', channel_name)
for video_id in traverse_obj(videos, ('videos', ..., 'id', {str})):
yield self.url_result(f'https://piramide.tv/video/{video_id}')
yield self.url_result(smuggle_url(
f'https://piramide.tv/video/{video_id}', {'force_noplaylist': True}))
def _real_extract(self, url):
channel_name = self._match_id(url)