3 from .common
import InfoExtractor
4 from ..utils
import int_or_none
7 class PornotubeIE(InfoExtractor
):
8 _VALID_URL
= r
'https?://(?:\w+\.)?pornotube\.com/(?:[^?#]*?)/video/(?P<id>[0-9]+)'
10 'url': 'http://www.pornotube.com/orientation/straight/video/4964/title/weird-hot-and-wet-science',
11 'md5': '60fc5a4f0d93a97968fc7999d98260c9',
15 'upload_date': '20141203',
16 'title': 'Weird Hot and Wet Science',
17 'description': 'md5:a8304bef7ef06cb4ab476ca6029b01b0',
18 'categories': ['Adult Humor', 'Blondes'],
19 'uploader': 'Alpha Blue Archives',
20 'thumbnail': r
're:^https?://.*\.jpg$',
21 'timestamp': 1417582800,
26 def _real_extract(self
, url
):
27 video_id
= self
._match
_id
(url
)
29 token
= self
._download
_json
(
30 'https://api.aebn.net/auth/v2/origins/authenticate',
31 video_id
, note
='Downloading token',
32 data
=json
.dumps({'credentials': 'Clip Application'}).encode(),
34 'Content-Type': 'application/json',
35 'Origin': 'http://www.pornotube.com',
38 video_url
= self
._download
_json
(
39 f
'https://api.aebn.net/delivery/v1/clips/{video_id}/MP4',
40 video_id
, note
='Downloading delivery information',
41 headers
={'Authorization': token
})['mediaUrl']
44 'title', 'description', 'startSecond', 'endSecond', 'publishDate',
45 'studios{name}', 'categories{name}', 'movieId', 'primaryImageNumber',
48 info
= self
._download
_json
(
49 'https://api.aebn.net/content/v2/clips/{}?fields={}'.format(video_id
, ','.join(FIELDS
)), video_id
,
50 note
='Downloading metadata',
51 headers
={'Authorization': token
})
53 if isinstance(info
, list):
58 timestamp
= int_or_none(info
.get('publishDate'), scale
=1000)
59 uploader
= info
.get('studios', [{}])[0].get('name')
60 movie_id
= info
.get('movieId')
61 primary_image_number
= info
.get('primaryImageNumber')
63 if movie_id
and primary_image_number
:
64 thumbnail
= 'http://pic.aebn.net/dis/t/%s/%s_%08d.jpg' % (
65 movie_id
, movie_id
, primary_image_number
)
66 start
= int_or_none(info
.get('startSecond'))
67 end
= int_or_none(info
.get('endSecond'))
68 duration
= end
- start
if start
and end
else None
69 categories
= [c
['name'] for c
in info
.get('categories', []) if c
.get('name')]
75 'description': info
.get('description'),
77 'timestamp': timestamp
,
79 'thumbnail': thumbnail
,
80 'categories': categories
,