forked from Mirrors/l1ving_youtube-dl
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
4 years ago
|
# coding: utf-8
|
||
|
from __future__ import unicode_literals
|
||
|
|
||
|
import re
|
||
|
from urllib.error import HTTPError
|
||
|
|
||
|
from .common import InfoExtractor
|
||
|
|
||
|
|
||
|
class TubeTuGrazIE(InfoExtractor):
|
||
|
_VALID_URL = r'https?://tube.tugraz\.at/paella/ui/watch\.html\?id=(?P<video_id>[0-9a-f\-]+)'
|
||
|
_TEST = {
|
||
|
'url': 'https://tube.tugraz.at/paella/ui/watch.html?id=85dd2fa9-91ad-4d49-8c85-416fc357a3c3',
|
||
|
'md5': '9e6c926c2923ae090ce67c84e880cfbf',
|
||
|
'info_dict': {
|
||
|
'id': '85dd2fa9-91ad-4d49-8c85-416fc357a3c3',
|
||
|
'ext': 'mp4',
|
||
|
'title': '#13',
|
||
|
'episode': '#13',
|
||
|
'creator': 'Fuchs M',
|
||
|
'series': '439.002 18W Elektronische Schaltungstechnik 2',
|
||
|
'duration': 4790040,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
def _real_extract(self, url):
|
||
|
mobj = re.match(self._VALID_URL, url)
|
||
|
|
||
|
video_id = mobj.group('video_id')
|
||
|
|
||
|
information_json = self._download_json("https://tube.tugraz.at/search/episode.json", "information json")['search-results']['result']
|
||
|
information = list(filter(lambda video: video["id"] == video_id, information_json))[0]
|
||
|
|
||
|
m3u8_urls = []
|
||
|
for type_ in ("presentation", "presenter"):
|
||
|
m3u8_urls.append("https://wowza.tugraz.at/matterhorn_engage/smil:engage-player_%s_%s.smil/playlist.m3u8" % (video_id, type_))
|
||
|
|
||
|
formats = []
|
||
|
for m3u8_url in m3u8_urls:
|
||
|
try:
|
||
|
self._request_webpage(m3u8_url, video_id)
|
||
|
formats.append(self._extract_m3u8_formats(m3u8_url, video_id, ext="mp4")[0])
|
||
|
except HTTPError:
|
||
|
continue
|
||
|
try:
|
||
|
series = information['mediapackage']['seriestitle']
|
||
|
except KeyError:
|
||
|
series = None
|
||
|
|
||
|
return {
|
||
|
'id': video_id,
|
||
|
'title': information['mediapackage']['title'],
|
||
|
'episode': information['mediapackage']['title'],
|
||
|
'creator': information['dcCreator'],
|
||
|
'series': series,
|
||
|
'duration': information['mediapackage']['duration'],
|
||
|
|
||
|
'formats': formats,
|
||
|
}
|