This commit is contained in:
Bart Smeets 2020-10-22 17:42:03 +02:00 committed by GitHub
commit f4d2341b35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 131 additions and 9 deletions

View File

@ -0,0 +1,30 @@
from __future__ import unicode_literals
from .common import InfoExtractor
from ..utils import ExtractorError
class CognitoBaseIE(InfoExtractor):
def _cognito_login(self, auth_data):
try:
import boto3
from warrant.aws_srp import AWSSRP
except ImportError:
raise ExtractorError('%s depends on boto3 and warrant.' % self.IE_NAME)
region = auth_data['PoolId'].split('_')[0]
client = boto3.client(
'cognito-idp',
region_name=region,
aws_access_key_id='SomeNonsenseValue',
aws_secret_access_key='YetAnotherNonsenseValue'
)
aws = AWSSRP(
username=auth_data['Username'],
password=auth_data['Password'],
pool_id=auth_data['PoolId'],
client_id=auth_data['ClientId'],
client=client
)
return aws.authenticate_user()

View File

@ -1316,7 +1316,7 @@ from .vidme import (
VidmeUserLikesIE,
)
from .vidzi import VidziIE
from .vier import VierIE, VierVideosIE
from .vier import VierIE, VierVideosIE, VierVijfKijkOnlineIE
from .viewlift import (
ViewLiftIE,
ViewLiftEmbedIE,

View File

@ -11,6 +11,105 @@ from ..utils import (
unified_strdate,
)
from .cognito import CognitoBaseIE
class VierVijfKijkOnlineIE(CognitoBaseIE):
IE_NAME = 'viervijfkijkonline'
IE_DESC = 'vier.be and vijf.be - Kijk Online'
_VALID_URL = r'https?://(?:www\.)?(?P<site>vier|vijf)\.be/video/(?P<series>(?!v3)[^/]+)/(?P<season>[^/]+)(/(?P<episode>[^/]+)|)'
_NETRC_MACHINE = 'vier'
_TESTS = [{
'url': 'https://www.vier.be/video/hotel-romantiek/2017/hotel-romantiek-aflevering-1',
'info_dict': {
'id': 'ebcd3c39-10a2-4730-b137-b0e7aaed247c',
'ext': 'mp4',
'title': 'Hotel Römantiek - Seizoen 1 - Aflevering 1',
'series': 'Hotel Römantiek',
'season_number': 1,
'episode_number': 1,
},
'skip': 'This video is only available for registered users'
}, {
'url': 'https://www.vier.be/video/blockbusters/in-juli-en-augustus-summer-classics',
'only_matching': True,
}, {
'url': 'https://www.vier.be/video/achter-de-rug/2017/achter-de-rug-seizoen-1-aflevering-6',
'only_matching': True,
}]
def _real_initialize(self):
self._logged_in = False
self.id_token = ''
def _login(self):
username, password = self._get_login_info()
if username is None or password is None:
self.raise_login_required()
auth_data = {
'PoolId': 'eu-west-1_dViSsKM5Y',
'ClientId': '6s1h851s8uplco5h6mqh1jac8m',
'Username': username,
'Password': password,
}
tokens = self._cognito_login(auth_data)
self.id_token = tokens['AuthenticationResult']['IdToken']
self._logged_in = True
def _real_extract(self, url):
if not self._logged_in:
self._login()
webpage = self._download_webpage(url, None)
title = self._html_search_regex(
r'<h3 class="metadata__title">(.+?)</h3>',
webpage, 'title')
title_split = title.split(' - ')
series = title_split[0].strip()
if len(title_split) == 3:
if 'Seizoen' in title_split[1]:
season = title_split[1].split('Seizoen')[1].strip()
else:
season = title_split[1].strip()
episode = title_split[2].split('Aflevering')[1].strip()
else:
season = None
episode = title_split[1].split('Aflevering')[1].strip()
video_id = self._html_search_regex(
r'<div class="video-container[^>]+data-file="(.+?)"[^>]+>',
webpage, 'video_id')
api_url = 'https://api.viervijfzes.be/content/%s' % (video_id)
api_headers = {
'authorization': self.id_token,
}
api = self._download_json(
api_url,
None, note='Peforming API Call', errnote='API Call Failed',
headers=api_headers,
)
formats = []
formats.extend(self._extract_m3u8_formats(
api['video']['S'], video_id, 'mp4', entry_protocol='m3u8_native',
m3u8_id='HLS', fatal=False))
return {
'id': video_id,
'title': title,
'series': series,
'season_number': int_or_none(season),
'episode_number': int_or_none(episode),
'formats': formats,
}
class VierIE(InfoExtractor):
IE_NAME = 'vier'
@ -20,8 +119,7 @@ class VierIE(InfoExtractor):
(?:www\.)?(?P<site>vier|vijf)\.be/
(?:
(?:
[^/]+/videos|
video(?:/[^/]+)*
[^/]+/videos
)/
(?P<display_id>[^/]+)(?:/(?P<id>\d+))?|
(?:
@ -100,12 +198,6 @@ class VierIE(InfoExtractor):
}, {
'url': 'https://www.vijf.be/embed/video/public/4093',
'only_matching': True,
}, {
'url': 'https://www.vier.be/video/blockbusters/in-juli-en-augustus-summer-classics',
'only_matching': True,
}, {
'url': 'https://www.vier.be/video/achter-de-rug/2017/achter-de-rug-seizoen-1-aflevering-6',
'only_matching': True,
}]
def _real_initialize(self):