2014-01-26 08:35:34 +00:00
from __future__ import unicode_literals
from . common import InfoExtractor
2015-01-08 16:36:56 +00:00
from . . utils import (
2015-06-07 08:34:19 +00:00
parse_duration ,
2015-01-08 16:36:56 +00:00
parse_iso8601 ,
)
2016-04-30 20:55:28 +00:00
from . . compat import compat_str
2014-01-26 08:35:34 +00:00
class DiscoveryIE ( InfoExtractor ) :
2016-03-20 04:26:58 +00:00
_VALID_URL = r ''' (?x)https?://(?:www \ .)?(?:
2015-12-31 16:29:37 +00:00
discovery |
investigationdiscovery |
discoverylife |
animalplanet |
ahctv |
destinationamerica |
sciencechannel |
tlc |
velocity
2015-12-31 17:24:49 +00:00
) \. com / ( ? : [ ^ / ] + / ) * ( ? P < id > [ ^ . / ? #]+)'''
2015-06-07 08:34:19 +00:00
_TESTS = [ {
2014-06-24 15:41:53 +00:00
' url ' : ' http://www.discovery.com/tv-shows/mythbusters/videos/mission-impossible-outtakes.htm ' ,
2014-01-26 08:35:34 +00:00
' info_dict ' : {
2015-06-07 08:34:19 +00:00
' id ' : ' 20769 ' ,
' ext ' : ' mp4 ' ,
2015-01-08 16:36:56 +00:00
' title ' : ' Mission Impossible Outtakes ' ,
2014-01-27 11:41:30 +00:00
' description ' : ( ' Watch Jamie Hyneman and Adam Savage practice being '
2014-11-23 20:39:15 +00:00
' each other -- to the point of confusing Jamie \' s dog -- and '
' don \' t miss Adam moon-walking as Jamie ... behind Jamie \' s '
' back. ' ) ,
2014-01-27 11:41:30 +00:00
' duration ' : 156 ,
2015-12-31 16:29:37 +00:00
' timestamp ' : 1302032462 ,
' upload_date ' : ' 20110405 ' ,
2016-04-30 20:49:32 +00:00
' uploader_id ' : ' 103207 ' ,
2014-01-27 11:41:30 +00:00
} ,
2015-06-07 08:34:19 +00:00
' params ' : {
' skip_download ' : True , # requires ffmpeg
}
} , {
' url ' : ' http://www.discovery.com/tv-shows/mythbusters/videos/mythbusters-the-simpsons ' ,
' info_dict ' : {
' id ' : ' mythbusters-the-simpsons ' ,
' title ' : ' MythBusters: The Simpsons ' ,
} ,
2015-12-31 16:29:37 +00:00
' playlist_mincount ' : 10 ,
} , {
' url ' : ' http://www.animalplanet.com/longfin-eels-maneaters/ ' ,
' info_dict ' : {
' id ' : ' 78326 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Longfin Eels: Maneaters? ' ,
' description ' : ' Jeremy Wade tests whether or not New Zealand \' s longfin eels are man-eaters by covering himself in fish guts and getting in the water with them. ' ,
' upload_date ' : ' 20140725 ' ,
' timestamp ' : 1406246400 ,
' duration ' : 116 ,
2016-04-30 20:49:32 +00:00
' uploader_id ' : ' 103207 ' ,
2015-12-31 16:29:37 +00:00
} ,
2016-04-30 20:49:32 +00:00
' params ' : {
' skip_download ' : True , # requires ffmpeg
}
2015-06-07 08:34:19 +00:00
} ]
2014-01-26 08:35:34 +00:00
def _real_extract ( self , url ) :
2015-12-31 16:29:37 +00:00
display_id = self . _match_id ( url )
info = self . _download_json ( url + ' ?flat=1 ' , display_id )
2014-01-27 11:41:30 +00:00
2015-06-07 08:34:19 +00:00
video_title = info . get ( ' playlist_title ' ) or info . get ( ' video_title ' )
2014-01-26 08:35:34 +00:00
2016-03-27 01:03:08 +00:00
entries = [ ]
for idx , video_info in enumerate ( info [ ' playlist ' ] ) :
2016-05-02 01:07:35 +00:00
subtitles = { }
2016-04-30 19:49:09 +00:00
caption_url = video_info . get ( ' captionsUrl ' )
if caption_url :
subtitles = {
' en ' : [ {
' url ' : caption_url ,
} ]
}
2016-03-27 01:03:08 +00:00
entries . append ( {
2016-04-30 20:49:32 +00:00
' _type ' : ' url_transparent ' ,
' url ' : ' http://players.brightcove.net/103207/default_default/index.html?videoId=ref: %s ' % video_info [ ' referenceId ' ] ,
2016-03-27 01:03:08 +00:00
' id ' : compat_str ( video_info [ ' id ' ] ) ,
' title ' : video_info [ ' title ' ] ,
' description ' : video_info . get ( ' description ' ) ,
' duration ' : parse_duration ( video_info . get ( ' v ideo_length ' ) ) ,
' webpage_url ' : video_info . get ( ' href ' ) or video_info . get ( ' url ' ) ,
' thumbnail ' : video_info . get ( ' thumbnailURL ' ) ,
' alt_title ' : video_info . get ( ' secondary_title ' ) ,
' timestamp ' : parse_iso8601 ( video_info . get ( ' publishedDate ' ) ) ,
2016-04-30 19:49:09 +00:00
' subtitles ' : subtitles ,
2016-03-27 01:03:08 +00:00
} )
2015-06-07 08:34:19 +00:00
2015-12-31 16:29:37 +00:00
return self . playlist_result ( entries , display_id , video_title )