From 07f32eebacfb94768c344acc76a9820daeb03231 Mon Sep 17 00:00:00 2001 From: gkoelln Date: Wed, 10 May 2017 14:24:02 -0500 Subject: [PATCH 1/2] [adobepass] Add PSVue support --- youtube_dl/extractor/adobepass.py | 41 ++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/youtube_dl/extractor/adobepass.py b/youtube_dl/extractor/adobepass.py index 7da96c65c..c7a305d89 100644 --- a/youtube_dl/extractor/adobepass.py +++ b/youtube_dl/extractor/adobepass.py @@ -16,6 +16,11 @@ from ..utils import ( MSO_INFO = { + 'sony_auth-gateway_net': { + 'name': 'Playstation Vue', + 'username_field': 'j_username', + 'password_field': 'j_password', + }, 'DTV': { 'name': 'DIRECTV', 'username_field': 'username', @@ -1350,6 +1355,26 @@ class AdobePassIE(InfoExtractor): 'Content-Type': 'application/x-www-form-urlencoded', }) + def process_redirects(page_res, video_id, note, lastbookend=False): + page, urlh = page_res + while 'Redirecting...' in page: + redirect_url = self._html_search_regex( + r'content="0;\s*url=([^\'"]+)', + page, 'meta refresh redirect', default=None) + if redirect_url: + page_res = self._download_webpage_handle( + redirect_url, video_id, note) + else: + form_data = self._hidden_inputs(page) + url = urlh.geturl() + if lastbookend: + url.replace('firstbookend', 'lastbookend') + page_res = self._download_webpage_handle( + url, video_id, note, + query=form_data) + page, urlh = page_res + return page_res + def raise_mvpd_required(): raise ExtractorError( 'This video is only available for users of participating TV providers. ' @@ -1461,14 +1486,22 @@ class AdobePassIE(InfoExtractor): 'Content-Type': 'application/x-www-form-urlencoded' }) else: - provider_login_page_res = post_form( - provider_redirect_page_res, 'Downloading Provider Login Page') + provider_login_page_res = process_redirects( + provider_redirect_page_res, video_id, 'Downloading Provider Login Page') mvpd_confirm_page_res = post_form(provider_login_page_res, 'Logging in', { mso_info.get('username_field', 'username'): username, mso_info.get('password_field', 'password'): password, }) - if mso_id != 'Rogers': - post_form(mvpd_confirm_page_res, 'Confirming Login') + mvpd_confirm_page_res = process_redirects( + mvpd_confirm_page_res, video_id, 'Logging in', True) + mvpd_confirm_page, urlh = mvpd_confirm_page_res + if 'method="post"' in mvpd_confirm_page: + mvpd_confirm_page_res = post_form(mvpd_confirm_page_res, 'Confirming Login') + mvpd_confirm_page_res = process_redirects( + mvpd_confirm_page_res, video_id, 'Confirming Login', True) + mvpd_confirm_page, urlh = mvpd_confirm_page_res + if 'method="post"' in mvpd_confirm_page: + post_form(mvpd_confirm_page_res, 'Confirming Login') session = self._download_webpage( self._SERVICE_PROVIDER_TEMPLATE % 'session', video_id, From e1cd38b4f6395a319420e6565c5fd47b119a7b6a Mon Sep 17 00:00:00 2001 From: gkoelln Date: Tue, 6 Jun 2017 16:41:19 -0500 Subject: [PATCH 2/2] [adobepass] Check for form Check for form before redirect --- youtube_dl/extractor/adobepass.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/youtube_dl/extractor/adobepass.py b/youtube_dl/extractor/adobepass.py index c7a305d89..78c6a73ac 100644 --- a/youtube_dl/extractor/adobepass.py +++ b/youtube_dl/extractor/adobepass.py @@ -1486,6 +1486,12 @@ class AdobePassIE(InfoExtractor): 'Content-Type': 'application/x-www-form-urlencoded' }) else: + provider_redirect_page, urlh = provider_redirect_page_res + if '' in provider_redirect_page: + provider_login_page_res = post_form( + provider_redirect_page_res, 'Downloading Provider Login Page') + else: + provider_login_page_res = provider_redirect_page_res provider_login_page_res = process_redirects( provider_redirect_page_res, video_id, 'Downloading Provider Login Page') mvpd_confirm_page_res = post_form(provider_login_page_res, 'Logging in', {