mirror of
https://github.com/l1ving/youtube-dl
synced 2024-12-23 02:02:52 +08:00
86 lines
3.1 KiB
Python
86 lines
3.1 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import json
|
|
|
|
from .common import InfoExtractor
|
|
from ..utils import int_or_none
|
|
|
|
|
|
class PornotubeIE(InfoExtractor):
|
|
_VALID_URL = r'https?://(?:\w+\.)?pornotube\.com/(?:[^?#]*?)/video/(?P<id>[0-9]+)'
|
|
_TEST = {
|
|
'url': 'http://www.pornotube.com/orientation/straight/video/4964/title/weird-hot-and-wet-science',
|
|
'md5': '60fc5a4f0d93a97968fc7999d98260c9',
|
|
'info_dict': {
|
|
'id': '4964',
|
|
'ext': 'mp4',
|
|
'upload_date': '20141203',
|
|
'title': 'Weird Hot and Wet Science',
|
|
'description': 'md5:a8304bef7ef06cb4ab476ca6029b01b0',
|
|
'categories': ['Adult Humor', 'Blondes'],
|
|
'uploader': 'Alpha Blue Archives',
|
|
'thumbnail': r're:^https?://.*\.jpg$',
|
|
'timestamp': 1417582800,
|
|
'age_limit': 18,
|
|
}
|
|
}
|
|
|
|
def _real_extract(self, url):
|
|
video_id = self._match_id(url)
|
|
|
|
token = self._download_json(
|
|
'https://api.aebn.net/auth/v2/origins/authenticate',
|
|
video_id, note='Downloading token',
|
|
data=json.dumps({'credentials': 'Clip Application'}).encode('utf-8'),
|
|
headers={
|
|
'Content-Type': 'application/json',
|
|
'Origin': 'http://www.pornotube.com',
|
|
})['tokenKey']
|
|
|
|
video_url = self._download_json(
|
|
'https://api.aebn.net/delivery/v1/clips/%s/MP4' % video_id,
|
|
video_id, note='Downloading delivery information',
|
|
headers={'Authorization': token})['mediaUrl']
|
|
|
|
FIELDS = (
|
|
'title', 'description', 'startSecond', 'endSecond', 'publishDate',
|
|
'studios{name}', 'categories{name}', 'movieId', 'primaryImageNumber'
|
|
)
|
|
|
|
info = self._download_json(
|
|
'https://api.aebn.net/content/v2/clips/%s?fields=%s'
|
|
% (video_id, ','.join(FIELDS)), video_id,
|
|
note='Downloading metadata',
|
|
headers={'Authorization': token})
|
|
|
|
if isinstance(info, list):
|
|
info = info[0]
|
|
|
|
title = info['title']
|
|
|
|
timestamp = int_or_none(info.get('publishDate'), scale=1000)
|
|
uploader = info.get('studios', [{}])[0].get('name')
|
|
movie_id = info.get('movieId')
|
|
primary_image_number = info.get('primaryImageNumber')
|
|
thumbnail = None
|
|
if movie_id and primary_image_number:
|
|
thumbnail = 'http://pic.aebn.net/dis/t/%s/%s_%08d.jpg' % (
|
|
movie_id, movie_id, primary_image_number)
|
|
start = int_or_none(info.get('startSecond'))
|
|
end = int_or_none(info.get('endSecond'))
|
|
duration = end - start if start and end else None
|
|
categories = [c['name'] for c in info.get('categories', []) if c.get('name')]
|
|
|
|
return {
|
|
'id': video_id,
|
|
'url': video_url,
|
|
'title': title,
|
|
'description': info.get('description'),
|
|
'duration': duration,
|
|
'timestamp': timestamp,
|
|
'uploader': uploader,
|
|
'thumbnail': thumbnail,
|
|
'categories': categories,
|
|
'age_limit': 18,
|
|
}
|