|
|
- # 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,
- }
|