2014-01-28 17:55:06 +00:00
from __future__ import unicode_literals
2013-12-05 13:29:08 +00:00
import re
2014-04-15 12:49:38 +00:00
import json
2013-12-05 13:29:08 +00:00
from . common import InfoExtractor
2014-04-15 12:49:38 +00:00
from . . utils import str_to_int
2013-12-05 13:29:08 +00:00
class NineGagIE ( InfoExtractor ) :
IE_NAME = ' 9gag '
2014-04-10 23:25:24 +00:00
_VALID_URL = r ''' (?x)^https?://(?:www \ .)?9gag \ .tv/
( ? :
v / ( ? P < numid > [ 0 - 9 ] + ) |
p / ( ? P < id > [ a - zA - Z0 - 9 ] + ) / ( ? P < display_id > [ ^ ? #/]+)
)
'''
2013-12-05 13:29:08 +00:00
2014-04-10 23:25:24 +00:00
_TESTS = [ {
2014-01-28 17:55:06 +00:00
" url " : " http://9gag.tv/v/1912 " ,
" info_dict " : {
2014-03-20 23:25:04 +00:00
" id " : " 1912 " ,
" ext " : " mp4 " ,
2014-01-28 17:55:06 +00:00
" 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!) " ,
2014-03-13 15:40:53 +00:00
" title " : " \" People Are Awesome 2013 \" Is Absolutely Awesome " ,
" view_count " : int ,
" thumbnail " : " re:^https?:// " ,
2013-12-05 13:29:08 +00:00
} ,
2014-01-28 17:55:06 +00:00
' add_ie ' : [ ' Youtube ' ]
2014-11-23 20:39:15 +00:00
} , {
2014-04-10 23:25:24 +00:00
' 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 " ,
} ,
} ]
2013-12-05 13:29:08 +00:00
def _real_extract ( self , url ) :
mobj = re . match ( self . _VALID_URL , url )
2014-04-10 23:25:24 +00:00
video_id = mobj . group ( ' numid ' ) or mobj . group ( ' id ' )
display_id = mobj . group ( ' display_id ' ) or video_id
2013-12-05 13:29:08 +00:00
2014-04-10 23:25:24 +00:00
webpage = self . _download_webpage ( url , display_id )
2013-12-05 13:29:08 +00:00
2014-04-15 12:49:38 +00:00
post_view = json . loads ( self . _html_search_regex (
2014-07-07 13:12:59 +00:00
r ' var postView = new app \ .PostView \ ( { \ s*post: \ s*( { .+?}), \ s*posts: \ s*prefetchedCurrentPost ' , webpage , ' post view ' ) )
2014-04-15 12:49:38 +00:00
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 ' )
2013-12-05 13:29:08 +00:00
return {
' _type ' : ' url_transparent ' ,
2014-03-13 15:40:53 +00:00
' url ' : youtube_id ,
2013-12-05 13:29:08 +00:00
' ie_key ' : ' Youtube ' ,
' id ' : video_id ,
2014-04-10 23:25:24 +00:00
' display_id ' : display_id ,
' title ' : title ,
2014-03-13 15:40:53 +00:00
' description ' : description ,
' view_count ' : view_count ,
2014-04-15 12:49:38 +00:00
' thumbnail ' : thumbnail ,
2013-12-05 13:29:08 +00:00
}