]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/tbs.py
4 from . turner
import TurnerBaseIE
12 class TBSIE ( TurnerBaseIE
):
13 _VALID_URL
= r
'https?://(?:www\.)?(?P<site>tbs|tntdrama)\.com(?P<path>/(?:movies|watchtnt|watchtbs|shows/[^/]+/(?:clips|season-\d+/episode-\d+))/(?P<id>[^/?#]+))'
15 'url' : 'http://www.tntdrama.com/shows/the-alienist/clips/monster' ,
17 'id' : '8d384cde33b89f3a43ce5329de42903ed5099887' ,
20 'description' : 'Get a first look at the theatrical trailer for TNT’s highly anticipated new psychological thriller The Alienist, which premieres January 22 on TNT.' ,
21 'timestamp' : 1508175329 ,
22 'upload_date' : '20171016' ,
26 'skip_download' : True ,
29 'url' : 'http://www.tbs.com/shows/search-party/season-1/episode-1/explicit-the-mysterious-disappearance-of-the-girl-no-one-knew' ,
30 'only_matching' : True ,
32 'url' : 'http://www.tntdrama.com/movies/star-wars-a-new-hope' ,
33 'only_matching' : True ,
36 def _real_extract ( self
, url
):
37 site
, path
, display_id
= self
._ match
_ valid
_u rl
( url
). groups ()
38 webpage
= self
._ download
_ webpage
( url
, display_id
)
39 drupal_settings
= self
._ parse
_ json
( self
._ search
_ regex
(
40 r
'<script[^>]+?data-drupal-selector="drupal-settings-json"[^>]*?>( {.+?} )</script>' ,
41 webpage
, 'drupal setting' ), display_id
)
42 is_live
= 'watchtnt' in path
or 'watchtbs' in path
43 video_data
= next ( v
for v
in drupal_settings
[ 'turner_playlist' ] if is_live
or v
. get ( 'url' ) == path
)
45 media_id
= video_data
[ 'mediaID' ]
46 title
= video_data
[ 'title' ]
47 tokenizer_query
= urllib
. parse
. parse_qs ( urllib
. parse
. urlparse (
48 drupal_settings
[ 'ngtv_token_url' ]). query
)
50 info
= self
._ extract
_ ngtv
_ info
(
51 media_id
, tokenizer_query
, {
53 'site_name' : site
[: 3 ]. upper (),
54 'auth_required' : video_data
. get ( 'authRequired' ) == '1' or is_live
,
59 for image_id
, image
in video_data
. get ( 'images' , {}). items ():
60 image_url
= image
. get ( 'url' )
61 if not image_url
or image
. get ( 'type' ) != 'video' :
67 mobj
= re
. search ( r
'(\d+)x(\d+)' , image_url
)
70 'width' : int ( mobj
. group ( 1 )),
71 'height' : int ( mobj
. group ( 2 )),
78 'description' : strip_or_none ( video_data
. get ( 'descriptionNoTags' ) or video_data
. get ( 'shortDescriptionNoTags' )),
79 'duration' : float_or_none ( video_data
. get ( 'duration' )) or info
. get ( 'duration' ),
80 'timestamp' : int_or_none ( video_data
. get ( 'created' )),
81 'season_number' : int_or_none ( video_data
. get ( 'season' )),
82 'episode_number' : int_or_none ( video_data
. get ( 'episode' )),
83 'thumbnails' : thumbnails
,