mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-06-28 01:18:30 +00:00
[ie/EasyBroadcastLiveIE] Add extractor
This commit is contained in:
parent
73bf102116
commit
4cc768576f
@ -574,6 +574,7 @@
|
|||||||
ClipYouEmbedIE,
|
ClipYouEmbedIE,
|
||||||
EaglePlatformIE,
|
EaglePlatformIE,
|
||||||
)
|
)
|
||||||
|
from .easybroadcast import EasyBroadcastLiveIE
|
||||||
from .ebaumsworld import EbaumsWorldIE
|
from .ebaumsworld import EbaumsWorldIE
|
||||||
from .ebay import EbayIE
|
from .ebay import EbayIE
|
||||||
from .egghead import (
|
from .egghead import (
|
||||||
|
67
yt_dlp/extractor/easybroadcast.py
Normal file
67
yt_dlp/extractor/easybroadcast.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
from yt_dlp.extractor.common import InfoExtractor
|
||||||
|
from yt_dlp.utils import (
|
||||||
|
ExtractorError,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class EasyBroadcastLiveIE(InfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:\w+\.)?player\.easybroadcast\.io/events/(?P<id>[0-9a-zA-Z_]+)'
|
||||||
|
_TESTS = [
|
||||||
|
{
|
||||||
|
'url': 'https://al24.player.easybroadcast.io/events/66_al24_u4yga6h',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '66_al24_u4yga6h',
|
||||||
|
'title': 'Al24',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'live_status': 'is_live',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url': 'https://snrt.player.easybroadcast.io/events/73_aloula_w1dqfwm',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '73_aloula_w1dqfwm',
|
||||||
|
'title': 'Aloula',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'live_status': 'is_live',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'url': 'https://captaprod.player.easybroadcast.io/events/54_tvr_vtucuxt',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '54_tvr_vtucuxt',
|
||||||
|
'title': 'TVR',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'live_status': 'is_live',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
event_id = self._match_id(url)
|
||||||
|
|
||||||
|
base_url = url.split('/events/')[0]
|
||||||
|
api_url = f'{base_url}/api/events/{event_id}'
|
||||||
|
metadata = self._download_json(api_url, event_id, note='Downloading EasyBroadcast event metadata')
|
||||||
|
|
||||||
|
m3u8_url = metadata.get('stream')
|
||||||
|
token = None
|
||||||
|
if metadata.get('token_authentication', False):
|
||||||
|
token_api_url = f'https://token.easybroadcast.io/all?url={m3u8_url}'
|
||||||
|
token = self._download_webpage(token_api_url, event_id, note='Fetching stream token').strip()
|
||||||
|
m3u8_url = m3u8_url + '?' + token
|
||||||
|
if not token:
|
||||||
|
raise ExtractorError('Empty token returned from token server.')
|
||||||
|
|
||||||
|
formats = self._extract_m3u8_formats(m3u8_url, video_id=event_id, ext='mp4', m3u8_id='hls', live=True)
|
||||||
|
|
||||||
|
if token:
|
||||||
|
for fmt in formats:
|
||||||
|
fmt['url'] = fmt['url'] + '?' + token
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': event_id,
|
||||||
|
'title': metadata.get('name', event_id),
|
||||||
|
'formats': formats,
|
||||||
|
'is_live': True,
|
||||||
|
}
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from .commonprotocols import RtmpIE
|
from .commonprotocols import RtmpIE
|
||||||
|
from .easybroadcast import EasyBroadcastLiveIE
|
||||||
from .youtube import YoutubeIE
|
from .youtube import YoutubeIE
|
||||||
from ..compat import compat_etree_fromstring
|
from ..compat import compat_etree_fromstring
|
||||||
from ..cookies import LenientSimpleCookie
|
from ..cookies import LenientSimpleCookie
|
||||||
@ -804,6 +805,16 @@ class GenericIE(InfoExtractor):
|
|||||||
},
|
},
|
||||||
'skip': 'All The Daily Show URLs now redirect to http://www.cc.com/shows/',
|
'skip': 'All The Daily Show URLs now redirect to http://www.cc.com/shows/',
|
||||||
},
|
},
|
||||||
|
# EasyBroadcast embed
|
||||||
|
{
|
||||||
|
'url': 'https://al24news.dz/en/live',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '66_al24_u4yga6h',
|
||||||
|
'title': 'Al24',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'live_status': 'is_live',
|
||||||
|
},
|
||||||
|
},
|
||||||
# jwplayer YouTube
|
# jwplayer YouTube
|
||||||
{
|
{
|
||||||
'url': 'http://media.nationalarchives.gov.uk/index.php/webinar-using-discovery-national-archives-online-catalogue/',
|
'url': 'http://media.nationalarchives.gov.uk/index.php/webinar-using-discovery-national-archives-online-catalogue/',
|
||||||
@ -2612,6 +2623,13 @@ def _extract_embeds(self, url, webpage, *, urlh=None, info_dict={}):
|
|||||||
if embeds:
|
if embeds:
|
||||||
return embeds
|
return embeds
|
||||||
|
|
||||||
|
# EasyBroadcast embed
|
||||||
|
mobj = re.search(
|
||||||
|
EasyBroadcastLiveIE._VALID_URL,
|
||||||
|
webpage)
|
||||||
|
if mobj is not None:
|
||||||
|
return [self.url_result(mobj.group(0), ie=EasyBroadcastLiveIE)]
|
||||||
|
|
||||||
jwplayer_data = self._find_jwplayer_data(
|
jwplayer_data = self._find_jwplayer_data(
|
||||||
webpage, video_id, transform_source=js_to_json)
|
webpage, video_id, transform_source=js_to_json)
|
||||||
if jwplayer_data:
|
if jwplayer_data:
|
||||||
|
Loading…
Reference in New Issue
Block a user