diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 4b3092028..a4c944035 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -1460,6 +1460,7 @@ from .yapfiles import YapFilesIE from .yesjapan import YesJapanIE from .yinyuetai import YinYueTaiIE from .ynet import YnetIE +from .yledl import YleDLIE from .youjizz import YouJizzIE from .youku import ( YoukuIE, diff --git a/youtube_dl/extractor/yledl.py b/youtube_dl/extractor/yledl.py new file mode 100644 index 000000000..e19e105e8 --- /dev/null +++ b/youtube_dl/extractor/yledl.py @@ -0,0 +1,69 @@ +# coding: utf-8 +from __future__ import unicode_literals +import subprocess +import json + +from .common import InfoExtractor + + +class YleDLIE(InfoExtractor): + _VALID_URL = r'https?://(?:areena|arenan).yle.fi/(?P[0-9]-[0-9]+)' + _GEO_COUNTRIES = ['FI'] + + _TEST = { + 'url': 'https://areena.yle.fi/1-4256816', + 'md5': 'b9658c5960a8c2ca4ba8f1b0ff079df2', + 'info_dict': { + 'id': '1_iq074q8b', + 'ext': 'mxf', + 'title': 'Luottomies | Luottomies jouluspeciaali', + 'description': + 'Tommia harmittaa kun sukulaiset ovat tulossa pilaamaan ' + 'mukavan perhejoulun. Muuttuuko mieli isosta yllätyksestä? ' + 'Joulun erikoisjakson on ohjannut Jalmari Helander.', + 'upload_date': '20171207', + 'height': 1080, + 'width': 1920, + 'fps': 25, + 'duration': 1302, + 'timestamp': 1512633989, + 'extractor': 'Kaltura', + 'uploader_id': 'ovp@yle.fi', + 'webpage_url_basename': '1-4256816', + 'webpage_url': 'https://areena.yle.fi/1-4256816' + } + } + + def _real_extract(self, url): + props = {} + + # Get essential data + props['id'] = self._match_id(url) + + cp = subprocess.run(["yle-dl", "-q", "--showmetadata", url], capture_output=True, encoding='utf-8') + cp.check_returncode() + yledl = json.loads(cp.stdout)[0] + + props['title'] = yledl.get('title', '') + description = yledl.get('description', None) + if description: + props['description'] = description + + ysubs = yledl.get('subtitles', []) + subtitles = {} + for s in ysubs: + subtitles[s['language']] = [{'url': s['url']}] + props['subtitles'] = subtitles + + formats = [] + for f in yledl.get('flavors', []): + formats.append({ + 'url': f.get('url', ""), + 'tbr': f.get('bitrate', None), + 'width': f.get('width', None), + 'height': f.get('height', None), + 'protocol': 'm3u8', + }) + props['formats'] = formats + + return props