]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/theplatform.py
23172143ec41ecc48e88c333dfdd476db330e1b8
   4 from .common 
import InfoExtractor
 
  10 _x 
= lambda p
: xpath_with_ns(p
, {'smil': 'http://www.w3.org/2005/SMIL21/Language'}) 
  13 class ThePlatformIE(InfoExtractor
): 
  14     _VALID_URL 
= r
'(?:https?://link\.theplatform\.com/s/[^/]+/|theplatform:)(?P<id>[^/\?]+)' 
  17         # from http://www.metacafe.com/watch/cb-e9I_cZgTgIPd/blackberrys_big_bold_z30/ 
  18         u
'url': u
'http://link.theplatform.com/s/dJ5BDC/e9I_cZgTgIPd/meta.smil?format=smil&Tracking=true&mbr=true', 
  20             u
'id': u
'e9I_cZgTgIPd', 
  22             u
'title': u
'Blackberry\'s big, bold Z30', 
  23             u
'description': u
'The Z30 is Blackberry\'s biggest, baddest mobile messaging device yet.', 
  28             u
'skip_download': True, 
  32     def _get_info(self
, video_id
): 
  33         smil_url 
= ('http://link.theplatform.com/s/dJ5BDC/{0}/meta.smil?' 
  34             'format=smil&mbr=true'.format(video_id
)) 
  35         meta 
= self
._download
_xml
(smil_url
, video_id
) 
  40                 for n 
in meta
.findall(_x('.//smil:ref')) 
  41                 if n
.attrib
.get('title') == u
'Geographic Restriction') 
  45             raise ExtractorError(error_msg
, expected
=True) 
  47         info_url 
= 'http://link.theplatform.com/s/dJ5BDC/{0}?format=preview'.format(video_id
) 
  48         info_json 
= self
._download
_webpage
(info_url
, video_id
) 
  49         info 
= json
.loads(info_json
) 
  51         head 
= meta
.find(_x('smil:head')) 
  52         body 
= meta
.find(_x('smil:body')) 
  53         base_url 
= head
.find(_x('smil:meta')).attrib
['base'] 
  54         switch 
= body
.find(_x('smil:switch')) 
  56         for f 
in switch
.findall(_x('smil:video')): 
  58             width 
= int(attr
['width']) 
  59             height 
= int(attr
['height']) 
  60             vbr 
= int(attr
['system-bitrate']) // 1000 
  61             format_id 
= '%dx%d_%dk' % (width
, height
, vbr
) 
  63                 'format_id': format_id
, 
  65                 'play_path': 'mp4:' + attr
['src'], 
  72         self
._sort
_formats
(formats
) 
  76             'title': info
['title'], 
  78             'description': info
['description'], 
  79             'thumbnail': info
['defaultThumbnailUrl'], 
  80             'duration': info
['duration']//1000, 
  83     def _real_extract(self
, url
): 
  84         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  85         video_id 
= mobj
.group('id') 
  86         return self
._get
_info
(video_id
)