]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/wistia.py
   1 from __future__ 
import unicode_literals
 
   3 from .common 
import InfoExtractor
 
  11 class WistiaIE(InfoExtractor
): 
  12     _VALID_URL 
= r
'(?:wistia:|https?://(?:fast\.)?wistia\.net/embed/iframe/)(?P<id>[a-z0-9]+)' 
  13     _API_URL 
= 'http://fast.wistia.com/embed/medias/%s.json' 
  14     _IFRAME_URL 
= 'http://fast.wistia.net/embed/iframe/%s' 
  17         'url': 'http://fast.wistia.net/embed/iframe/sh7fpupwlt', 
  18         'md5': 'cafeb56ec0c53c18c97405eecb3133df', 
  22             'title': 'Being Resourceful', 
  23             'description': 'a Clients From Hell Video Series video from worldwidewebhosting', 
  24             'upload_date': '20131204', 
  25             'timestamp': 1386185018, 
  29         'url': 'wistia:sh7fpupwlt', 
  30         'only_matching': True, 
  33         'url': 'wistia:807fafadvk', 
  34         'only_matching': True, 
  37     def _real_extract(self
, url
): 
  38         video_id 
= self
._match
_id
(url
) 
  40         data_json 
= self
._download
_json
( 
  41             self
._API
_URL 
% video_id
, video_id
, 
  42             # Some videos require this. 
  44                 'Referer': url 
if url
.startswith('http') else self
._IFRAME
_URL 
% video_id
, 
  47         if data_json
.get('error'): 
  49                 'Error while getting the playlist', expected
=True) 
  51         data 
= data_json
['media'] 
  56         for a 
in data
['assets']: 
  60             astatus 
= a
.get('status') 
  62             if (astatus 
is not None and astatus 
!= 2) or atype 
in ('preview', 'storyboard'): 
  64             elif atype 
in ('still', 'still_image'): 
  67                     'width': int_or_none(a
.get('width')), 
  68                     'height': int_or_none(a
.get('height')), 
  72                 is_m3u8 
= a
.get('container') == 'm3u8' or aext 
== 'm3u8' 
  76                     'tbr': int_or_none(a
.get('bitrate')), 
  77                     'vbr': int_or_none(a
.get('opt_vbitrate')), 
  78                     'width': int_or_none(a
.get('width')), 
  79                     'height': int_or_none(a
.get('height')), 
  80                     'filesize': int_or_none(a
.get('size')), 
  81                     'vcodec': a
.get('codec'), 
  82                     'container': a
.get('container'), 
  83                     'ext': 'mp4' if is_m3u8 
else aext
, 
  84                     'protocol': 'm3u8' if is_m3u8 
else None, 
  85                     'preference': 1 if atype 
== 'original' else None, 
  88         self
._sort
_formats
(formats
) 
  93             'description': data
.get('seoDescription'), 
  95             'thumbnails': thumbnails
, 
  96             'duration': float_or_none(data
.get('duration')), 
  97             'timestamp': int_or_none(data
.get('createdAt')),