[vrt] Extract all videos on page
This commit is contained in:
parent
5a0e54f64f
commit
380b0da4da
1 changed files with 43 additions and 25 deletions
|
@ -1,6 +1,7 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import json
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
|
@ -54,34 +55,51 @@ class VRTIE(InfoExtractor):
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
site, display_id = re.match(self._VALID_URL, url).groups()
|
site, display_id = re.match(self._VALID_URL, url).groups()
|
||||||
webpage = self._download_webpage(url, display_id)
|
webpage = self._download_webpage(url, display_id)
|
||||||
attrs = extract_attributes(self._search_regex(
|
|
||||||
r'(<[^>]+class="vrtvideo( [^"]*)?"[^>]*>)', webpage, 'vrt video'))
|
|
||||||
|
|
||||||
asset_id = attrs['data-video-id']
|
page_title = strip_or_none(get_element_by_class(
|
||||||
publication_id = attrs.get('data-publication-id')
|
|
||||||
if publication_id:
|
|
||||||
asset_id = publication_id + '$' + asset_id
|
|
||||||
client = attrs.get('data-client-code') or self._CLIENT_MAP[site]
|
|
||||||
|
|
||||||
title = strip_or_none(get_element_by_class(
|
|
||||||
'vrt-title', webpage) or self._html_search_meta(
|
'vrt-title', webpage) or self._html_search_meta(
|
||||||
['og:title', 'twitter:title', 'name'], webpage))
|
['og:title', 'twitter:title', 'name'], webpage))
|
||||||
description = self._html_search_meta(
|
page_description = self._html_search_meta(
|
||||||
['og:description', 'twitter:description', 'description'], webpage)
|
['og:description', 'twitter:description', 'description'], webpage)
|
||||||
if description == '…':
|
if page_description == '…':
|
||||||
description = None
|
page_description = None
|
||||||
timestamp = unified_timestamp(self._html_search_meta(
|
page_timestamp = unified_timestamp(self._html_search_meta(
|
||||||
'article:published_time', webpage))
|
'article:published_time', webpage))
|
||||||
|
|
||||||
return {
|
def entries():
|
||||||
'_type': 'url_transparent',
|
matches = re.findall(r'(<[^>]+class="vrtvideo(?: [^"]*)?"[^>]*>)', webpage)
|
||||||
'id': asset_id,
|
if not matches:
|
||||||
'display_id': display_id,
|
self._downloader.report_warning('no vrt videos found on page')
|
||||||
'title': title,
|
return
|
||||||
'description': description,
|
|
||||||
'thumbnail': attrs.get('data-posterimage'),
|
for tag_string in matches:
|
||||||
'timestamp': timestamp,
|
attrs = extract_attributes(tag_string)
|
||||||
'duration': float_or_none(attrs.get('data-duration'), 1000),
|
asset_id = attrs['data-video-id']
|
||||||
'url': 'https://mediazone.vrt.be/api/v1/%s/assets/%s' % (client, asset_id),
|
publication_id = attrs.get('data-publication-id')
|
||||||
'ie_key': 'Canvas',
|
if publication_id:
|
||||||
}
|
asset_id = publication_id + '$' + asset_id
|
||||||
|
client = attrs.get('data-client-code') or self._CLIENT_MAP[site]
|
||||||
|
|
||||||
|
analytics_str = attrs.get('data-analytics')
|
||||||
|
if analytics_str:
|
||||||
|
analytics = json.loads(analytics_str)
|
||||||
|
timestamp = unified_timestamp(analytics.get("onTime")) or page_timestamp
|
||||||
|
title = analytics.get("episode") or analytics.get("program") or page_title
|
||||||
|
else:
|
||||||
|
timestamp = page_timestamp
|
||||||
|
title = page_title
|
||||||
|
|
||||||
|
yield {
|
||||||
|
'_type': 'url_transparent',
|
||||||
|
'id': asset_id,
|
||||||
|
'display_id': display_id,
|
||||||
|
'title': title,
|
||||||
|
'thumbnail': attrs.get('data-posterimage'),
|
||||||
|
'timestamp': timestamp,
|
||||||
|
'duration': float_or_none(attrs.get('data-duration'), 1000),
|
||||||
|
'url': 'https://mediazone.vrt.be/api/v1/%s/assets/%s' % (client, asset_id),
|
||||||
|
'ie_key': 'Canvas',
|
||||||
|
}
|
||||||
|
|
||||||
|
return self.playlist_result(
|
||||||
|
entries(), display_id, page_title, page_description)
|
||||||
|
|
Loading…
Reference in a new issue