From 60860c2e95888aa04508dfef21cf7269abeefafb Mon Sep 17 00:00:00 2001 From: Tony Lefebvre Date: Sun, 28 Apr 2019 16:00:11 +0200 Subject: [PATCH 1/3] [17049] rudimental support of password-protected events (playlist) in livestream.com --- youtube_dl/extractor/livestream.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/youtube_dl/extractor/livestream.py b/youtube_dl/extractor/livestream.py index e55b1a202..71cddc46a 100644 --- a/youtube_dl/extractor/livestream.py +++ b/youtube_dl/extractor/livestream.py @@ -3,6 +3,8 @@ from __future__ import unicode_literals import re import itertools +import requests + from .common import InfoExtractor from ..compat import ( compat_str, @@ -61,6 +63,7 @@ class LivestreamIE(InfoExtractor): 'only_matching': True, }] _API_URL_TEMPLATE = 'http://livestream.com/api/accounts/%s/events/%s' + _API_NEW_URL_TEMPLATE = 'https://api.new.livestream.com/accounts/%s/events/%s' def _parse_smil_formats(self, smil, smil_url, video_id, namespace=None, f4m_params=None, transform_rtmp_url=None): base_ele = find_xpath_attr( @@ -217,6 +220,23 @@ class LivestreamIE(InfoExtractor): event = mobj.group('event_id') or mobj.group('event_name') account = mobj.group('account_id') or mobj.group('account_name') api_url = self._API_URL_TEMPLATE % (account, event) + api_new_url = self._API_NEW_URL_TEMPLATE % (account, event) + + if self._downloader is not None: + downloader_params = self._downloader.params + video_password = downloader_params.get("videopassword") + if video_password: + # use the given video password to unlock livestream.com event + self.to_screen("Using video password") + password_request_url = api_new_url + "/password_tokens" + r = requests.post(password_request_url, { + "password": video_password + }) + r.raise_for_status() + password_token = r.json()["password_token"] + event_key = event + ":pt:" + password_token + api_url = self._API_URL_TEMPLATE % (account, event_key) + if video_id: video_data = self._download_json( api_url + '/videos/%s' % video_id, video_id) From 02a17992b87795e828d1067a099d35d374ca6641 Mon Sep 17 00:00:00 2001 From: Tony Lefebvre Date: Sun, 28 Apr 2019 21:37:46 +0200 Subject: [PATCH 2/3] [20875] fix Can't be None --- youtube_dl/extractor/livestream.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/youtube_dl/extractor/livestream.py b/youtube_dl/extractor/livestream.py index 71cddc46a..c53c79361 100644 --- a/youtube_dl/extractor/livestream.py +++ b/youtube_dl/extractor/livestream.py @@ -222,20 +222,19 @@ class LivestreamIE(InfoExtractor): api_url = self._API_URL_TEMPLATE % (account, event) api_new_url = self._API_NEW_URL_TEMPLATE % (account, event) - if self._downloader is not None: - downloader_params = self._downloader.params - video_password = downloader_params.get("videopassword") - if video_password: - # use the given video password to unlock livestream.com event - self.to_screen("Using video password") - password_request_url = api_new_url + "/password_tokens" - r = requests.post(password_request_url, { - "password": video_password - }) - r.raise_for_status() - password_token = r.json()["password_token"] - event_key = event + ":pt:" + password_token - api_url = self._API_URL_TEMPLATE % (account, event_key) + downloader_params = self._downloader.params + video_password = downloader_params.get("videopassword") + if video_password: + # use the given video password to unlock livestream.com event + self.to_screen("Using video password") + password_request_url = api_new_url + "/password_tokens" + r = requests.post(password_request_url, { + "password": video_password + }) + r.raise_for_status() + password_token = r.json()["password_token"] + event_key = event + ":pt:" + password_token + api_url = self._API_URL_TEMPLATE % (account, event_key) if video_id: video_data = self._download_json( From 89c7acf6171c168e1c6291b0898901f01a1b6223 Mon Sep 17 00:00:00 2001 From: Tony Lefebvre Date: Sun, 28 Apr 2019 22:09:23 +0200 Subject: [PATCH 3/3] [20875] stop using requests --- youtube_dl/extractor/livestream.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/youtube_dl/extractor/livestream.py b/youtube_dl/extractor/livestream.py index c53c79361..c9fc32f67 100644 --- a/youtube_dl/extractor/livestream.py +++ b/youtube_dl/extractor/livestream.py @@ -1,10 +1,9 @@ from __future__ import unicode_literals +import json import re import itertools -import requests - from .common import InfoExtractor from ..compat import ( compat_str, @@ -226,13 +225,15 @@ class LivestreamIE(InfoExtractor): video_password = downloader_params.get("videopassword") if video_password: # use the given video password to unlock livestream.com event - self.to_screen("Using video password") password_request_url = api_new_url + "/password_tokens" - r = requests.post(password_request_url, { - "password": video_password - }) - r.raise_for_status() - password_token = r.json()["password_token"] + r = self._download_json( + password_request_url, video_id, + note="Getting video token", + errnote="Unable to get token. Is your password correct?", + data=json.dumps({"password": video_password}).encode(), + headers={"Content-Type": "application/json"} + ) + password_token = r["password_token"] event_key = event + ":pt:" + password_token api_url = self._API_URL_TEMPLATE % (account, event_key)