arnes.py (3634B)
- # coding: utf-8
- from __future__ import unicode_literals
- from .common import InfoExtractor
- from ..compat import (
- compat_parse_qs,
- compat_urllib_parse_urlparse,
- )
- from ..utils import (
- float_or_none,
- int_or_none,
- parse_iso8601,
- remove_start,
- )
- class ArnesIE(InfoExtractor):
- IE_NAME = 'video.arnes.si'
- IE_DESC = 'Arnes Video'
- _VALID_URL = r'https?://video\.arnes\.si/(?:[a-z]{2}/)?(?:watch|embed|api/(?:asset|public/video))/(?P<id>[0-9a-zA-Z]{12})'
- _TESTS = [{
- 'url': 'https://video.arnes.si/watch/a1qrWTOQfVoU?t=10',
- 'md5': '4d0f4d0a03571b33e1efac25fd4a065d',
- 'info_dict': {
- 'id': 'a1qrWTOQfVoU',
- 'ext': 'mp4',
- 'title': 'Linearna neodvisnost, definicija',
- 'description': 'Linearna neodvisnost, definicija',
- 'license': 'PRIVATE',
- 'creator': 'Polona Oblak',
- 'timestamp': 1585063725,
- 'upload_date': '20200324',
- 'channel': 'Polona Oblak',
- 'channel_id': 'q6pc04hw24cj',
- 'channel_url': 'https://video.arnes.si/?channel=q6pc04hw24cj',
- 'duration': 596.75,
- 'view_count': int,
- 'tags': ['linearna_algebra'],
- 'start_time': 10,
- }
- }, {
- 'url': 'https://video.arnes.si/api/asset/s1YjnV7hadlC/play.mp4',
- 'only_matching': True,
- }, {
- 'url': 'https://video.arnes.si/embed/s1YjnV7hadlC',
- 'only_matching': True,
- }, {
- 'url': 'https://video.arnes.si/en/watch/s1YjnV7hadlC',
- 'only_matching': True,
- }, {
- 'url': 'https://video.arnes.si/embed/s1YjnV7hadlC?t=123&hideRelated=1',
- 'only_matching': True,
- }, {
- 'url': 'https://video.arnes.si/api/public/video/s1YjnV7hadlC',
- 'only_matching': True,
- }]
- _BASE_URL = 'https://video.arnes.si'
- def _real_extract(self, url):
- video_id = self._match_id(url)
- video = self._download_json(
- self._BASE_URL + '/api/public/video/' + video_id, video_id)['data']
- title = video['title']
- formats = []
- for media in (video.get('media') or []):
- media_url = media.get('url')
- if not media_url:
- continue
- formats.append({
- 'url': self._BASE_URL + media_url,
- 'format_id': remove_start(media.get('format'), 'FORMAT_'),
- 'format_note': media.get('formatTranslation'),
- 'width': int_or_none(media.get('width')),
- 'height': int_or_none(media.get('height')),
- })
- self._sort_formats(formats)
- channel = video.get('channel') or {}
- channel_id = channel.get('url')
- thumbnail = video.get('thumbnailUrl')
- return {
- 'id': video_id,
- 'title': title,
- 'formats': formats,
- 'thumbnail': self._BASE_URL + thumbnail,
- 'description': video.get('description'),
- 'license': video.get('license'),
- 'creator': video.get('author'),
- 'timestamp': parse_iso8601(video.get('creationTime')),
- 'channel': channel.get('name'),
- 'channel_id': channel_id,
- 'channel_url': self._BASE_URL + '/?channel=' + channel_id if channel_id else None,
- 'duration': float_or_none(video.get('duration'), 1000),
- 'view_count': int_or_none(video.get('views')),
- 'tags': video.get('hashtags'),
- 'start_time': int_or_none(compat_parse_qs(
- compat_urllib_parse_urlparse(url).query).get('t', [None])[0]),
- }