You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.9 KiB
59 lines
1.9 KiB
from __future__ import unicode_literals |
|
|
|
import re |
|
|
|
from .common import InfoExtractor |
|
from ..utils import ( |
|
js_to_json, |
|
parse_duration, |
|
unescapeHTML, |
|
) |
|
|
|
|
|
class DRBonanzaIE(InfoExtractor): |
|
_VALID_URL = r'https?://(?:www\.)?dr\.dk/bonanza/[^/]+/\d+/[^/]+/(?P<id>\d+)/(?P<display_id>[^/?#&]+)' |
|
_TEST = { |
|
'url': 'http://www.dr.dk/bonanza/serie/154/matador/40312/matador---0824-komme-fremmede-', |
|
'info_dict': { |
|
'id': '40312', |
|
'display_id': 'matador---0824-komme-fremmede-', |
|
'ext': 'mp4', |
|
'title': 'MATADOR - 08:24. "Komme fremmede".', |
|
'description': 'md5:77b4c1ac4d4c1b9d610ab4395212ff84', |
|
'thumbnail': r're:^https?://.*\.(?:gif|jpg)$', |
|
'duration': 4613, |
|
}, |
|
} |
|
|
|
def _real_extract(self, url): |
|
mobj = re.match(self._VALID_URL, url) |
|
video_id, display_id = mobj.group('id', 'display_id') |
|
|
|
webpage = self._download_webpage(url, display_id) |
|
|
|
info = self._parse_html5_media_entries( |
|
url, webpage, display_id, m3u8_id='hls', |
|
m3u8_entry_protocol='m3u8_native')[0] |
|
self._sort_formats(info['formats']) |
|
|
|
asset = self._parse_json( |
|
self._search_regex( |
|
r'(?s)currentAsset\s*=\s*({.+?})\s*</script', webpage, 'asset'), |
|
display_id, transform_source=js_to_json) |
|
|
|
title = unescapeHTML(asset['AssetTitle']).strip() |
|
|
|
def extract(field): |
|
return self._search_regex( |
|
r'<div[^>]+>\s*<p>%s:<p>\s*</div>\s*<div[^>]+>\s*<p>([^<]+)</p>' % field, |
|
webpage, field, default=None) |
|
|
|
info.update({ |
|
'id': asset.get('AssetId') or video_id, |
|
'display_id': display_id, |
|
'title': title, |
|
'description': extract('Programinfo'), |
|
'duration': parse_duration(extract('Tid')), |
|
'thumbnail': asset.get('AssetImageUrl'), |
|
}) |
|
return info
|
|
|