From 5ed058f247e95efeea20ba38145ba7943376d2ee Mon Sep 17 00:00:00 2001 From: mrBliss Date: Tue, 24 Oct 2017 14:08:44 +0200 Subject: [PATCH] Extract login logic shared by Medialaan and VrtNU to GigyaBase --- youtube_dl/extractor/canvas.py | 19 +++++++------------ youtube_dl/extractor/gigya.py | 21 +++++++++++++++++++++ youtube_dl/extractor/medialaan.py | 17 ++++------------- 3 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 youtube_dl/extractor/gigya.py diff --git a/youtube_dl/extractor/canvas.py b/youtube_dl/extractor/canvas.py index bfea61836..bc9739d8e 100644 --- a/youtube_dl/extractor/canvas.py +++ b/youtube_dl/extractor/canvas.py @@ -3,7 +3,11 @@ from __future__ import unicode_literals import re import json -from .common import InfoExtractor +from .common import ( + InfoExtractor, + GigyaBaseIE, +) + from ..compat import compat_HTTPError from ..utils import ( ExtractorError, @@ -11,7 +15,6 @@ from ..utils import ( float_or_none, int_or_none, parse_iso8601, - urlencode_postdata, ) @@ -174,7 +177,7 @@ class CanvasEenIE(InfoExtractor): } -class VrtNUIE(InfoExtractor): +class VrtNUIE(GigyaBaseIE): IE_DESC = 'VrtNU.be' _VALID_URL = r'https?://(?:www\.)?vrt\.be/(?Pvrtnu)/(?:[^/]+/)*(?P[^/?#&]+)' _TESTS = [{ @@ -212,15 +215,7 @@ class VrtNUIE(InfoExtractor): 'authMode': 'cookie', } - auth_info = self._download_json( - 'https://accounts.eu1.gigya.com/accounts.login', None, - note='Logging in', errnote='Unable to log in', - data=urlencode_postdata(auth_data)) - - error_message = auth_info.get('errorDetails') or auth_info.get('errorMessage') - if error_message: - raise ExtractorError( - 'Unable to login: %s' % error_message, expected=True) + auth_info = self._gigya_login(auth_data) # Sometimes authentication fails for no good reason, retry login_attempt = 1 diff --git a/youtube_dl/extractor/gigya.py b/youtube_dl/extractor/gigya.py new file mode 100644 index 000000000..2bfe1bb77 --- /dev/null +++ b/youtube_dl/extractor/gigya.py @@ -0,0 +1,21 @@ +from __future__ import unicode_literals + +from .common import InfoExtractor +from ..utils import ( + ExtractorError, + urlencode_postdata, +) + + +class GigyaBaseIE(InfoExtractor): + def _gigya_login(self, auth_data): + auth_info = self._download_json( + 'https://accounts.eu1.gigya.com/accounts.login', None, + note='Logging in', errnote='Unable to log in', + data=urlencode_postdata(auth_data)) + + error_message = auth_info.get('errorDetails') or auth_info.get('errorMessage') + if error_message: + raise ExtractorError( + 'Unable to login: %s' % error_message, expected=True) + return auth_info diff --git a/youtube_dl/extractor/medialaan.py b/youtube_dl/extractor/medialaan.py index 4c32fbc2c..ecd22c424 100644 --- a/youtube_dl/extractor/medialaan.py +++ b/youtube_dl/extractor/medialaan.py @@ -2,19 +2,18 @@ from __future__ import unicode_literals import re -from .common import InfoExtractor +from .common import GigyaBaseIE + from ..compat import compat_str from ..utils import ( - ExtractorError, int_or_none, parse_duration, try_get, unified_timestamp, - urlencode_postdata, ) -class MedialaanIE(InfoExtractor): +class MedialaanIE(GigyaBaseIE): _VALID_URL = r'''(?x) https?:// (?:www\.|nieuws\.)? @@ -119,15 +118,7 @@ class MedialaanIE(InfoExtractor): 'password': password, } - auth_info = self._download_json( - 'https://accounts.eu1.gigya.com/accounts.login', None, - note='Logging in', errnote='Unable to log in', - data=urlencode_postdata(auth_data)) - - error_message = auth_info.get('errorDetails') or auth_info.get('errorMessage') - if error_message: - raise ExtractorError( - 'Unable to login: %s' % error_message, expected=True) + auth_info = self._gigya_login(auth_data) self._uid = auth_info['UID'] self._uid_signature = auth_info['UIDSignature']