diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index e4503003ae..248d47d863 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -2081,7 +2081,7 @@ ) from .threads import ( ThreadsIE, - ThreadsIOSIE + ThreadsIOSIE, ) from .threeqsdn import ThreeQSDNIE from .threespeak import ( diff --git a/yt_dlp/extractor/threads.py b/yt_dlp/extractor/threads.py index 6179366552..fba0bd4fc4 100644 --- a/yt_dlp/extractor/threads.py +++ b/yt_dlp/extractor/threads.py @@ -1,10 +1,10 @@ from .common import InfoExtractor from ..utils import ( - strftime_or_none, - traverse_obj, remove_end, - strip_or_none + strftime_or_none, + strip_or_none, ) +from ..utils.traversal import traverse_obj class ThreadsIE(InfoExtractor): @@ -26,8 +26,8 @@ class ThreadsIE(InfoExtractor): 'upload_date': '20240502', 'like_count': int, 'channel_is_verified': bool, - 'thumbnail': r're:^https?://.*\.jpg' - } + 'thumbnail': r're:^https?://.*\.jpg', + }, }, { 'url': 'https://www.threads.net/@felipebecari/post/C6cM_yNPHCF', 'info_dict': { @@ -44,8 +44,8 @@ class ThreadsIE(InfoExtractor): 'upload_date': '20240501', 'like_count': int, 'channel_is_verified': bool, - 'thumbnail': r're:^https?://.*\.jpg' - } + 'thumbnail': r're:^https?://.*\.jpg', + }, }] def _real_extract(self, url): @@ -55,7 +55,7 @@ def _real_extract(self, url): # Try getting videos from json json_data = self._search_regex( - r']+>(.*"code":"%s".*)' % video_id, + rf']+>(.*"code":"{video_id}".*)', webpage, 'main json', fatal=True) result = self._search_json( @@ -86,7 +86,7 @@ def _real_extract(self, url): if videos: for video in videos: formats.append({ - 'format_id': '%s-%s' % (media.get('pk'), video['type']), # id-type + 'format_id': '{}-{}'.format(media.get('pk'), video['type']), # id-type 'url': video['url'], 'width': media.get('original_width'), 'height': media.get('original_height'), @@ -105,7 +105,7 @@ def _real_extract(self, url): # Metadata metadata.setdefault('uploader_id', traverse_obj(post, ('user', 'username'))) metadata.setdefault('channel_is_verified', traverse_obj(post, ('user', 'is_verified'))) - metadata.setdefault('uploader_url', 'https://www.threads.net/@%s' % traverse_obj(post, ('user', 'username'))) + metadata.setdefault('uploader_url', 'https://www.threads.net/@{}'.format(traverse_obj(post, ('user', 'username')))) metadata.setdefault('timestamp', post.get('taken_at')) metadata.setdefault('like_count', post.get('like_count')) @@ -122,7 +122,7 @@ def _real_extract(self, url): return { **metadata, 'formats': formats, - 'thumbnails': thumbnails + 'thumbnails': thumbnails, } @@ -145,9 +145,9 @@ class ThreadsIOSIE(InfoExtractor): 'upload_date': '20240502', 'like_count': int, 'channel_is_verified': bool, - 'thumbnail': r're:^https?://.*\.jpg' + 'thumbnail': r're:^https?://.*\.jpg', }, - 'add_ie': ['Threads'] + 'add_ie': ['Threads'], }] def _real_extract(self, url):