From 12dc5ea0951a5c0264a7f594b144426f42fa2670 Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 20 Apr 2018 20:56:26 +0300 Subject: [PATCH 01/11] Add MakoTV extractor --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/makotv.py | 64 ++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 youtube_dl/extractor/makotv.py diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 3570fa165..f57a662b8 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -579,6 +579,7 @@ from .mailru import ( ) from .makerschannel import MakersChannelIE from .makertv import MakerTVIE +from .makotv import MakoTVIE from .mangomolo import ( MangomoloVideoIE, MangomoloLiveIE, diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py new file mode 100644 index 000000000..45d7f3798 --- /dev/null +++ b/youtube_dl/extractor/makotv.py @@ -0,0 +1,64 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + +from urllib import urlencode +from urlparse import urlparse, urlunparse, urljoin + + +class MakoTVIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?mako\.co\.il/mako-vod-.+/VOD-(?P[0-9a-f]{18})\.htm' + _TEST = { + 'url': 'https://www.mako.co.il/mako-vod-keshet/parliament-s1/VOD-5df5a86c1966831006.htm', + 'md5': 'cd8cdff75390f8521831ec5049841764', + 'info_dict': { + 'id': '5df5a86c1966831006', + 'ext': 'm3u8', + 'title': 'הפרלמנט | פרק 1 לצפייה ישירה | makoTV ', + 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.*\.jpg$', # https://img.mako.co.il/2012/07/08/Parlament_01_VOD_c.jpg + 'description': 'שאולי, אמציה, הקטור, קרקו ואבי מקבלים סדרה משלהם. כל הפרקים של הפרלמנט לצפייה ישירה | makoTV ', + 'upload_date': '20120708', + 'timestamp': 1341751140 + } + } + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + + parsed_url = list(urlparse(url)) + parsed_url[4] = urlencode({'type': 'service'}) + service = self._download_json(urlunparse(parsed_url), video_id) + video = service['root']['video'] + + config_new = self._download_xml('https://rcs.mako.co.il/flash_swf/players/makoPlayer/configNew.xml', video_id) + playlist_url = config_new.findtext('./PlaylistUrl') + playlist_url = playlist_url.replace('$$vcmid$$', video['guid']) + playlist_url = playlist_url.replace('$$videoChannelId$$', video['chId']) + playlist_url = playlist_url.replace('$$galleryChannelId$$', video['galleryChId']) + playlist = self._download_json('https://www.mako.co.il' + playlist_url, video_id) + + # config = self._download_json('https://www.mako.co.il/makotv/config.json', video_id) + # get_ticket_service = config['sources']['billing-services']['get-ticket-service'] + formats = [] + for media in playlist['media']: + tickets = self._download_json('https://mass.mako.co.il/ClicksStatistics/entitlementsServicesV2.jsp?et=gt&lp={}&rv={}'.format(media['url'], media['cdn']), video_id) + assert tickets['status'] == 'success' + for ticket in tickets['tickets']: + ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', '{}?{}'.format(ticket['url'], ticket['ticket'])) + formats.extend(self._extract_m3u8_formats(ticket_url, video_id)) + + self._sort_formats(formats) + + info = self._search_json_ld(webpage, video_id) + info.update({ + 'id': video_id, + 'title': self._og_search_title(webpage), + 'thumbnail': self._og_search_thumbnail(webpage), + 'description': self._og_search_description(webpage), + 'formats': formats + # TODO more properties (see youtube_dl/extractor/common.py) + }) + + return info From 29f5223562e2197e03483efa1d1ae4d637264a6d Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 20 Apr 2018 20:56:26 +0300 Subject: [PATCH 02/11] [makotv] Add new extractor --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/makotv.py | 61 ++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 youtube_dl/extractor/makotv.py diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 3570fa165..f57a662b8 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -579,6 +579,7 @@ from .mailru import ( ) from .makerschannel import MakersChannelIE from .makertv import MakerTVIE +from .makotv import MakoTVIE from .mangomolo import ( MangomoloVideoIE, MangomoloLiveIE, diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py new file mode 100644 index 000000000..d794e85b1 --- /dev/null +++ b/youtube_dl/extractor/makotv.py @@ -0,0 +1,61 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + +from urllib import urlencode +from urlparse import urlparse, urlunparse, urljoin + + +class MakoTVIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?mako\.co\.il/mako-vod-.+/VOD-(?P[0-9a-f]{18})\.htm' + _TEST = { + 'url': 'https://www.mako.co.il/mako-vod-keshet/parliament-s1/VOD-5df5a86c1966831006.htm', + 'md5': 'cd8cdff75390f8521831ec5049841764', + 'info_dict': { + 'id': '5df5a86c1966831006', + 'ext': 'm3u8', + 'title': 'הפרלמנט | פרק 1 לצפייה ישירה | makoTV ', + 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.*\.jpg$', + 'description': 'שאולי, אמציה, הקטור, קרקו ואבי מקבלים סדרה משלהם. כל הפרקים של הפרלמנט לצפייה ישירה | makoTV ', + 'upload_date': '20120708', + 'timestamp': 1341751140 + } + } + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + + parsed_url = list(urlparse(url)) + parsed_url[4] = urlencode({'type': 'service'}) + service = self._download_json(urlunparse(parsed_url), video_id) + video = service['root']['video'] + + config_new = self._download_xml('https://rcs.mako.co.il/flash_swf/players/makoPlayer/configNew.xml', video_id) + playlist_url = config_new.findtext('./PlaylistUrl') + playlist_url = playlist_url.replace('$$vcmid$$', video['guid']) + playlist_url = playlist_url.replace('$$videoChannelId$$', video['chId']) + playlist_url = playlist_url.replace('$$galleryChannelId$$', video['galleryChId']) + playlist = self._download_json('https://www.mako.co.il' + playlist_url, video_id) + + formats = [] + for media in playlist['media']: + tickets = self._download_json('https://mass.mako.co.il/ClicksStatistics/entitlementsServicesV2.jsp?et=gt&lp={}&rv={}'.format(media['url'], media['cdn']), video_id) + assert tickets['status'] == 'success' + for ticket in tickets['tickets']: + ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', '{}?{}'.format(ticket['url'], ticket['ticket'])) + formats.extend(self._extract_m3u8_formats(ticket_url, video_id)) + + self._sort_formats(formats) + + info = self._search_json_ld(webpage, video_id) + info.update({ + 'id': video_id, + 'title': self._og_search_title(webpage), + 'thumbnail': self._og_search_thumbnail(webpage), + 'description': self._og_search_description(webpage), + 'formats': formats + }) + + return info From ed6f000f329f2fcb53edb44a685f20f8b47f8e89 Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 20 Apr 2018 21:39:51 +0300 Subject: [PATCH 03/11] [makotv] Add support for Python 3 --- youtube_dl/extractor/makotv.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index d794e85b1..b1155f9a2 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -3,8 +3,11 @@ from __future__ import unicode_literals from .common import InfoExtractor -from urllib import urlencode -from urlparse import urlparse, urlunparse, urljoin +try: + from urllib import urlencode + from urlparse import urlparse, urlunparse, urljoin +except ImportError: + from urllib.parse import urlencode, urlparse, urlunparse, urljoin class MakoTVIE(InfoExtractor): From c570bd5a36739ec01049c1b5385000d434d18d3c Mon Sep 17 00:00:00 2001 From: relrelb Date: Tue, 1 May 2018 16:42:42 +0300 Subject: [PATCH 04/11] Fixes --- youtube_dl/extractor/makotv.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index b1155f9a2..f286a86de 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -3,11 +3,10 @@ from __future__ import unicode_literals from .common import InfoExtractor -try: - from urllib import urlencode - from urlparse import urlparse, urlunparse, urljoin -except ImportError: - from urllib.parse import urlencode, urlparse, urlunparse, urljoin +from ..utils import ( + update_url_query, + urljoin +) class MakoTVIE(InfoExtractor): @@ -30,9 +29,7 @@ class MakoTVIE(InfoExtractor): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) - parsed_url = list(urlparse(url)) - parsed_url[4] = urlencode({'type': 'service'}) - service = self._download_json(urlunparse(parsed_url), video_id) + service = self._download_json(update_url_query(url, {'type': 'service'}), video_id) video = service['root']['video'] config_new = self._download_xml('https://rcs.mako.co.il/flash_swf/players/makoPlayer/configNew.xml', video_id) @@ -40,15 +37,16 @@ class MakoTVIE(InfoExtractor): playlist_url = playlist_url.replace('$$vcmid$$', video['guid']) playlist_url = playlist_url.replace('$$videoChannelId$$', video['chId']) playlist_url = playlist_url.replace('$$galleryChannelId$$', video['galleryChId']) - playlist = self._download_json('https://www.mako.co.il' + playlist_url, video_id) + playlist = self._download_json(urljoin('https://www.mako.co.il', playlist_url), video_id) formats = [] - for media in playlist['media']: - tickets = self._download_json('https://mass.mako.co.il/ClicksStatistics/entitlementsServicesV2.jsp?et=gt&lp={}&rv={}'.format(media['url'], media['cdn']), video_id) - assert tickets['status'] == 'success' - for ticket in tickets['tickets']: - ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', '{}?{}'.format(ticket['url'], ticket['ticket'])) - formats.extend(self._extract_m3u8_formats(ticket_url, video_id)) + for media in playlist.get('media', []): + tickets = self._download_json('https://mass.mako.co.il/ClicksStatistics/entitlementsServicesV2.jsp', video_id, fatal=False, query={'et': 'gt', 'lp': media['url'], 'rv': media['cdn']}) + if tickets is None or tickets.get('status') != 'success': + continue + for ticket in tickets.get('tickets', {}): + ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', ticket['url']) + "?" + ticket['ticket'] + formats.extend(self._extract_m3u8_formats(ticket_url, video_id, fatal=False)) self._sort_formats(formats) From 8cf21d4e99948818ea92189d2b6134bc5aea2ac6 Mon Sep 17 00:00:00 2001 From: relrelb Date: Wed, 9 Oct 2019 22:50:52 +0300 Subject: [PATCH 05/11] CR --- youtube_dl/extractor/makotv.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index f286a86de..70af27ff9 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -5,7 +5,7 @@ from .common import InfoExtractor from ..utils import ( update_url_query, - urljoin + urljoin, ) @@ -29,7 +29,8 @@ class MakoTVIE(InfoExtractor): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) - service = self._download_json(update_url_query(url, {'type': 'service'}), video_id) + service_query = {'type': 'service'} + service = self._download_json(update_url_query(url, service_query), video_id) video = service['root']['video'] config_new = self._download_xml('https://rcs.mako.co.il/flash_swf/players/makoPlayer/configNew.xml', video_id) @@ -41,7 +42,13 @@ class MakoTVIE(InfoExtractor): formats = [] for media in playlist.get('media', []): - tickets = self._download_json('https://mass.mako.co.il/ClicksStatistics/entitlementsServicesV2.jsp', video_id, fatal=False, query={'et': 'gt', 'lp': media['url'], 'rv': media['cdn']}) + tickets_url = 'https://mass.mako.co.il/ClicksStatistics/entitlementsServicesV2.jsp' + tickets_query = { + 'et': 'gt', + 'lp': media['url'], + 'rv': media['cdn'], + } + tickets = self._download_json(tickets_url, video_id, query=tickets_query, fatal=False) if tickets is None or tickets.get('status') != 'success': continue for ticket in tickets.get('tickets', {}): @@ -50,7 +57,9 @@ class MakoTVIE(InfoExtractor): self._sort_formats(formats) - info = self._search_json_ld(webpage, video_id) + info = self._search_json_ld(webpage, video_id, fatal=False) + if info is None: + info = {} info.update({ 'id': video_id, 'title': self._og_search_title(webpage), From d739a727d4052f358847587b41596a5ad73ce59f Mon Sep 17 00:00:00 2001 From: relrelb Date: Wed, 9 Oct 2019 23:08:28 +0300 Subject: [PATCH 06/11] [makotv] Fixes --- youtube_dl/extractor/makotv.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index 70af27ff9..459514222 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -13,7 +13,7 @@ class MakoTVIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?mako\.co\.il/mako-vod-.+/VOD-(?P[0-9a-f]{18})\.htm' _TEST = { 'url': 'https://www.mako.co.il/mako-vod-keshet/parliament-s1/VOD-5df5a86c1966831006.htm', - 'md5': 'cd8cdff75390f8521831ec5049841764', + 'md5': 'd826489500d23d122055a30df0d59cb5', 'info_dict': { 'id': '5df5a86c1966831006', 'ext': 'm3u8', @@ -49,7 +49,7 @@ class MakoTVIE(InfoExtractor): 'rv': media['cdn'], } tickets = self._download_json(tickets_url, video_id, query=tickets_query, fatal=False) - if tickets is None or tickets.get('status') != 'success': + if tickets is None or tickets.get('status', '').lower() != 'success': continue for ticket in tickets.get('tickets', {}): ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', ticket['url']) + "?" + ticket['ticket'] @@ -65,7 +65,7 @@ class MakoTVIE(InfoExtractor): 'title': self._og_search_title(webpage), 'thumbnail': self._og_search_thumbnail(webpage), 'description': self._og_search_description(webpage), - 'formats': formats + 'formats': formats, }) return info From fd28c50e53edb3527c9438b5a4f14f886e3edce4 Mon Sep 17 00:00:00 2001 From: relrelb Date: Sat, 12 Oct 2019 14:42:56 +0300 Subject: [PATCH 07/11] [makotv] Refactor code --- youtube_dl/extractor/makotv.py | 104 ++++++++++++++++++++++++--------- 1 file changed, 75 insertions(+), 29 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index 459514222..51e054fae 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -4,41 +4,65 @@ from __future__ import unicode_literals from .common import InfoExtractor from ..utils import ( - update_url_query, + ExtractorError, urljoin, + parse_duration, ) class MakoTVIE(InfoExtractor): - _VALID_URL = r'https?://(?:www\.)?mako\.co\.il/mako-vod-.+/VOD-(?P[0-9a-f]{18})\.htm' - _TEST = { - 'url': 'https://www.mako.co.il/mako-vod-keshet/parliament-s1/VOD-5df5a86c1966831006.htm', - 'md5': 'd826489500d23d122055a30df0d59cb5', - 'info_dict': { - 'id': '5df5a86c1966831006', - 'ext': 'm3u8', - 'title': 'הפרלמנט | פרק 1 לצפייה ישירה | makoTV ', - 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.*\.jpg$', - 'description': 'שאולי, אמציה, הקטור, קרקו ואבי מקבלים סדרה משלהם. כל הפרקים של הפרלמנט לצפייה ישירה | makoTV ', - 'upload_date': '20120708', - 'timestamp': 1341751140 - } - } + _VALID_URL = r'https?://(?:www\.)?mako\.co\.il/.+?/(?:VOD|Video)-(?P[0-9a-f]{18})\.htm' + _TESTS = [ + { + 'url': 'https://www.mako.co.il/mako-vod-keshet/parliament-s1/VOD-5df5a86c1966831006.htm', + 'md5': 'd826489500d23d122055a30df0d59cb5', + 'info_dict': { + 'id': '5df5a86c1966831006', + 'ext': 'm3u8', + 'title': u'\u05d4\u05e4\u05e8\u05dc\u05de\u05e0\u05d8 | \u05e4\u05e8\u05e7 1 \u05dc\u05e6\u05e4\u05d9\u05d9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 | makoTV ', + 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.+\.jpg$', + 'description': u'\u05e9\u05d0\u05d5\u05dc\u05d9, \u05d0\u05de\u05e6\u05d9\u05d4, \u05d4\u05e7\u05d8\u05d5\u05e8, \u05e7\u05e8\u05e7\u05d5 \u05d5\u05d0\u05d1\u05d9 \u05de\u05e7\u05d1\u05dc\u05d9\u05dd \u05e1\u05d3\u05e8\u05d4 \u05de\u05e9\u05dc\u05d4\u05dd. \u05db\u05dc \u05d4\u05e4\u05e8\u05e7\u05d9\u05dd \u05e9\u05dc \u05d4\u05e4\u05e8\u05dc\u05de\u05e0\u05d8 \u05dc\u05e6\u05e4\u05d9\u05d9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 | makoTV ', + 'upload_date': '20120708', + 'timestamp': 1341751140, + 'duration': 1774.0, + 'episode_number': 1, + 'episode': u'\u05e4\u05e8\u05e7 1', + 'season': u'\u05e2\u05d5\u05e0\u05d4 1', + }, + }, + { + 'url': 'https://www.mako.co.il/tv-erez-nehederet/season14-shauli-and-irena/Video-6c53a12777d9c51006.htm', + 'md5': '77b0c836ebfb6237c7e9b909e57a4194', + 'info_dict': { + 'id': '6c53a12777d9c51006', + 'ext': 'm3u8', + 'title': u'\u05e9\u05d0\u05d5\u05dc\u05d9 \u05d5\u05d0\u05d9\u05e8\u05e0\u05d4 \u05d1\u05d1\u05d9\u05ea \u05d7\u05d5\u05dc\u05d9\u05dd \u2013 \u05e4\u05e8\u05e7 \u05d4\u05e1\u05d9\u05d5\u05dd', + 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.+\.jpg$', + 'description': u'\u05d4\u05d0\u05dd \u05e9\u05d0\u05d5\u05dc\u05d9 \u05d4\u05d5\u05dc\u05da \u05dc\u05de\u05d5\u05ea?', + 'duration': 669.0, + 'episode': u'\u05e9\u05d0\u05d5\u05dc\u05d9 \u05d5\u05d0\u05d9\u05e8\u05e0\u05d4 \u05d1\u05d1\u05d9\u05ea \u05d7\u05d5\u05dc\u05d9\u05dd \u2013 \u05e4\u05e8\u05e7 \u05d4\u05e1\u05d9\u05d5\u05dd', + }, + }, + ] + def _real_extract(self, url): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) - service_query = {'type': 'service'} - service = self._download_json(update_url_query(url, service_query), video_id) - video = service['root']['video'] + vcmid_pattern = r'var vcmidOfContent\s*?=\s*?\'([0-9A-Za-z]{40})\'' + vcmid = self._search_regex(vcmid_pattern, webpage, 'vcmid') + channel_id_pattern = r'var currentChannelId\s*?=\s*?\'([0-9A-Za-z]{40})\'' + channel_id = self._search_regex(channel_id_pattern, webpage, 'channel_id') - config_new = self._download_xml('https://rcs.mako.co.il/flash_swf/players/makoPlayer/configNew.xml', video_id) + config_new_url = 'https://rcs.mako.co.il/flash_swf/players/makoPlayer/configNew.xml' + config_new = self._download_xml(config_new_url, video_id) playlist_url = config_new.findtext('./PlaylistUrl') - playlist_url = playlist_url.replace('$$vcmid$$', video['guid']) - playlist_url = playlist_url.replace('$$videoChannelId$$', video['chId']) - playlist_url = playlist_url.replace('$$galleryChannelId$$', video['galleryChId']) - playlist = self._download_json(urljoin('https://www.mako.co.il', playlist_url), video_id) + playlist_url = playlist_url.replace('$$vcmid$$', vcmid) + playlist_url = playlist_url.replace('$$videoChannelId$$', channel_id) + playlist_url = playlist_url.replace('$$galleryChannelId$$', vcmid) + playlist_url = urljoin('https://www.mako.co.il', playlist_url) + playlist = self._download_json(playlist_url, video_id) formats = [] for media in playlist.get('media', []): @@ -52,20 +76,42 @@ class MakoTVIE(InfoExtractor): if tickets is None or tickets.get('status', '').lower() != 'success': continue for ticket in tickets.get('tickets', {}): - ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', ticket['url']) + "?" + ticket['ticket'] + ticket_url = urljoin('https://makostore-hd.ctedgecdn.net', ticket['url']) + '?' + ticket['ticket'] formats.extend(self._extract_m3u8_formats(ticket_url, video_id, fatal=False)) self._sort_formats(formats) - info = self._search_json_ld(webpage, video_id, fatal=False) - if info is None: - info = {} - info.update({ + info = { 'id': video_id, + 'formats': formats, + } + + try: + json_ld = self._search_json_ld(webpage, video_id, fatal=False) + except ExtractorError: + json_ld = None + if json_ld is not None: + info.update(json_ld) + + info.update({ + 'url': self._og_search_url(webpage), 'title': self._og_search_title(webpage), 'thumbnail': self._og_search_thumbnail(webpage), 'description': self._og_search_description(webpage), - 'formats': formats, }) + video_details = playlist['videoDetails'] + info.update({ + 'url': video_details['directLink'], + 'duration': parse_duration(video_details['duration']), + 'view_count': video_details['numViews'], + 'average_rating': video_details['rank'], + 'episode': video_details['title'], + 'season': video_details['season'], + }) + try: + info.update({'episode_number': int(video_details['episodeNumber'])}) + except ValueError: + pass + return info From 577eb9ced49c1770f3d459acf7fd4727ce0a1104 Mon Sep 17 00:00:00 2001 From: relrelb Date: Sat, 12 Oct 2019 14:51:30 +0300 Subject: [PATCH 08/11] [makotv] Remove u from string literals --- youtube_dl/extractor/makotv.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index 51e054fae..50371d19a 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -19,15 +19,15 @@ class MakoTVIE(InfoExtractor): 'info_dict': { 'id': '5df5a86c1966831006', 'ext': 'm3u8', - 'title': u'\u05d4\u05e4\u05e8\u05dc\u05de\u05e0\u05d8 | \u05e4\u05e8\u05e7 1 \u05dc\u05e6\u05e4\u05d9\u05d9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 | makoTV ', + 'title': '\u05d4\u05e4\u05e8\u05dc\u05de\u05e0\u05d8 | \u05e4\u05e8\u05e7 1 \u05dc\u05e6\u05e4\u05d9\u05d9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 | makoTV ', 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.+\.jpg$', - 'description': u'\u05e9\u05d0\u05d5\u05dc\u05d9, \u05d0\u05de\u05e6\u05d9\u05d4, \u05d4\u05e7\u05d8\u05d5\u05e8, \u05e7\u05e8\u05e7\u05d5 \u05d5\u05d0\u05d1\u05d9 \u05de\u05e7\u05d1\u05dc\u05d9\u05dd \u05e1\u05d3\u05e8\u05d4 \u05de\u05e9\u05dc\u05d4\u05dd. \u05db\u05dc \u05d4\u05e4\u05e8\u05e7\u05d9\u05dd \u05e9\u05dc \u05d4\u05e4\u05e8\u05dc\u05de\u05e0\u05d8 \u05dc\u05e6\u05e4\u05d9\u05d9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 | makoTV ', + 'description': '\u05e9\u05d0\u05d5\u05dc\u05d9, \u05d0\u05de\u05e6\u05d9\u05d4, \u05d4\u05e7\u05d8\u05d5\u05e8, \u05e7\u05e8\u05e7\u05d5 \u05d5\u05d0\u05d1\u05d9 \u05de\u05e7\u05d1\u05dc\u05d9\u05dd \u05e1\u05d3\u05e8\u05d4 \u05de\u05e9\u05dc\u05d4\u05dd. \u05db\u05dc \u05d4\u05e4\u05e8\u05e7\u05d9\u05dd \u05e9\u05dc \u05d4\u05e4\u05e8\u05dc\u05de\u05e0\u05d8 \u05dc\u05e6\u05e4\u05d9\u05d9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 | makoTV ', 'upload_date': '20120708', 'timestamp': 1341751140, 'duration': 1774.0, 'episode_number': 1, - 'episode': u'\u05e4\u05e8\u05e7 1', - 'season': u'\u05e2\u05d5\u05e0\u05d4 1', + 'episode': '\u05e4\u05e8\u05e7 1', + 'season': '\u05e2\u05d5\u05e0\u05d4 1', }, }, { @@ -36,11 +36,11 @@ class MakoTVIE(InfoExtractor): 'info_dict': { 'id': '6c53a12777d9c51006', 'ext': 'm3u8', - 'title': u'\u05e9\u05d0\u05d5\u05dc\u05d9 \u05d5\u05d0\u05d9\u05e8\u05e0\u05d4 \u05d1\u05d1\u05d9\u05ea \u05d7\u05d5\u05dc\u05d9\u05dd \u2013 \u05e4\u05e8\u05e7 \u05d4\u05e1\u05d9\u05d5\u05dd', + 'title': '\u05e9\u05d0\u05d5\u05dc\u05d9 \u05d5\u05d0\u05d9\u05e8\u05e0\u05d4 \u05d1\u05d1\u05d9\u05ea \u05d7\u05d5\u05dc\u05d9\u05dd \u2013 \u05e4\u05e8\u05e7 \u05d4\u05e1\u05d9\u05d5\u05dd', 'thumbnail': r're:^https?://img\.mako\.co\.il/\d{4}/\d{2}/\d{2}/.+\.jpg$', - 'description': u'\u05d4\u05d0\u05dd \u05e9\u05d0\u05d5\u05dc\u05d9 \u05d4\u05d5\u05dc\u05da \u05dc\u05de\u05d5\u05ea?', + 'description': '\u05d4\u05d0\u05dd \u05e9\u05d0\u05d5\u05dc\u05d9 \u05d4\u05d5\u05dc\u05da \u05dc\u05de\u05d5\u05ea?', 'duration': 669.0, - 'episode': u'\u05e9\u05d0\u05d5\u05dc\u05d9 \u05d5\u05d0\u05d9\u05e8\u05e0\u05d4 \u05d1\u05d1\u05d9\u05ea \u05d7\u05d5\u05dc\u05d9\u05dd \u2013 \u05e4\u05e8\u05e7 \u05d4\u05e1\u05d9\u05d5\u05dd', + 'episode': '\u05e9\u05d0\u05d5\u05dc\u05d9 \u05d5\u05d0\u05d9\u05e8\u05e0\u05d4 \u05d1\u05d1\u05d9\u05ea \u05d7\u05d5\u05dc\u05d9\u05dd \u2013 \u05e4\u05e8\u05e7 \u05d4\u05e1\u05d9\u05d5\u05dd', }, }, ] From a5b4bf097fbda2b3d52ea6d15d566805bde4f109 Mon Sep 17 00:00:00 2001 From: relrelb Date: Sat, 12 Oct 2019 15:19:26 +0300 Subject: [PATCH 09/11] [makotv] Use int_or_none --- youtube_dl/extractor/makotv.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index 50371d19a..18452e5cd 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -7,6 +7,7 @@ from ..utils import ( ExtractorError, urljoin, parse_duration, + int_or_none, ) @@ -107,11 +108,8 @@ class MakoTVIE(InfoExtractor): 'view_count': video_details['numViews'], 'average_rating': video_details['rank'], 'episode': video_details['title'], + 'episode_number': int_or_none(video_details['episodeNumber']), 'season': video_details['season'], }) - try: - info.update({'episode_number': int(video_details['episodeNumber'])}) - except ValueError: - pass return info From a39da56d9b2e9f14cac3dce887c2a874ecae87b7 Mon Sep 17 00:00:00 2001 From: relrelb Date: Sat, 12 Oct 2019 15:34:21 +0300 Subject: [PATCH 10/11] [makotv] Use merge_dicts --- youtube_dl/extractor/makotv.py | 43 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index 18452e5cd..8222c4275 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -8,6 +8,7 @@ from ..utils import ( urljoin, parse_duration, int_or_none, + merge_dicts, ) @@ -87,29 +88,27 @@ class MakoTVIE(InfoExtractor): 'formats': formats, } + video_details = playlist.get('videoDetails', {}) + video_info = { + 'url': video_details.get('directLink'), + 'duration': parse_duration(video_details.get('duration')), + 'view_count': video_details.get('numViews'), + 'average_rating': video_details.get('rank'), + 'episode': video_details.get('title'), + 'episode_number': int_or_none(video_details.get('episodeNumber')), + 'season': video_details.get('season'), + } + + og_info = { + 'url': self._og_search_url(webpage, fatal=False), + 'title': self._og_search_title(webpage, fatal=False), + 'thumbnail': self._og_search_thumbnail(webpage), + 'description': self._og_search_description(webpage), + } + try: json_ld = self._search_json_ld(webpage, video_id, fatal=False) except ExtractorError: - json_ld = None - if json_ld is not None: - info.update(json_ld) + json_ld = {} - info.update({ - 'url': self._og_search_url(webpage), - 'title': self._og_search_title(webpage), - 'thumbnail': self._og_search_thumbnail(webpage), - 'description': self._og_search_description(webpage), - }) - - video_details = playlist['videoDetails'] - info.update({ - 'url': video_details['directLink'], - 'duration': parse_duration(video_details['duration']), - 'view_count': video_details['numViews'], - 'average_rating': video_details['rank'], - 'episode': video_details['title'], - 'episode_number': int_or_none(video_details['episodeNumber']), - 'season': video_details['season'], - }) - - return info + return merge_dicts(info, video_info, og_info, json_ld) From ce352893c57b9ed263554a584dc1bb4f9d56a5fb Mon Sep 17 00:00:00 2001 From: relrelb Date: Fri, 10 Apr 2020 16:25:16 +0300 Subject: [PATCH 11/11] Remove empty line --- youtube_dl/extractor/makotv.py | 1 - 1 file changed, 1 deletion(-) diff --git a/youtube_dl/extractor/makotv.py b/youtube_dl/extractor/makotv.py index 8222c4275..7ffc9d918 100644 --- a/youtube_dl/extractor/makotv.py +++ b/youtube_dl/extractor/makotv.py @@ -47,7 +47,6 @@ class MakoTVIE(InfoExtractor): }, ] - def _real_extract(self, url): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id)