From de3fc356e1597b31c8f0a55a7bf7e201ae436c66 Mon Sep 17 00:00:00 2001 From: remitamine Date: Mon, 21 Sep 2015 14:01:12 +0100 Subject: [PATCH] [ninegag] fix _VALID_URL regex and handle the use of other external providers --- youtube_dl/extractor/ninegag.py | 43 ++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/youtube_dl/extractor/ninegag.py b/youtube_dl/extractor/ninegag.py index 7f842b5c2..eee65873a 100644 --- a/youtube_dl/extractor/ninegag.py +++ b/youtube_dl/extractor/ninegag.py @@ -9,17 +9,12 @@ from ..utils import str_to_int class NineGagIE(InfoExtractor): IE_NAME = '9gag' - _VALID_URL = r'''(?x)^https?://(?:www\.)?9gag\.tv/ - (?: - v/(?P[0-9]+)| - p/(?P[a-zA-Z0-9]+)/(?P[^?#/]+) - ) - ''' + _VALID_URL = r'https?://(?:www\.)?9gag\.com/tv/p/(?P[a-zA-Z0-9]+)/(?P[^?#/]+)' _TESTS = [{ - "url": "http://9gag.tv/v/1912", + "url": "http://9gag.com/tv/p/Kk2X5/people-are-awesome-2013-is-absolutely-awesome", "info_dict": { - "id": "1912", + "id": "Kk2X5", "ext": "mp4", "description": "This 3-minute video will make you smile and then make you feel untalented and insignificant. Anyway, you should share this awesomeness. (Thanks, Dino!)", "title": "\"People Are Awesome 2013\" Is Absolutely Awesome", @@ -31,7 +26,7 @@ class NineGagIE(InfoExtractor): }, 'add_ie': ['Youtube'] }, { - 'url': 'http://9gag.tv/p/KklwM/alternate-banned-opening-scene-of-gravity?ref=fsidebar', + 'url': 'http://9gag.com/tv/p/KklwM/alternate-banned-opening-scene-of-gravity?ref=fsidebar', 'info_dict': { 'id': 'KklwM', 'ext': 'mp4', @@ -42,19 +37,39 @@ class NineGagIE(InfoExtractor): 'upload_date': '20140401', 'uploader_id': 'krishnashenoi93', }, + 'add_ie': ['Youtube'] }] + _EXTERNAL_VIDEO_PROVIDER = { + '1': { + 'url': '%s', + 'ie_key': 'Youtube', + }, + '2': { + 'url': 'http://player.vimeo.com/video/%s', + 'ie_key': 'Vimeo', + }, + '3': { + 'url': 'http://instagram.com/p/%s', + 'ie_key': 'Instagram', + }, + '4': { + 'url': 'http://vine.co/v/%s', + 'ie_key': 'Vine', + }, + } def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('numid') or mobj.group('id') - display_id = mobj.group('display_id') or video_id + video_id = mobj.group('id') + display_id = mobj.group('display_id') webpage = self._download_webpage(url, display_id) post_view = json.loads(self._html_search_regex( r'var postView = new app\.PostView\({\s*post:\s*({.+?}),\s*posts:\s*prefetchedCurrentPost', webpage, 'post view')) - youtube_id = post_view['videoExternalId'] + external_video_id = post_view['videoExternalId'] + external_video_provider = post_view['videoExternalProvider'] title = post_view['title'] description = post_view['description'] view_count = str_to_int(post_view['externalView']) @@ -62,8 +77,8 @@ class NineGagIE(InfoExtractor): return { '_type': 'url_transparent', - 'url': youtube_id, - 'ie_key': 'Youtube', + 'url': self._EXTERNAL_VIDEO_PROVIDER[external_video_provider]['url'] % external_video_id, + 'ie_key': self._EXTERNAL_VIDEO_PROVIDER[external_video_provider]['ie_key'], 'id': video_id, 'display_id': display_id, 'title': title,