from __future__ import unicode_literals from .common import InfoExtractor from ..utils import ( int_or_none, parse_iso8601, ) class BeegIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?beeg\.com/(?P\d+)' _TEST = { 'url': 'http://beeg.com/5416503', 'md5': '46c384def73b33dbc581262e5ee67cef', 'info_dict': { 'id': '5416503', 'ext': 'mp4', 'title': 'Sultry Striptease', 'description': 'md5:d22219c09da287c14bed3d6c37ce4bc2', 'timestamp': 1391813355, 'upload_date': '20140207', 'duration': 383, 'tags': list, 'age_limit': 18, } } def _real_extract(self, url): video_id = self._match_id(url) video = self._download_json( 'http://beeg.com/api/v3/video/%s' % video_id, video_id) formats = [] for format_id, video_url in video.items(): if not video_url: continue height = self._search_regex( r'^(\d+)[pP]$', format_id, 'height', default=None) if not height: continue formats.append({ 'url': self._proto_relative_url(video_url.replace('{DATA_MARKERS}', ''), 'http:'), 'format_id': format_id, 'height': int(height), }) self._sort_formats(formats) title = video['title'] video_id = video.get('id') or video_id display_id = video.get('code') description = video.get('desc') timestamp = parse_iso8601(video.get('date'), ' ') duration = int_or_none(video.get('duration')) tags = [tag.strip() for tag in video['tags'].split(',')] if video.get('tags') else None return { 'id': video_id, 'display_id': display_id, 'title': title, 'description': description, 'timestamp': timestamp, 'duration': duration, 'tags': tags, 'formats': formats, 'age_limit': 18, }