Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[svt] Fix download of wrong episode and update test #7789

Merged
merged 10 commits into from
Sep 2, 2023
39 changes: 32 additions & 7 deletions yt_dlp/extractor/svt.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
import re

from .common import InfoExtractor
Expand All @@ -6,10 +7,11 @@
determine_ext,
dict_get,
int_or_none,
unified_timestamp,
str_or_none,
strip_or_none,
traverse_obj,
try_get,
unified_timestamp,
)


Expand Down Expand Up @@ -145,6 +147,7 @@ class SVTPlayIE(SVTPlayBaseIE):
)
'''
_TESTS = [{
'skip': 'Episode is no longer available',
'url': 'https://www.svtplay.se/video/30479064',
'md5': '2382036fd6f8c994856c323fe51c426e',
'info_dict': {
Expand All @@ -168,6 +171,27 @@ class SVTPlayIE(SVTPlayBaseIE):
# AssertionError: Expected test_SVTPlay_jNwpV9P.mp4 to be at least 9.77KiB, but it's only 864.00B
'skip_download': True,
},
}, {
'url': 'https://www.svtplay.se/video/emBxBQj',
'md5': '2382036fd6f8c994856c323fe51c426e',
'info_dict': {
'id': 'eyBd9aj',
'ext': 'mp4',
'title': '1. Farlig kryssning',
'timestamp': 1491019200,
'upload_date': '20170401',
'duration': 2566,
'thumbnail': r're:^https?://(?:.*[\.-]jpg|www.svtstatic.se/image/.*)$',
'age_limit': 0,
'episode': '1. Farlig kryssning',
'series': 'Rederiet',
'subtitles': {
'sv': 'count:3'
},
},
'params': {
'skip_download': 'm3u8',
},
}, {
'url': 'https://www.svtplay.se/video/30479064/husdrommar/husdrommar-sasong-8-designdrommar-i-stenungsund?modalId=8zVbDPA',
'only_matching': True,
Expand Down Expand Up @@ -247,15 +271,16 @@ def _real_extract(self, url):
data, lambda x: x['statistics']['dataLake']['content']['id'],
compat_str)

if not svt_id:
nextjs_data = self._search_nextjs_data(webpage, video_id, fatal=False)
bashonly marked this conversation as resolved.
Show resolved Hide resolved
svt_id = traverse_obj(nextjs_data, (
'props', 'urqlState', ..., 'data', {json.loads}, 'detailsPageByPath', 'id', {str}), get_all=False)

if not svt_id:
svt_id = self._search_regex(
(r'<video[^>]+data-video-id=["\']([\da-zA-Z-]+)',
r'<[^>]+\bdata-rt=["\']top-area-play-button["\'][^>]+\bhref=["\'][^"\']*video/%s/[^"\']*\b(?:modalId|id)=([\da-zA-Z-]+)' % re.escape(video_id),
r'["\']videoSvtId["\']\s*:\s*["\']([\da-zA-Z-]+)',
r'["\']videoSvtId\\?["\']\s*:\s*\\?["\']([\da-zA-Z-]+)',
r'"content"\s*:\s*{.*?"id"\s*:\s*"([\da-zA-Z-]+)"',
r'["\']svtId["\']\s*:\s*["\']([\da-zA-Z-]+)',
r'["\']svtId\\?["\']\s*:\s*\\?["\']([\da-zA-Z-]+)'),
r'<[^>]+\bdata-rt=["\']top-area-play-button["\'][^>]+\bhref=["\'][^"\']*video/[\w-]+/[^"\']*\b(?:modalId|id)=([\w-]+)',
r'"content"\s*:\s*{.*?"id"\s*:\s*"([\da-zA-Z-]+)"'),
webpage, 'video id')

info_dict = self._extract_by_video_id(svt_id, webpage)
Expand Down