- prog_name = mobj.group(1)
- webpage = self._download_webpage(url, prog_name)
- video_id = self._search_regex(r'programid=(.*?)&', webpage, 'video id')
- data = compat_urllib_parse.urlencode({'programid': video_id,
- 'dynamic':'1'})
- info_url = 'http://www.c-spanvideo.org/common/services/flashXml.php?' + data
- video_info = self._download_webpage(info_url, video_id, u'Downloading video info')
-
- self.report_extraction(video_id)
-
- title = self._html_search_regex(r'<string name="title">(.*?)</string>',
- video_info, 'title')
- description = self._html_search_regex(r'<meta (?:property="og:|name=")description" content="(.*?)"',
- webpage, 'description',
- flags=re.MULTILINE|re.DOTALL)
- thumbnail = self._html_search_regex(r'<meta property="og:image" content="(.*?)"',
- webpage, 'thumbnail')
-
- url = self._search_regex(r'<string name="URL">(.*?)</string>',
- video_info, 'video url')
- url = url.replace('$(protocol)', 'rtmp').replace('$(port)', '443')
- path = self._search_regex(r'<string name="path">(.*?)</string>',
- video_info, 'rtmp play path')
-
- return {'id': video_id,
+ page_id = mobj.group('id')
+ webpage = self._download_webpage(url, page_id)
+ video_id = self._search_regex(r'progid=\'?([0-9]+)\'?>', webpage, 'video id')
+
+ description = self._html_search_regex(
+ [
+ # The full description
+ r'<div class=\'expandable\'>(.*?)<a href=\'#\'',
+ # If the description is small enough the other div is not
+ # present, otherwise this is a stripped version
+ r'<p class=\'initial\'>(.*?)</p>'
+ ],
+ webpage, 'description', flags=re.DOTALL, default=None)
+
+ info_url = 'http://c-spanvideo.org/videoLibrary/assets/player/ajax-player.php?os=android&html5=program&id=' + video_id
+ data = self._download_json(info_url, video_id)
+
+ doc = self._download_xml(
+ 'http://www.c-span.org/common/services/flashXml.php?programid=' + video_id,
+ video_id)
+
+ title = find_xpath_attr(doc, './/string', 'name', 'title').text
+ thumbnail = find_xpath_attr(doc, './/string', 'name', 'poster').text
+
+ senate_isvp_url = SenateISVPIE._search_iframe_url(webpage)
+ if senate_isvp_url:
+ surl = smuggle_url(senate_isvp_url, {'force_title': title})
+ return self.url_result(surl, 'SenateISVP', video_id, title)
+
+ files = data['video']['files']
+ try:
+ capfile = data['video']['capfile']['#text']
+ except KeyError:
+ capfile = None
+
+ entries = [{
+ 'id': '%s_%d' % (video_id, partnum + 1),
+ 'title': (
+ title if len(files) == 1 else
+ '%s part %d' % (title, partnum + 1)),
+ 'url': unescapeHTML(f['path']['#text']),
+ 'description': description,
+ 'thumbnail': thumbnail,
+ 'duration': int_or_none(f.get('length', {}).get('#text')),
+ 'subtitles': {
+ 'en': [{
+ 'url': capfile,
+ 'ext': determine_ext(capfile, 'dfxp')
+ }],
+ } if capfile else None,
+ } for partnum, f in enumerate(files)]
+
+ if len(entries) == 1:
+ entry = dict(entries[0])
+ entry['id'] = video_id
+ return entry
+ else:
+ return {
+ '_type': 'playlist',
+ 'entries': entries,