]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/crackle.py
cc68f1c0082674eaf850c2a0c1e3d6ae0f670d74
2 from __future__
import unicode_literals
, division
4 from . common
import InfoExtractor
5 from .. utils
import int_or_none
8 class CrackleIE ( InfoExtractor
):
9 _VALID_URL
= r
'(?:crackle:|https?://(?:www\.)?crackle\.com/(?:playlist/\d+/|(?:[^/]+/)+))(?P<id>\d+)'
11 'url' : 'http://www.crackle.com/comedians-in-cars-getting-coffee/2498934' ,
15 'title' : 'Everybody Respects A Bloody Nose' ,
16 'description' : 'Jerry is kaffeeklatsching in L.A. with funnyman J.B. Smoove (Saturday Night Live, Real Husbands of Hollywood). They’re headed for brew at 10 Speed Coffee in a 1964 Studebaker Avanti.' ,
17 'thumbnail' : 're:^https?://.*\.jpg' ,
19 'series' : 'Comedians In Cars Getting Coffee' ,
30 'skip_download' : True ,
34 # extracted from http://legacyweb-us.crackle.com/flash/ReferrerRedirect.ashx
35 _THUMBNAIL_TEMPLATE
= 'http://images-us-am.crackle.com/ %s tnl_1920x1080.jpg?ts=20140107233116?c=635333335057637614'
55 def _real_extract ( self
, url
):
56 video_id
= self
._ match
_ id
( url
)
58 config_doc
= self
._ download
_ xml
(
59 'http://legacyweb-us.crackle.com/flash/QueryReferrer.ashx?site=16' ,
60 video_id
, 'Downloading config' )
62 item
= self
._ download
_ xml
(
63 'http://legacyweb-us.crackle.com/app/revamp/vidwallcache.aspx?flags=-1&fm= %s ' % video_id
,
65 title
= item
. attrib
[ 't' ]
68 formats
= self
._ extract
_ m
3u8_ formats
(
69 'http://content.uplynk.com/ext/ %s / %s .m3u8' % ( config_doc
. attrib
[ 'strUplynkOwnerId' ], video_id
),
70 video_id
, 'mp4' , m3u8_id
= 'hls' , fatal
= None )
72 path
= item
. attrib
. get ( 'p' )
74 thumbnail
= self
._ THUMBNAIL
_ TEMPLATE
% path
75 http_base_url
= 'http://ahttp.crackle.com/' + path
76 for mfs_path
, mfs_info
in self
._ MEDIA
_ FILE
_ SLOTS
. items ():
78 'url' : http_base_url
+ mfs_path
,
79 'format_id' : 'http-' + mfs_path
. split ( '.' )[ 0 ],
80 'width' : mfs_info
[ 'width' ],
81 'height' : mfs_info
[ 'height' ],
83 for cc
in item
. findall ( 'cc' ):
84 locale
= cc
. attrib
. get ( 'l' )
85 v
= cc
. attrib
. get ( 'v' )
87 if locale
not in subtitles
:
88 subtitles
[ locale
] = []
89 subtitles
[ locale
] = [{
90 'url' : ' %s / %s%s _ %s .xml' % ( config_doc
. attrib
[ 'strSubtitleServer' ], path
, locale
, v
),
93 self
._ sort
_ formats
( formats
, ( 'width' , 'height' , 'tbr' , 'format_id' ))
98 'description' : item
. attrib
. get ( 'd' ),
99 'duration' : int ( item
. attrib
. get ( 'r' ), 16 ) / 1000 if item
. attrib
. get ( 'r' ) else None ,
100 'series' : item
. attrib
. get ( 'sn' ),
101 'season_number' : int_or_none ( item
. attrib
. get ( 'se' )),
102 'episode_number' : int_or_none ( item
. attrib
. get ( 'ep' )),
103 'thumbnail' : thumbnail
,
104 'subtitles' : subtitles
,