From 018046ddb1be940a4aa2305b902fadf443036071 Mon Sep 17 00:00:00 2001 From: Leonardo Taccari Date: Wed, 13 Dec 2017 12:24:07 +0100 Subject: [PATCH 1/2] [internazionale] Add new extractor for www.internazionale.it --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/internazionale.py | 51 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 youtube_dl/extractor/internazionale.py diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index fb9f365f2..687204cd0 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -467,6 +467,7 @@ from .indavideo import ( ) from .infoq import InfoQIE from .instagram import InstagramIE, InstagramUserIE +from .internazionale import InternazionaleIE from .internetvideoarchive import InternetVideoArchiveIE from .iprima import IPrimaIE from .iqiyi import IqiyiIE diff --git a/youtube_dl/extractor/internazionale.py b/youtube_dl/extractor/internazionale.py new file mode 100644 index 000000000..e046ea10b --- /dev/null +++ b/youtube_dl/extractor/internazionale.py @@ -0,0 +1,51 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + + +class InternazionaleIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?internazionale\.it/video/(?P.*)' + _TESTS = [{ + 'url': 'https://www.internazionale.it/video/2015/02/19/richard-linklater-racconta-una-scena-di-boyhood', + 'md5': '11b54a3d3333e455c00684e50a65c58e', + 'info_dict': { + 'id': '265968', + 'ext': 'mp4', + 'description': 'Il regista statunitense Richard Linklater ci racconta una scena del film Boyhood e la sua passione per l’imprecisione della memoria. Il film è un’avventura durata 12 anni, durante la quale Linklater ha seguito il protagonista dal 2002 al 2014 per raccontare la sua crescita e il rapporto con i genitori divorziati. Leggi', + 'title': 'Richard Linklater racconta una scena di Boyhood', + 'thumbnail': r're:^https?://.*\.jpg$', + } + }, { + 'url': 'https://www.internazionale.it/video/2017/10/18/storie-italiani-senza-cittadinanza', + 'md5': '4c6feb9658b22c95e3fa4b5c070d69ba', + 'info_dict': { + 'id': '648175', + 'ext': 'mp4', + 'description': 'Tre ragazzi raccontano quanto è difficile essere italiani di fatto ma non di diritto: una vita fatta di burocrazia, opportunità negate e grandi contraddizioni. Leggi', + 'title': 'Storie di italiani senza cittadinanza', + 'thumbnail': r're:^https?://.*\.jpg$', + } + }] + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + + video_container = self._html_search_regex(r'
', webpage, 'video_container') + + id = self._html_search_regex(r'data-job-id="([^"]+)"', video_container, 'id') + video_path = self._html_search_regex(r'data-video-path="([^"]+)"', video_container, 'video_path') + + return { + 'id': id, + 'title': self._og_search_title(webpage), + 'thumbnail': self._og_search_thumbnail(webpage), + 'description': self._og_search_description(webpage), + 'formats': [{ + 'url': 'https://video.internazionale.it/%s/%s.m3u8' + % (video_path, id), + 'ext': 'mp4', + 'protocol': 'm3u8', + }] + } From b8a3cba8f999d1ae0035cfe42d60c10ed68264be Mon Sep 17 00:00:00 2001 From: Leonardo Taccari Date: Mon, 18 Dec 2017 22:12:43 +0100 Subject: [PATCH 2/2] [internazionale] Try to address some changes requested by @dstftw - Use `md5:...' instead of provide a long description in info_dict and only keep one test. - Directly search for `data-job-id' and `data-video-path' attributes. - Extract m3u8 and mpd via _extract_m3u8_formats() and _extract_mpd_formats() TODO: Figure out why `python test/test_download.py TestDownload.test_Internazionale` TODO: with a DownloadError and `ERROR: requested format not available'. TODO: For m3u8 `youtube_dl -F' on a Internazionale URL indicate as extension TODO: `m3u8' instead of mp4, is this correct? --- youtube_dl/extractor/internazionale.py | 37 +++++++++++--------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/youtube_dl/extractor/internazionale.py b/youtube_dl/extractor/internazionale.py index e046ea10b..2ebf05ded 100644 --- a/youtube_dl/extractor/internazionale.py +++ b/youtube_dl/extractor/internazionale.py @@ -12,40 +12,35 @@ class InternazionaleIE(InfoExtractor): 'info_dict': { 'id': '265968', 'ext': 'mp4', - 'description': 'Il regista statunitense Richard Linklater ci racconta una scena del film Boyhood e la sua passione per l’imprecisione della memoria. Il film è un’avventura durata 12 anni, durante la quale Linklater ha seguito il protagonista dal 2002 al 2014 per raccontare la sua crescita e il rapporto con i genitori divorziati. Leggi', + 'description': 'md5:efb7e5bbfb1a54ae2ed5a4a015f0e665', 'title': 'Richard Linklater racconta una scena di Boyhood', 'thumbnail': r're:^https?://.*\.jpg$', } - }, { - 'url': 'https://www.internazionale.it/video/2017/10/18/storie-italiani-senza-cittadinanza', - 'md5': '4c6feb9658b22c95e3fa4b5c070d69ba', - 'info_dict': { - 'id': '648175', - 'ext': 'mp4', - 'description': 'Tre ragazzi raccontano quanto è difficile essere italiani di fatto ma non di diritto: una vita fatta di burocrazia, opportunità negate e grandi contraddizioni. Leggi', - 'title': 'Storie di italiani senza cittadinanza', - 'thumbnail': r're:^https?://.*\.jpg$', - } }] def _real_extract(self, url): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) - video_container = self._html_search_regex(r'
', webpage, 'video_container') + data_job_id = self._html_search_regex(r'data-job-id="([^"]+)"', webpage, 'data-job-id') + data_video_path = self._html_search_regex(r'data-video-path="([^"]+)"', webpage, 'data-video-path') - id = self._html_search_regex(r'data-job-id="([^"]+)"', video_container, 'id') - video_path = self._html_search_regex(r'data-video-path="([^"]+)"', video_container, 'video_path') + formats = [] + + formats.extend(self._extract_m3u8_formats( + 'https://video.internazionale.it/%s/%s.m3u8' % (data_video_path, data_job_id), + video_id)) + + formats.extend(self._extract_mpd_formats( + 'https://video.internazionale.it/%s/%s.mpd' % (data_video_path, data_job_id), + video_id)) + + self._sort_formats(formats) return { - 'id': id, + 'id': data_job_id, 'title': self._og_search_title(webpage), 'thumbnail': self._og_search_thumbnail(webpage), 'description': self._og_search_description(webpage), - 'formats': [{ - 'url': 'https://video.internazionale.it/%s/%s.m3u8' - % (video_path, id), - 'ext': 'mp4', - 'protocol': 'm3u8', - }] + 'formats': formats, }