From f1a5b546e8cb6f49c78c1dfadfc97a42018cb3c4 Mon Sep 17 00:00:00 2001 From: Parmjit Virk Date: Tue, 17 Oct 2017 16:29:02 -0500 Subject: [PATCH 1/7] [Unity] Add new extractor --- youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/unity.py | 35 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 youtube_dl/extractor/unity.py diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index ecb33bc9e..1624129d2 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -1138,6 +1138,7 @@ from .udn import UDNEmbedIE from .uktvplay import UKTVPlayIE from .digiteka import DigitekaIE from .unistra import UnistraIE +from .unity import UnityIE from .uol import UOLIE from .uplynk import ( UplynkIE, diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py new file mode 100644 index 000000000..4e60f0fad --- /dev/null +++ b/youtube_dl/extractor/unity.py @@ -0,0 +1,35 @@ +from __future__ import unicode_literals + +from .common import InfoExtractor +from .youtube import YoutubeIE +from ..utils import ( + ExtractorError +) + + +class UnityIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?unity3d\.com/learn/tutorials/(?:.*)/(?P[0-9a-zA-Z-]+)' + _TEST = { + 'url': 'https://unity3d.com/learn/tutorials/topics/animation/animate-anything-mecanim', + 'info_dict': { + 'id': 'jWuNtik0C8E', + 'ext': 'mp4', + 'title': 'Live Training 22nd September 2014 - Animate Anything', + 'description': 'md5:7752f2b827ce39a5acc648b53593dfbf', + 'duration': 2893, + 'uploader': 'Unity', + 'uploader_id': 'Unity3D', + 'upload_date': '20140926', + } + } + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + youtube_id = self._search_regex( + r'data-video-id="([_0-9a-zA-Z-]+)"', + webpage, 'youtube ID', default=None) + if not youtube_id: + raise ExtractorError('Unable to extract youtube ID', expected=True) + youtube_url = 'https://youtu.be/%s' % youtube_id + return self.url_result(youtube_url, ie=YoutubeIE.ie_key()) From 01c6012db326853a1e3c4e45c2aca0cc24bef800 Mon Sep 17 00:00:00 2001 From: Parmjit Virk Date: Tue, 17 Oct 2017 16:51:06 -0500 Subject: [PATCH 2/7] [Unity] Corrected test description field --- youtube_dl/extractor/unity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py index 4e60f0fad..652054dba 100644 --- a/youtube_dl/extractor/unity.py +++ b/youtube_dl/extractor/unity.py @@ -15,7 +15,7 @@ class UnityIE(InfoExtractor): 'id': 'jWuNtik0C8E', 'ext': 'mp4', 'title': 'Live Training 22nd September 2014 - Animate Anything', - 'description': 'md5:7752f2b827ce39a5acc648b53593dfbf', + 'description': 'md5:e54913114bd45a554c56cdde7669636e', 'duration': 2893, 'uploader': 'Unity', 'uploader_id': 'Unity3D', From 20d3514c53de03b898553236ab3fbb3b74d0dde4 Mon Sep 17 00:00:00 2001 From: Parmjit Virk Date: Wed, 18 Oct 2017 01:48:23 -0500 Subject: [PATCH 3/7] [Unity] Added new matching test --- youtube_dl/extractor/unity.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py index 652054dba..d7c1ba3d3 100644 --- a/youtube_dl/extractor/unity.py +++ b/youtube_dl/extractor/unity.py @@ -9,7 +9,7 @@ from ..utils import ( class UnityIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?unity3d\.com/learn/tutorials/(?:.*)/(?P[0-9a-zA-Z-]+)' - _TEST = { + _TESTS = [{ 'url': 'https://unity3d.com/learn/tutorials/topics/animation/animate-anything-mecanim', 'info_dict': { 'id': 'jWuNtik0C8E', @@ -21,7 +21,10 @@ class UnityIE(InfoExtractor): 'uploader_id': 'Unity3D', 'upload_date': '20140926', } - } + }, { + 'url': 'https://unity3d.com/learn/tutorials/projects/2d-ufo-tutorial/following-player-camera?playlist=25844', + 'only_matching': True, + }] def _real_extract(self, url): video_id = self._match_id(url) From 51c83012bebf43a08278bf74c36f866617611379 Mon Sep 17 00:00:00 2001 From: Parmjit Virk Date: Wed, 18 Oct 2017 15:36:30 -0500 Subject: [PATCH 4/7] [Unity] Applied requested fixes for PR #14529 --- youtube_dl/extractor/unity.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py index d7c1ba3d3..b15790725 100644 --- a/youtube_dl/extractor/unity.py +++ b/youtube_dl/extractor/unity.py @@ -2,9 +2,6 @@ from __future__ import unicode_literals from .common import InfoExtractor from .youtube import YoutubeIE -from ..utils import ( - ExtractorError -) class UnityIE(InfoExtractor): @@ -27,12 +24,9 @@ class UnityIE(InfoExtractor): }] def _real_extract(self, url): - video_id = self._match_id(url) - webpage = self._download_webpage(url, video_id) + vid = self._match_id(url) + webpage = self._download_webpage(url, vid) youtube_id = self._search_regex( r'data-video-id="([_0-9a-zA-Z-]+)"', - webpage, 'youtube ID', default=None) - if not youtube_id: - raise ExtractorError('Unable to extract youtube ID', expected=True) - youtube_url = 'https://youtu.be/%s' % youtube_id - return self.url_result(youtube_url, ie=YoutubeIE.ie_key()) + webpage, 'youtube ID') + return self.url_result(youtube_id, video_id=vid, ie=YoutubeIE.ie_key()) From 362191b4547eded45b1c2d597b065f2faf0f0482 Mon Sep 17 00:00:00 2001 From: Parmjit Virk Date: Wed, 18 Oct 2017 16:18:53 -0500 Subject: [PATCH 5/7] [Unity] Applied second requested fixes for PR #14529 --- youtube_dl/extractor/unity.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py index b15790725..a15d1e4b1 100644 --- a/youtube_dl/extractor/unity.py +++ b/youtube_dl/extractor/unity.py @@ -24,9 +24,9 @@ class UnityIE(InfoExtractor): }] def _real_extract(self, url): - vid = self._match_id(url) - webpage = self._download_webpage(url, vid) + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) youtube_id = self._search_regex( r'data-video-id="([_0-9a-zA-Z-]+)"', webpage, 'youtube ID') - return self.url_result(youtube_id, video_id=vid, ie=YoutubeIE.ie_key()) + return self.url_result(youtube_id, YoutubeIE.ie_key(), video_id) From 25e7fd79ecdd8900cb141f888c2021b0dca50a00 Mon Sep 17 00:00:00 2001 From: Parmjit Virk Date: Wed, 18 Oct 2017 16:37:37 -0500 Subject: [PATCH 6/7] [Unity] Applied third requested fixes for PR #14529 --- youtube_dl/extractor/unity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py index a15d1e4b1..793346ac0 100644 --- a/youtube_dl/extractor/unity.py +++ b/youtube_dl/extractor/unity.py @@ -29,4 +29,4 @@ class UnityIE(InfoExtractor): youtube_id = self._search_regex( r'data-video-id="([_0-9a-zA-Z-]+)"', webpage, 'youtube ID') - return self.url_result(youtube_id, YoutubeIE.ie_key(), video_id) + return self.url_result(youtube_id, ie=YoutubeIE.ie_key(), video_id=video_id) From 19e130cedf09d035a8b910344745a46ec7d3c200 Mon Sep 17 00:00:00 2001 From: Sergey M Date: Thu, 19 Oct 2017 04:44:58 +0700 Subject: [PATCH 7/7] Update unity.py --- youtube_dl/extractor/unity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/youtube_dl/extractor/unity.py b/youtube_dl/extractor/unity.py index 793346ac0..73daacf29 100644 --- a/youtube_dl/extractor/unity.py +++ b/youtube_dl/extractor/unity.py @@ -5,7 +5,7 @@ from .youtube import YoutubeIE class UnityIE(InfoExtractor): - _VALID_URL = r'https?://(?:www\.)?unity3d\.com/learn/tutorials/(?:.*)/(?P[0-9a-zA-Z-]+)' + _VALID_URL = r'https?://(?:www\.)?unity3d\.com/learn/tutorials/(?:[^/]+/)*(?P[^/?#&]+)' _TESTS = [{ 'url': 'https://unity3d.com/learn/tutorials/topics/animation/animate-anything-mecanim', 'info_dict': {