]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/dispeak.py
   1 from __future__ 
import unicode_literals
 
   5 from .common 
import InfoExtractor
 
  15 class DigitallySpeakingIE(InfoExtractor
): 
  16     _VALID_URL 
= r
'https?://(?:s?evt\.dispeak|events\.digitallyspeaking)\.com/(?:[^/]+/)+xml/(?P<id>[^.]+)\.xml' 
  19         # From http://gdcvault.com/play/1023460/Tenacious-Design-and-The-Interface 
  20         'url': 'http://evt.dispeak.com/ubm/gdc/sf16/xml/840376_BQRC.xml', 
  21         'md5': 'a8efb6c31ed06ca8739294960b2dbabd', 
  25             'title': 'Tenacious Design and The Interface of \'Destiny\'', 
  28         # From http://www.gdcvault.com/play/1014631/Classic-Game-Postmortem-PAC 
  29         'url': 'http://events.digitallyspeaking.com/gdc/sf11/xml/12396_1299111843500GMPX.xml', 
  30         'only_matching': True, 
  32         # From http://www.gdcvault.com/play/1013700/Advanced-Material 
  33         'url': 'http://sevt.dispeak.com/ubm/gdc/eur10/xml/11256_1282118587281VNIT.xml', 
  34         'only_matching': True, 
  37     def _parse_mp4(self
, metadata
): 
  41         mp4_video 
= xpath_text(metadata
, './mp4video', default
=None) 
  42         if mp4_video 
is not None: 
  43             mobj 
= re
.match(r
'(?P<root>https?://.*?/).*', mp4_video
) 
  44             video_root 
= mobj
.group('root') 
  45         if video_root 
is None: 
  46             http_host 
= xpath_text(metadata
, 'httpHost', default
=None) 
  48                 video_root 
= 'http://%s/' % http_host
 
  49         if video_root 
is None: 
  50             # Hard-coded in http://evt.dispeak.com/ubm/gdc/sf16/custom/player2.js 
  51             # Works for GPUTechConf, too 
  52             video_root 
= 'http://s3-2u.digitallyspeaking.com/' 
  54         formats 
= metadata
.findall('./MBRVideos/MBRVideo') 
  57         for a_format 
in formats
: 
  58             stream_name 
= xpath_text(a_format
, 'streamName', fatal
=True) 
  59             video_path 
= re
.match(r
'mp4\:(?P<path>.*)', stream_name
).group('path') 
  60             url 
= video_root 
+ video_path
 
  61             bitrate 
= xpath_text(a_format
, 'bitrate') 
  62             tbr 
= int_or_none(bitrate
) 
  63             vbr 
= int_or_none(self
._search
_regex
( 
  64                 r
'-(\d+)\.mp4', video_path
, 'vbr', default
=None)) 
  65             abr 
= tbr 
- vbr 
if tbr 
and vbr 
else None 
  66             video_formats
.append({ 
  75     def _parse_flv(self
, metadata
): 
  77         akamai_url 
= xpath_text(metadata
, './akamaiHost', fatal
=True) 
  78         audios 
= metadata
.findall('./audios/audio') 
  81                 'url': 'rtmp://%s/ondemand?ovpfv=1.1' % akamai_url
, 
  82                 'play_path': remove_end(audio
.get('url'), '.flv'), 
  85                 'format_id': audio
.get('code'), 
  87         slide_video_path 
= xpath_text(metadata
, './slideVideo', fatal
=True) 
  89             'url': 'rtmp://%s/ondemand?ovpfv=1.1' % akamai_url
, 
  90             'play_path': remove_end(slide_video_path
, '.flv'), 
  92             'format_note': 'slide deck video', 
  95             'format_id': 'slides', 
  97         speaker_video_path 
= xpath_text(metadata
, './speakerVideo', fatal
=True) 
  99             'url': 'rtmp://%s/ondemand?ovpfv=1.1' % akamai_url
, 
 100             'play_path': remove_end(speaker_video_path
, '.flv'), 
 102             'format_note': 'speaker video', 
 105             'format_id': 'speaker', 
 109     def _real_extract(self
, url
): 
 110         video_id 
= self
._match
_id
(url
) 
 112         xml_description 
= self
._download
_xml
(url
, video_id
) 
 113         metadata 
= xpath_element(xml_description
, 'metadata') 
 115         video_formats 
= self
._parse
_mp
4(metadata
) 
 116         if video_formats 
is None: 
 117             video_formats 
= self
._parse
_flv
(metadata
) 
 121             'formats': video_formats
, 
 122             'title': xpath_text(metadata
, 'title', fatal
=True), 
 123             'duration': parse_duration(xpath_text(metadata
, 'endTime')), 
 124             'creator': xpath_text(metadata
, 'speaker'),