From 5f25f348f9eb5db842b1ec6799f95bebb7ba35a7 Mon Sep 17 00:00:00 2001 From: Simon Sawicki Date: Tue, 23 Jan 2024 23:20:13 +0100 Subject: [PATCH] [ie/pr0gramm] Enable POL filter and provide tags without login (#9051) Authored by: Grub4K --- yt_dlp/extractor/pr0gramm.py | 41 ++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/yt_dlp/extractor/pr0gramm.py b/yt_dlp/extractor/pr0gramm.py index 2a6794208..36e415f4a 100644 --- a/yt_dlp/extractor/pr0gramm.py +++ b/yt_dlp/extractor/pr0gramm.py @@ -18,7 +18,6 @@ from ..utils.traversal import traverse_obj class Pr0grammIE(InfoExtractor): _VALID_URL = r'https?://pr0gramm\.com\/(?:[^/?#]+/)+(?P[\d]+)(?:[/?#:]|$)' _TESTS = [{ - # Tags require account 'url': 'https://pr0gramm.com/new/video/5466437', 'info_dict': { 'id': '5466437', @@ -36,7 +35,6 @@ class Pr0grammIE(InfoExtractor): '_old_archive_ids': ['pr0grammstatic 5466437'], }, }, { - # Tags require account 'url': 'https://pr0gramm.com/new/3052805:comment28391322', 'info_dict': { 'id': '3052805', @@ -71,6 +69,23 @@ class Pr0grammIE(InfoExtractor): 'thumbnail': r're:^https://thumb\.pr0gramm\.com/.*\.jpg', '_old_archive_ids': ['pr0grammstatic 5848332'], }, + }, { + 'url': 'https://pr0gramm.com/top/5895149', + 'info_dict': { + 'id': '5895149', + 'ext': 'mp4', + 'title': 'pr0gramm-5895149 by algoholigSeeManThrower', + 'tags': 'count:19', + 'uploader': 'algoholigSeeManThrower', + 'uploader_id': 457556, + 'upload_timestamp': 1697580902, + 'upload_date': '20231018', + 'like_count': int, + 'dislike_count': int, + 'age_limit': 0, + 'thumbnail': 'https://thumb.pr0gramm.com/2023/10/18/db47bb3db5e1a1b3.jpg', + '_old_archive_ids': ['pr0grammstatic 5895149'], + }, }, { 'url': 'https://pr0gramm.com/static/5466437', 'only_matching': True, @@ -92,15 +107,15 @@ class Pr0grammIE(InfoExtractor): def _maximum_flags(self): # We need to guess the flags for the content otherwise the api will raise an error # We can guess the maximum allowed flags for the account from the cookies - # Bitflags are (msbf): nsfp, nsfl, nsfw, sfw - flags = 0b0001 + # Bitflags are (msbf): pol, nsfp, nsfl, nsfw, sfw + flags = 0b10001 if self._is_logged_in: - flags |= 0b1000 + flags |= 0b01000 cookies = self._get_cookies(self.BASE_URL) if 'me' not in cookies: self._download_webpage(self.BASE_URL, None, 'Refreshing verification information') if traverse_obj(cookies, ('me', {lambda x: x.value}, {unquote}, {json.loads}, 'verified')): - flags |= 0b0110 + flags |= 0b00110 return flags @@ -134,14 +149,12 @@ class Pr0grammIE(InfoExtractor): if not source or not source.endswith('mp4'): self.raise_no_formats('Could not extract a video', expected=bool(source), video_id=video_id) - tags = None - if self._is_logged_in: - metadata = self._call_api('info', video_id, {'itemId': video_id}, note='Downloading tags') - tags = traverse_obj(metadata, ('tags', ..., 'tag', {str})) - # Sorted by "confidence", higher confidence = earlier in list - confidences = traverse_obj(metadata, ('tags', ..., 'confidence', ({int}, {float}))) - if confidences: - tags = [tag for _, tag in sorted(zip(confidences, tags), reverse=True)] + metadata = self._call_api('info', video_id, {'itemId': video_id}, note='Downloading tags') + tags = traverse_obj(metadata, ('tags', ..., 'tag', {str})) + # Sorted by "confidence", higher confidence = earlier in list + confidences = traverse_obj(metadata, ('tags', ..., 'confidence', ({int}, {float}))) + if confidences: + tags = [tag for _, tag in sorted(zip(confidences, tags), reverse=True)] formats = traverse_obj(video_info, ('variants', ..., { 'format_id': ('name', {str}),