70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # coding: utf-8 | ||
|  | from __future__ import unicode_literals | ||
|  | 
 | ||
|  | from .common import InfoExtractor | ||
|  | from ..utils import ( | ||
|  |     int_or_none, | ||
|  |     unified_timestamp, | ||
|  | ) | ||
|  | 
 | ||
|  | 
 | ||
|  | class CamTubeIE(InfoExtractor): | ||
|  |     _VALID_URL = r'https?://(?:(?:www|api)\.)?camtube\.co/recordings?/(?P<id>[^/?#&]+)' | ||
|  |     _TESTS = [{ | ||
|  |         'url': 'https://camtube.co/recording/minafay-030618-1136-chaturbate-female', | ||
|  |         'info_dict': { | ||
|  |             'id': '42ad3956-dd5b-445a-8313-803ea6079fac', | ||
|  |             'display_id': 'minafay-030618-1136-chaturbate-female', | ||
|  |             'ext': 'mp4', | ||
|  |             'title': 'minafay-030618-1136-chaturbate-female', | ||
|  |             'duration': 1274, | ||
|  |             'timestamp': 1528018608, | ||
|  |             'upload_date': '20180603', | ||
|  |         }, | ||
|  |         'params': { | ||
|  |             'skip_download': True, | ||
|  |         }, | ||
|  |     }] | ||
|  | 
 | ||
|  |     _API_BASE = 'https://api.camtube.co' | ||
|  | 
 | ||
|  |     def _real_extract(self, url): | ||
|  |         display_id = self._match_id(url) | ||
|  | 
 | ||
|  |         token = self._download_json( | ||
|  |             '%s/rpc/session/new' % self._API_BASE, display_id, | ||
|  |             'Downloading session token')['token'] | ||
|  | 
 | ||
|  |         self._set_cookie('api.camtube.co', 'session', token) | ||
|  | 
 | ||
|  |         video = self._download_json( | ||
|  |             '%s/recordings/%s' % (self._API_BASE, display_id), display_id, | ||
|  |             headers={'Referer': url}) | ||
|  | 
 | ||
|  |         video_id = video['uuid'] | ||
|  |         timestamp = unified_timestamp(video.get('createdAt')) | ||
|  |         duration = int_or_none(video.get('duration')) | ||
|  |         view_count = int_or_none(video.get('viewCount')) | ||
|  |         like_count = int_or_none(video.get('likeCount')) | ||
|  |         creator = video.get('stageName') | ||
|  | 
 | ||
|  |         formats = [{ | ||
|  |             'url': '%s/recordings/%s/manifest.m3u8' | ||
|  |                    % (self._API_BASE, video_id), | ||
|  |             'format_id': 'hls', | ||
|  |             'ext': 'mp4', | ||
|  |             'protocol': 'm3u8_native', | ||
|  |         }] | ||
|  | 
 | ||
|  |         return { | ||
|  |             'id': video_id, | ||
|  |             'display_id': display_id, | ||
|  |             'title': display_id, | ||
|  |             'timestamp': timestamp, | ||
|  |             'duration': duration, | ||
|  |             'view_count': view_count, | ||
|  |             'like_count': like_count, | ||
|  |             'creator': creator, | ||
|  |             'formats': formats, | ||
|  |         } |