Sergey M․
8 years ago
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D
1 changed files with 115 additions and 0 deletions
Split View
Diff Options
@ -0,0 +1,115 @@ |
|||
# coding: utf-8 |
|||
from __future__ import unicode_literals |
|||
|
|||
import re |
|||
|
|||
from .common import InfoExtractor |
|||
from ..utils import ( |
|||
determine_ext, |
|||
float_or_none, |
|||
int_or_none, |
|||
mimetype2ext, |
|||
parse_iso8601, |
|||
strip_jsonp, |
|||
) |
|||
|
|||
|
|||
class ArkenaIE(InfoExtractor): |
|||
_VALID_URL = r'https?://play\.arkena\.com/(?:config|embed)/avp/v\d/player/media/(?P<id>[^/]+)/[^/]+/(?P<account_id>\d+)' |
|||
_TESTS = [{ |
|||
'url': 'https://play.arkena.com/embed/avp/v2/player/media/b41dda37-d8e7-4d3f-b1b5-9a9db578bdfe/1/129411', |
|||
'md5': 'b96f2f71b359a8ecd05ce4e1daa72365', |
|||
'info_dict': { |
|||
'id': 'b41dda37-d8e7-4d3f-b1b5-9a9db578bdfe', |
|||
'ext': 'mp4', |
|||
'title': 'Big Buck Bunny', |
|||
'description': 'Royalty free test video', |
|||
'timestamp': 1432816365, |
|||
'upload_date': '20150528', |
|||
'is_live': False, |
|||
}, |
|||
}, { |
|||
'url': 'https://play.arkena.com/config/avp/v2/player/media/b41dda37-d8e7-4d3f-b1b5-9a9db578bdfe/1/129411/?callbackMethod=jQuery1111023664739129262213_1469227693893', |
|||
'only_matching': True, |
|||
}, { |
|||
'url': 'http://play.arkena.com/config/avp/v1/player/media/327336/darkmatter/131064/?callbackMethod=jQuery1111002221189684892677_1469227595972', |
|||
'only_matching': True, |
|||
}, { |
|||
'url': 'http://play.arkena.com/embed/avp/v1/player/media/327336/darkmatter/131064/', |
|||
'only_matching': True, |
|||
}] |
|||
|
|||
@staticmethod |
|||
def _extract_url(webpage): |
|||
# See https://support.arkena.com/display/PLAY/Ways+to+embed+your+video |
|||
mobj = re.search( |
|||
r'<iframe[^>]+src=(["\'])(?P<url>(?:https?:)?//play\.arkena\.com/embed/avp/.+?)\1', |
|||
webpage) |
|||
if mobj: |
|||
return mobj.group('url') |
|||
|
|||
def _real_extract(self, url): |
|||
mobj = re.match(self._VALID_URL, url) |
|||
video_id = mobj.group('id') |
|||
account_id = mobj.group('account_id') |
|||
|
|||
playlist = self._download_json( |
|||
'https://play.arkena.com/config/avp/v2/player/media/%s/0/%s/?callbackMethod=_' |
|||
% (video_id, account_id), |
|||
video_id, transform_source=strip_jsonp)['Playlist'][0] |
|||
|
|||
media_info = playlist['MediaInfo'] |
|||
title = media_info['Title'] |
|||
media_files = playlist['MediaFiles'] |
|||
|
|||
is_live = False |
|||
formats = [] |
|||
for kind_case, kind_formats in media_files.items(): |
|||
kind = kind_case.lower() |
|||
for f in kind_formats: |
|||
f_url = f.get('Url') |
|||
if not f_url: |
|||
continue |
|||
is_live = f.get('Live') == 'true' |
|||
exts = (mimetype2ext(f.get('Type')), determine_ext(f_url, None)) |
|||
if kind == 'm3u8' or 'm3u8' in exts: |
|||
formats.extend(self._extract_m3u8_formats( |
|||
f_url, video_id, 'mp4', |
|||
entry_protocol='m3u8' if is_live else 'm3u8_native', |
|||
m3u8_id=kind, fatal=False, live=is_live)) |
|||
elif kind == 'flash' or 'f4m' in exts: |
|||
formats.extend(self._extract_f4m_formats( |
|||
f_url, video_id, f4m_id=kind, fatal=False)) |
|||
elif kind == 'dash' or 'mpd' in exts: |
|||
formats.extend(self._extract_mpd_formats( |
|||
f_url, video_id, mpd_id=kind, fatal=False)) |
|||
elif kind == 'silverlight': |
|||
# TODO: process when ism is supported (see |
|||
# https://github.com/rg3/youtube-dl/issues/8118) |
|||
pass |
|||
else: |
|||
tbr = float_or_none(f.get('Bitrate'), 1000) |
|||
formats.append({ |
|||
'url': f_url, |
|||
'format_id': '%s-%d' % (kind, tbr) if tbr else kind, |
|||
'tbr': tbr, |
|||
}) |
|||
self._sort_formats(formats) |
|||
|
|||
description = media_info.get('Description') |
|||
video_id = media_info.get('VideoId') or video_id |
|||
timestamp = parse_iso8601(media_info.get('PublishDate')) |
|||
thumbnails = [{ |
|||
'url': thumbnail['Url'], |
|||
'width': int_or_none(thumbnail.get('Size')), |
|||
} for thumbnail in (media_info.get('Poster') or []) if thumbnail.get('Url')] |
|||
|
|||
return { |
|||
'id': video_id, |
|||
'title': title, |
|||
'description': description, |
|||
'timestamp': timestamp, |
|||
'is_live': is_live, |
|||
'thumbnails': thumbnails, |
|||
'formats': formats, |
|||
} |
Write
Preview
Loading…
Cancel
Save