X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fninegag.py;h=16a02ad7939082627ffb9edd41d7bf6e62fd1f6d;hb=9e1a5b845586a0a5431fb72467142046d8571e6f;hp=b8c892ccefc156a5a28b945384553af70e67a909;hpb=6e25c58ed74505f69770ee01fd762f416d7405d3;p=youtube-dl diff --git a/youtube_dl/extractor/ninegag.py b/youtube_dl/extractor/ninegag.py index b8c892cce..16a02ad79 100644 --- a/youtube_dl/extractor/ninegag.py +++ b/youtube_dl/extractor/ninegag.py @@ -1,15 +1,22 @@ from __future__ import unicode_literals import re +import json from .common import InfoExtractor +from ..utils import str_to_int class NineGagIE(InfoExtractor): IE_NAME = '9gag' - _VALID_URL = r'^https?://(?:www\.)?9gag\.tv/v/(?P[0-9]+)' + _VALID_URL = r'''(?x)^https?://(?:www\.)?9gag\.tv/ + (?: + v/(?P[0-9]+)| + p/(?P[a-zA-Z0-9]+)/(?P[^?#/]+) + ) + ''' - _TEST = { + _TESTS = [{ "url": "http://9gag.tv/v/1912", "info_dict": { "id": "1912", @@ -20,34 +27,41 @@ class NineGagIE(InfoExtractor): "thumbnail": "re:^https?://", }, 'add_ie': ['Youtube'] - } + }, { + 'url': 'http://9gag.tv/p/KklwM/alternate-banned-opening-scene-of-gravity?ref=fsidebar', + 'info_dict': { + 'id': 'KklwM', + 'ext': 'mp4', + 'display_id': 'alternate-banned-opening-scene-of-gravity', + "description": "While Gravity was a pretty awesome movie already, YouTuber Krishna Shenoi came up with a way to improve upon it, introducing a much better solution to Sandra Bullock's seemingly endless tumble in space. The ending is priceless.", + 'title': "Banned Opening Scene Of \"Gravity\" That Changes The Whole Movie", + }, + }] def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('id') - - webpage = self._download_webpage(url, video_id) - - youtube_id = self._html_search_regex( - r'(?s)id="jsid-video-post-container".*?data-external-id="([^"]+)"', - webpage, 'video ID') - description = self._html_search_regex( - r'(?s)
.*?

(.*?)

', webpage, - 'description', fatal=False) - view_count_str = self._html_search_regex( - r'

([0-9][0-9,]*) views

', webpage, 'view count', - fatal=False) - view_count = ( - None if view_count_str is None - else int(view_count_str.replace(',', ''))) + video_id = mobj.group('numid') or mobj.group('id') + display_id = mobj.group('display_id') or video_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'] + title = post_view['title'] + description = post_view['description'] + view_count = str_to_int(post_view['externalView']) + thumbnail = post_view.get('thumbnail_700w') or post_view.get('ogImageUrl') or post_view.get('thumbnail_300w') return { '_type': 'url_transparent', 'url': youtube_id, 'ie_key': 'Youtube', 'id': video_id, - 'title': self._og_search_title(webpage), + 'display_id': display_id, + 'title': title, 'description': description, 'view_count': view_count, - 'thumbnail': self._og_search_thumbnail(webpage), + 'thumbnail': thumbnail, }