[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
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
import re
|
||||
|
||||
from .common import InfoExtractor
|
||||
|
@ -54,34 +55,51 @@ class VRTIE(InfoExtractor):
|
|||
def _real_extract(self, url):
|
||||
site, display_id = re.match(self._VALID_URL, url).groups()
|
||||
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']
|
||||
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(
|
||||
page_title = strip_or_none(get_element_by_class(
|
||||
'vrt-title', webpage) or self._html_search_meta(
|
||||
['og:title', 'twitter:title', 'name'], webpage))
|
||||
description = self._html_search_meta(
|
||||
page_description = self._html_search_meta(
|
||||
['og:description', 'twitter:description', 'description'], webpage)
|
||||
if description == '…':
|
||||
description = None
|
||||
timestamp = unified_timestamp(self._html_search_meta(
|
||||
if page_description == '…':
|
||||
page_description = None
|
||||
page_timestamp = unified_timestamp(self._html_search_meta(
|
||||
'article:published_time', webpage))
|
||||
|
||||
return {
|
||||
'_type': 'url_transparent',
|
||||
'id': asset_id,
|
||||
'display_id': display_id,
|
||||
'title': title,
|
||||
'description': description,
|
||||
'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',
|
||||
}
|
||||
def entries():
|
||||
matches = re.findall(r'(<[^>]+class="vrtvideo(?: [^"]*)?"[^>]*>)', webpage)
|
||||
if not matches:
|
||||
self._downloader.report_warning('no vrt videos found on page')
|
||||
return
|
||||
|
||||
for tag_string in matches:
|
||||
attrs = extract_attributes(tag_string)
|
||||
asset_id = attrs['data-video-id']
|
||||
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]
|
||||
|
||||
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