]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/revision3.py
b1b8800b97c9eb8caad2c03f999f1bc8f304c4da
2 from __future__
import unicode_literals
6 from . common
import InfoExtractor
7 from .. compat
import compat_str
16 class Revision3IE ( InfoExtractor
):
17 _VALID_URL
= r
'https?://(?:www\.)?(?P<domain>(?:revision3|testtube|animalist)\.com)/(?P<id>[^/]+(?:/[^/?#]+)?)'
19 'url' : 'http://www.revision3.com/technobuffalo/5-google-predictions-for-2016' ,
20 'md5' : 'd94a72d85d0a829766de4deb8daaf7df' ,
23 'display_id' : 'technobuffalo/5-google-predictions-for-2016' ,
25 'title' : '5 Google Predictions for 2016' ,
26 'description' : 'Google had a great 2015, but it \' s already time to look ahead. Here are our five predictions for 2016.' ,
27 'upload_date' : '20151228' ,
28 'timestamp' : 1451325600 ,
30 'uploader' : 'TechnoBuffalo' ,
31 'uploader_id' : 'technobuffalo' ,
34 'url' : 'http://testtube.com/brainstuff' ,
37 'title' : 'BrainStuff' ,
38 'description' : 'Whether the topic is popcorn or particle physics, you can count on the HowStuffWorks team to explore-and explain-the everyday science in the world around us on BrainStuff.' ,
40 'playlist_mincount' : 93 ,
42 'url' : 'https://testtube.com/dnews/5-weird-ways-plants-can-eat-animals?utm_source=FB&utm_medium=DNews&utm_campaign=DNewsSocial' ,
45 'display_id' : 'dnews/5-weird-ways-plants-can-eat-animals' ,
48 'title' : '5 Weird Ways Plants Can Eat Animals' ,
49 'description' : 'Why have some plants evolved to eat meat?' ,
50 'upload_date' : '20150120' ,
51 'timestamp' : 1421763300 ,
53 'uploader_id' : 'dnews' ,
56 _PAGE_DATA_TEMPLATE
= 'http://www. %s /apiProxy/ddn/ %s ?domain= %s '
57 _API_KEY
= 'ba9c741bce1b9d8e3defcc22193f3651b8867e62'
59 def _real_extract ( self
, url
):
60 domain
, display_id
= re
. match ( self
._ VALID
_U RL
, url
). groups ()
61 page_info
= self
._ download
_ json
(
62 self
._ PAGE
_ DATA
_ TEMPLATE
% ( domain
, display_id
, domain
), display_id
)
64 if page_info
[ 'data' ][ 'type' ] == 'episode' :
65 episode_data
= page_info
[ 'data' ]
66 video_id
= compat_str ( episode_data
[ 'video' ][ 'data' ][ 'id' ])
67 video_data
= self
._ download
_ json
(
68 'http://revision3.com/api/getPlaylist.json?api_key= %s &codecs=h264,vp8,theora&video_id= %s ' % ( self
._ API
_ KEY
, video_id
),
72 for vcodec
, media
in video_data
[ 'media' ]. items ():
73 for quality_id
, quality
in media
. items ():
74 if quality_id
== 'hls' :
75 formats
. extend ( self
._ extract
_ m
3u8_ formats
(
76 quality
[ 'url' ], video_id
, 'mp4' ,
77 'm3u8_native' , m3u8_id
= 'hls' , fatal
= False ))
80 'url' : quality
[ 'url' ],
81 'format_id' : ' %s-%s ' % ( vcodec
, quality_id
),
82 'tbr' : int_or_none ( quality
. get ( 'bitrate' )),
85 self
._ sort
_ formats
( formats
)
87 preference
= qualities ([ 'mini' , 'small' , 'medium' , 'large' ])
91 'preference' : preference ( image_id
)
92 } for image_id
, image_url
in video_data
. get ( 'images' , {}). items ()]
96 'display_id' : display_id
,
97 'title' : unescapeHTML ( video_data
[ 'title' ]),
98 'description' : unescapeHTML ( video_data
. get ( 'summary' )),
99 'timestamp' : parse_iso8601 ( episode_data
. get ( 'publishTime' ), ' ' ),
100 'author' : episode_data
. get ( 'author' ),
101 'uploader' : video_data
. get ( 'show' , {}). get ( 'name' ),
102 'uploader_id' : video_data
. get ( 'show' , {}). get ( 'slug' ),
103 'duration' : int_or_none ( video_data
. get ( 'duration' )),
104 'thumbnails' : thumbnails
,
108 show_data
= page_info
[ 'show' ][ 'data' ]
109 episodes_data
= page_info
[ 'episodes' ][ 'data' ]
110 num_episodes
= page_info
[ 'meta' ][ 'totalEpisodes' ]
111 processed_episodes
= 0
115 entries
. extend ([ self
. url_result (
116 'http:// %s / %s / %s ' % ( domain
, display_id
, episode
[ 'slug' ])) for episode
in episodes_data
])
117 processed_episodes
+= len ( episodes_data
)
118 if processed_episodes
== num_episodes
:
121 episodes_data
= self
._ download
_ json
( self
._ PAGE
_ DATA
_ TEMPLATE
% (
122 domain
, display_id
+ '/' + compat_str ( page_num
), domain
),
123 display_id
)[ 'episodes' ][ 'data' ]
125 return self
. playlist_result (
126 entries
, compat_str ( show_data
[ 'id' ]),
127 show_data
. get ( 'name' ), show_data
. get ( 'summary' ))