]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/cinetecamilano.py
3 from .common
import InfoExtractor
4 from ..networking
.exceptions
import HTTPError
16 class CinetecaMilanoIE(InfoExtractor
):
17 _VALID_URL
= r
'https?://(?:www\.)?cinetecamilano\.it/film/(?P<id>\d+)'
19 'url': 'https://www.cinetecamilano.it/film/1942',
23 'title': 'Il draghetto Gris\u00f9 (4 episodi)',
24 'release_date': '20220129',
25 'thumbnail': r
're:.+\.png',
26 'description': 'md5:5328cbe080b93224712b6f17fcaf2c01',
27 'modified_date': '20200520',
29 'release_timestamp': 1643446208,
30 'modified_timestamp': int
34 def _real_extract(self
, url
):
35 video_id
= self
._match
_id
(url
)
37 film_json
= self
._download
_json
(
38 f
'https://www.cinetecamilano.it/api/catalogo/{video_id}/?',
41 'Authorization': try_get(self
._get
_cookies
('https://www.cinetecamilano.it'), lambda x
: f
'Bearer {x["cnt-token"].value}') or ''
43 except ExtractorError
as e
:
44 if ((isinstance(e
.cause
, HTTPError
) and e
.cause
.status
== 500)
45 or isinstance(e
.cause
, json
.JSONDecodeError
)):
46 self
.raise_login_required(method
='cookies')
48 if not film_json
.get('success') or not film_json
.get('archive'):
49 raise ExtractorError('Video information not found')
50 archive
= film_json
['archive']
54 'title': archive
.get('title'),
55 'description': strip_or_none(archive
.get('description')),
56 'duration': float_or_none(archive
.get('duration'), invscale
=60),
57 'release_timestamp': parse_iso8601(archive
.get('updated_at'), delimiter
=' '),
58 'modified_timestamp': parse_iso8601(archive
.get('created_at'), delimiter
=' '),
59 'thumbnail': urljoin(url
, try_get(archive
, lambda x
: x
['thumb']['src'].replace('/public/', '/storage/'))),
60 'formats': self
._extract
_m
3u8_formats
(
61 urljoin(url
, traverse_obj(archive
, ('drm', 'hls'))), video_id
, 'mp4')