2014-01-22 10:50:49 +08:00
from __future__ import unicode_literals
2013-12-03 21:58:24 +08:00
from . mtv import MTVServicesInfoExtractor
2016-08-02 20:02:31 +08:00
from . common import InfoExtractor
2013-06-24 02:50:22 +08:00
2013-12-03 21:58:24 +08:00
class ComedyCentralIE ( MTVServicesInfoExtractor ) :
2014-07-17 04:37:01 +08:00
_VALID_URL = r ''' (?x)https?://(?:www \ .)?cc \ .com/
2016-11-30 18:52:19 +08:00
( video - clips | episodes | cc - studios | video - collections | shows ( ? = / [ ^ / ] + / ( ? ! full - episodes ) ) )
2014-01-02 04:11:35 +08:00
/ ( ? P < title > . * ) '''
2014-01-22 10:50:49 +08:00
_FEED_URL = ' http://comedycentral.com/feeds/mrss/ '
2013-11-25 04:18:35 +08:00
2016-02-13 19:26:27 +08:00
_TESTS = [ {
2014-07-17 04:37:01 +08:00
' url ' : ' http://www.cc.com/video-clips/kllhuv/stand-up-greg-fitzsimmons--uncensored---too-good-of-a-mother ' ,
2014-04-11 08:14:31 +08:00
' md5 ' : ' c4f48e9eda1b16dd10add0744344b6d8 ' ,
2014-01-22 10:50:49 +08:00
' info_dict ' : {
' id ' : ' cef0cbb3-e776-4bc9-b62e-8016deccb354 ' ,
' ext ' : ' mp4 ' ,
2016-07-26 11:06:50 +08:00
' title ' : ' CC:Stand-Up|August 18, 2013|1|0101|Uncensored - Too Good of a Mother ' ,
2014-01-22 10:50:49 +08:00
' description ' : ' After a certain point, breastfeeding becomes c**kblocking. ' ,
2016-07-26 11:06:50 +08:00
' timestamp ' : 1376798400 ,
' upload_date ' : ' 20130818 ' ,
2013-11-25 04:18:35 +08:00
} ,
2016-02-13 19:26:27 +08:00
} , {
' url ' : ' http://www.cc.com/shows/the-daily-show-with-trevor-noah/interviews/6yx39d/exclusive-rand-paul-extended-interview ' ,
' only_matching ' : True ,
} ]
2013-11-25 04:18:35 +08:00
2016-11-29 17:11:08 +08:00
class ComedyCentralFullEpisodesIE ( MTVServicesInfoExtractor ) :
_VALID_URL = r ''' (?x)https?://(?:www \ .)?cc \ .com/
2016-11-30 18:52:19 +08:00
( ? : full - episodes | shows ( ? = / [ ^ / ] + / full - episodes ) )
2016-11-29 17:11:08 +08:00
/ ( ? P < id > [ ^ ? ] + ) '''
_FEED_URL = ' http://comedycentral.com/feeds/mrss/ '
_TESTS = [ {
' url ' : ' http://www.cc.com/full-episodes/pv391a/the-daily-show-with-trevor-noah-november-28--2016---ryan-speedo-green-season-22-ep-22028 ' ,
' info_dict ' : {
' description ' : ' Donald Trump is accused of exploiting his president-elect status for personal gain, Cuban leader Fidel Castro dies, and Ryan Speedo Green discusses " Sing for Your Life. " ' ,
' title ' : ' November 28, 2016 - Ryan Speedo Green ' ,
} ,
' playlist_count ' : 4 ,
2016-11-30 18:52:19 +08:00
} , {
' url ' : ' http://www.cc.com/shows/the-daily-show-with-trevor-noah/full-episodes ' ,
' only_matching ' : True ,
2016-11-29 17:11:08 +08:00
} ]
def _real_extract ( self , url ) :
playlist_id = self . _match_id ( url )
webpage = self . _download_webpage ( url , playlist_id )
feed_json = self . _search_regex ( r ' var triforceManifestFeed \ s*= \ s*( \ { .+? \ }); \ n ' , webpage , ' triforce feeed ' )
feed = self . _parse_json ( feed_json , playlist_id )
zones = feed [ ' manifest ' ] [ ' zones ' ]
video_zone = zones [ ' t2_lc_promo1 ' ]
feed = self . _download_json ( video_zone [ ' feed ' ] , playlist_id )
mgid = feed [ ' result ' ] [ ' data ' ] [ ' id ' ]
videos_info = self . _get_videos_info ( mgid )
return videos_info
2016-07-26 11:06:50 +08:00
class ToshIE ( MTVServicesInfoExtractor ) :
IE_DESC = ' Tosh.0 '
_VALID_URL = r ' ^https?://tosh \ .cc \ .com/video-(?:clips|collections)/[^/]+/(?P<videotitle>[^/?#]+) '
_FEED_URL = ' http://tosh.cc.com/feeds/mrss '
2014-09-01 23:57:45 +08:00
_TESTS = [ {
2016-07-26 11:06:50 +08:00
' url ' : ' http://tosh.cc.com/video-clips/68g93d/twitter-users-share-summer-plans ' ,
2015-01-31 02:43:46 +08:00
' info_dict ' : {
2016-07-26 11:06:50 +08:00
' description ' : ' Tosh asked fans to share their summer plans. ' ,
' title ' : ' Twitter Users Share Summer Plans ' ,
2015-01-31 02:43:46 +08:00
} ,
2016-07-26 11:06:50 +08:00
' playlist ' : [ {
' md5 ' : ' f269e88114c1805bb6d7653fecea9e06 ' ,
' info_dict ' : {
' id ' : ' 90498ec2-ed00-11e0-aca6-0026b9414f30 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Tosh.0|June 9, 2077|2|211|Twitter Users Share Summer Plans ' ,
' description ' : ' Tosh asked fans to share their summer plans. ' ,
' thumbnail ' : ' re:^https?://.* \ .jpg ' ,
# It's really reported to be published on year 2077
' upload_date ' : ' 20770610 ' ,
' timestamp ' : 3390510600 ,
' subtitles ' : {
' en ' : ' mincount:3 ' ,
2015-01-31 17:51:39 +08:00
} ,
} ,
2016-07-26 11:06:50 +08:00
} ]
2014-09-02 00:37:10 +08:00
} , {
2016-07-26 11:06:50 +08:00
' url ' : ' http://tosh.cc.com/video-collections/x2iz7k/just-plain-foul/m5q4fp ' ,
2016-05-22 04:58:41 +08:00
' only_matching ' : True ,
2014-09-01 23:57:45 +08:00
} ]
2013-06-24 02:50:22 +08:00
2016-07-26 11:06:50 +08:00
@classmethod
def _transform_rtmp_url ( cls , rtmp_video_url ) :
new_urls = super ( ToshIE , cls ) . _transform_rtmp_url ( rtmp_video_url )
new_urls [ ' rtmp ' ] = rtmp_video_url . replace ( ' viacomccstrm ' , ' viacommtvstrm ' )
return new_urls
2016-07-17 17:58:58 +08:00
class ComedyCentralTVIE ( MTVServicesInfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?comedycentral \ .tv/(?:staffeln|shows)/(?P<id>[^/?#&]+) '
_TESTS = [ {
' url ' : ' http://www.comedycentral.tv/staffeln/7436-the-mindy-project-staffel-4 ' ,
' info_dict ' : {
' id ' : ' local_playlist-f99b626bdfe13568579a ' ,
' ext ' : ' flv ' ,
' title ' : ' Episode_the-mindy-project_shows_season-4_episode-3_full-episode_part1 ' ,
} ,
' params ' : {
# rtmp download
' skip_download ' : True ,
} ,
} , {
' url ' : ' http://www.comedycentral.tv/shows/1074-workaholics ' ,
' only_matching ' : True ,
} , {
' url ' : ' http://www.comedycentral.tv/shows/1727-the-mindy-project/bonus ' ,
' only_matching ' : True ,
} ]
def _real_extract ( self , url ) :
video_id = self . _match_id ( url )
webpage = self . _download_webpage ( url , video_id )
mrss_url = self . _search_regex (
r ' data-mrss=([ " \' ])(?P<url>(?:(?! \ 1).)+) \ 1 ' ,
webpage , ' mrss url ' , group = ' url ' )
return self . _get_videos_info_from_url ( mrss_url , video_id )
2016-08-02 20:02:31 +08:00
class ComedyCentralShortnameIE ( InfoExtractor ) :
_VALID_URL = r ' ^:(?P<id>tds|thedailyshow)$ '
_TESTS = [ {
' url ' : ' :tds ' ,
' only_matching ' : True ,
} , {
' url ' : ' :thedailyshow ' ,
' only_matching ' : True ,
} ]
def _real_extract ( self , url ) :
video_id = self . _match_id ( url )
shortcut_map = {
' tds ' : ' http://www.cc.com/shows/the-daily-show-with-trevor-noah/full-episodes ' ,
' thedailyshow ' : ' http://www.cc.com/shows/the-daily-show-with-trevor-noah/full-episodes ' ,
}
return self . url_result ( shortcut_map [ video_id ] )