-# coding: utf-8
-from __future__ import unicode_literals
-
-import re
-
from .common import InfoExtractor
from ..utils import (
ExtractorError,
float_or_none,
int_or_none,
- try_get,
parse_codecs,
+ try_get,
)
class StreamableIE(InfoExtractor):
_VALID_URL = r'https?://streamable\.com/(?:[es]/)?(?P<id>\w+)'
+ _EMBED_REGEX = [r'<iframe[^>]+\bsrc=(?P<q1>[\'"])(?P<url>(?:https?:)?//streamable\.com/.+?)(?P=q1)']
_TESTS = [
{
'url': 'https://streamable.com/dnd1',
'upload_date': '20160208',
'duration': 61.516,
'view_count': int,
- }
+ },
},
# older video without bitrate, width/height, codecs, etc. info
{
'upload_date': '20150311',
'duration': 12,
'view_count': int,
- }
+ },
},
{
'url': 'https://streamable.com/e/dnd1',
{
'url': 'https://streamable.com/s/okkqk/drxjds',
'only_matching': True,
- }
+ },
]
- @staticmethod
- def _extract_url(webpage):
- mobj = re.search(
- r'<iframe[^>]+src=(?P<q1>[\'"])(?P<src>(?:https?:)?//streamable\.com/(?:(?!\1).+))(?P=q1)',
- webpage)
- if mobj:
- return mobj.group('src')
-
def _real_extract(self, url):
video_id = self._match_id(url)
# to return video info like the title properly sometimes, and doesn't
# include info like the video duration
video = self._download_json(
- 'https://ajax.streamable.com/videos/%s' % video_id, video_id)
+ f'https://ajax.streamable.com/videos/{video_id}', video_id)
# Format IDs:
# 0 The video is being uploaded
'vcodec': parse_codecs(try_get(info, lambda x: x['input_metadata']['video_codec_name'])).get('vcodec'),
'acodec': parse_codecs(try_get(info, lambda x: x['input_metadata']['audio_codec_name'])).get('acodec'),
})
- self._sort_formats(formats)
return {
'id': video_id,
'timestamp': float_or_none(video.get('date_added')),
'duration': float_or_none(video.get('duration')),
'view_count': int_or_none(video.get('plays')),
- 'formats': formats
+ 'formats': formats,
}