|
@@ -5,10 +5,16 @@ import codecs
|
|
|
import re
|
|
|
|
|
|
from .common import InfoExtractor
|
|
|
+from ..compat import (
|
|
|
+ compat_chr,
|
|
|
+ compat_ord,
|
|
|
+ compat_urllib_parse_unquote,
|
|
|
+)
|
|
|
from ..utils import (
|
|
|
ExtractorError,
|
|
|
float_or_none,
|
|
|
int_or_none,
|
|
|
+ merge_dicts,
|
|
|
multipart_encode,
|
|
|
parse_duration,
|
|
|
random_birthday,
|
|
@@ -107,8 +113,9 @@ class CDAIE(InfoExtractor):
|
|
|
r'Odsłony:(?:\s| )*([0-9]+)', webpage,
|
|
|
'view_count', default=None)
|
|
|
average_rating = self._search_regex(
|
|
|
- r'<(?:span|meta)[^>]+itemprop=(["\'])ratingValue\1[^>]*>(?P<rating_value>[0-9.]+)',
|
|
|
- webpage, 'rating', fatal=False, group='rating_value')
|
|
|
+ (r'<(?:span|meta)[^>]+itemprop=(["\'])ratingValue\1[^>]*>(?P<rating_value>[0-9.]+)',
|
|
|
+ r'<span[^>]+\bclass=["\']rating["\'][^>]*>(?P<rating_value>[0-9.]+)'), webpage, 'rating', fatal=False,
|
|
|
+ group='rating_value')
|
|
|
|
|
|
info_dict = {
|
|
|
'id': video_id,
|
|
@@ -123,6 +130,24 @@ class CDAIE(InfoExtractor):
|
|
|
'age_limit': 18 if need_confirm_age else 0,
|
|
|
}
|
|
|
|
|
|
+ # Source: https://www.cda.pl/js/player.js?t=1606154898
|
|
|
+ def decrypt_file(a):
|
|
|
+ for p in ('_XDDD', '_CDA', '_ADC', '_CXD', '_QWE', '_Q5', '_IKSDE'):
|
|
|
+ a = a.replace(p, '')
|
|
|
+ a = compat_urllib_parse_unquote(a)
|
|
|
+ b = []
|
|
|
+ for c in a:
|
|
|
+ f = compat_ord(c)
|
|
|
+ b.append(compat_chr(33 + (f + 14) % 94) if 33 <= f and 126 >= f else compat_chr(f))
|
|
|
+ a = ''.join(b)
|
|
|
+ a = a.replace('.cda.mp4', '')
|
|
|
+ for p in ('.2cda.pl', '.3cda.pl'):
|
|
|
+ a = a.replace(p, '.cda.pl')
|
|
|
+ if '/upstream' in a:
|
|
|
+ a = a.replace('/upstream', '.mp4/upstream')
|
|
|
+ return 'https://' + a
|
|
|
+ return 'https://' + a + '.mp4'
|
|
|
+
|
|
|
def extract_format(page, version):
|
|
|
json_str = self._html_search_regex(
|
|
|
r'player_data=(\\?["\'])(?P<player_data>.+?)\1', page,
|
|
@@ -141,6 +166,8 @@ class CDAIE(InfoExtractor):
|
|
|
video['file'] = codecs.decode(video['file'], 'rot_13')
|
|
|
if video['file'].endswith('adc.mp4'):
|
|
|
video['file'] = video['file'].replace('adc.mp4', '.mp4')
|
|
|
+ elif not video['file'].startswith('http'):
|
|
|
+ video['file'] = decrypt_file(video['file'])
|
|
|
f = {
|
|
|
'url': video['file'],
|
|
|
}
|
|
@@ -179,4 +206,6 @@ class CDAIE(InfoExtractor):
|
|
|
|
|
|
self._sort_formats(formats)
|
|
|
|
|
|
- return info_dict
|
|
|
+ info = self._search_json_ld(webpage, video_id, default={})
|
|
|
+
|
|
|
+ return merge_dicts(info_dict, info)
|