mirror of
https://github.com/yt-dlp/yt-dlp
synced 2024-12-20 18:15:54 +01:00
[arte] Add support for embedded videos (Fixes #2620)
This commit is contained in:
parent
878d11ec29
commit
893f8832b5
@ -14,6 +14,7 @@ from .arte import (
|
|||||||
ArteTVConcertIE,
|
ArteTVConcertIE,
|
||||||
ArteTVFutureIE,
|
ArteTVFutureIE,
|
||||||
ArteTVDDCIE,
|
ArteTVDDCIE,
|
||||||
|
ArteTVEmbedIE,
|
||||||
)
|
)
|
||||||
from .auengine import AUEngineIE
|
from .auengine import AUEngineIE
|
||||||
from .bambuser import BambuserIE, BambuserChannelIE
|
from .bambuser import BambuserIE, BambuserChannelIE
|
||||||
|
@ -75,9 +75,7 @@ class ArteTVPlus7IE(InfoExtractor):
|
|||||||
return self._extract_from_json_url(json_url, video_id, lang)
|
return self._extract_from_json_url(json_url, video_id, lang)
|
||||||
|
|
||||||
def _extract_from_json_url(self, json_url, video_id, lang):
|
def _extract_from_json_url(self, json_url, video_id, lang):
|
||||||
json_info = self._download_webpage(json_url, video_id, 'Downloading info json')
|
info = self._download_json(json_url, video_id)
|
||||||
self.report_extraction(video_id)
|
|
||||||
info = json.loads(json_info)
|
|
||||||
player_info = info['videoJsonPlayer']
|
player_info = info['videoJsonPlayer']
|
||||||
|
|
||||||
info_dict = {
|
info_dict = {
|
||||||
@ -99,6 +97,8 @@ class ArteTVPlus7IE(InfoExtractor):
|
|||||||
l = 'F'
|
l = 'F'
|
||||||
elif lang == 'de':
|
elif lang == 'de':
|
||||||
l = 'A'
|
l = 'A'
|
||||||
|
else:
|
||||||
|
l = lang
|
||||||
regexes = [r'VO?%s' % l, r'VO?.-ST%s' % l]
|
regexes = [r'VO?%s' % l, r'VO?.-ST%s' % l]
|
||||||
return any(re.match(r, f['versionCode']) for r in regexes)
|
return any(re.match(r, f['versionCode']) for r in regexes)
|
||||||
# Some formats may not be in the same language as the url
|
# Some formats may not be in the same language as the url
|
||||||
@ -228,3 +228,22 @@ class ArteTVConcertIE(ArteTVPlus7IE):
|
|||||||
'description': 'md5:486eb08f991552ade77439fe6d82c305',
|
'description': 'md5:486eb08f991552ade77439fe6d82c305',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ArteTVEmbedIE(ArteTVPlus7IE):
|
||||||
|
IE_NAME = 'arte.tv:embed'
|
||||||
|
_VALID_URL = r'''(?x)
|
||||||
|
http://www\.arte\.tv
|
||||||
|
/playerv2/embed\.php\?json_url=
|
||||||
|
(?P<json_url>
|
||||||
|
http://arte\.tv/papi/tvguide/videos/stream/player/
|
||||||
|
(?P<lang>[^/]+)/(?P<id>[^/]+)[^&]*
|
||||||
|
)
|
||||||
|
'''
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
mobj = re.match(self._VALID_URL, url)
|
||||||
|
video_id = mobj.group('id')
|
||||||
|
lang = mobj.group('lang')
|
||||||
|
json_url = mobj.group('json_url')
|
||||||
|
return self._extract_from_json_url(json_url, video_id, lang)
|
||||||
|
@ -197,6 +197,21 @@ class GenericIE(InfoExtractor):
|
|||||||
'description': 'No description',
|
'description': 'No description',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
# arte embed
|
||||||
|
{
|
||||||
|
'url': 'http://www.tv-replay.fr/redirection/20-03-14/x-enius-arte-10753389.html',
|
||||||
|
'md5': '7653032cbb25bf6c80d80f217055fa43',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '048195-004_PLUS7-F',
|
||||||
|
'ext': 'flv',
|
||||||
|
'title': 'X:enius',
|
||||||
|
'description': 'md5:d5fdf32ef6613cdbfd516ae658abf168',
|
||||||
|
'upload_date': '20140320',
|
||||||
|
},
|
||||||
|
'params': {
|
||||||
|
'skip_download': 'Requires rtmpdump'
|
||||||
|
}
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
def report_download_webpage(self, video_id):
|
def report_download_webpage(self, video_id):
|
||||||
@ -525,6 +540,13 @@ class GenericIE(InfoExtractor):
|
|||||||
if mobj is not None:
|
if mobj is not None:
|
||||||
return self.url_result(mobj.group('url'), 'TED')
|
return self.url_result(mobj.group('url'), 'TED')
|
||||||
|
|
||||||
|
# Look for embedded arte.tv player
|
||||||
|
mobj = re.search(
|
||||||
|
r'<script [^>]*?src="(?P<url>http://www\.arte\.tv/playerv2/embed[^"]+)"',
|
||||||
|
webpage)
|
||||||
|
if mobj is not None:
|
||||||
|
return self.url_result(mobj.group('url'), 'ArteTVEmbed')
|
||||||
|
|
||||||
# Start with something easy: JW Player in SWFObject
|
# Start with something easy: JW Player in SWFObject
|
||||||
mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage)
|
mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage)
|
||||||
if mobj is None:
|
if mobj is None:
|
||||||
|
Loading…
Reference in New Issue
Block a user