aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/YoutubeDL.py10
-rw-r--r--yt_dlp/extractor/instagram.py7
-rw-r--r--yt_dlp/extractor/vlive.py8
-rw-r--r--yt_dlp/extractor/youtube.py2
-rw-r--r--yt_dlp/postprocessor/__init__.py5
-rw-r--r--yt_dlp/utils.py2
6 files changed, 18 insertions, 16 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 7d085a33e..2439fc82b 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -1539,7 +1539,7 @@ class YoutubeDL(object):
def get_entry(i):
return ie_entries[i - 1]
else:
- if not isinstance(ie_entries, PagedList):
+ if not isinstance(ie_entries, (PagedList, LazyList)):
ie_entries = LazyList(ie_entries)
def get_entry(i):
@@ -3374,13 +3374,13 @@ class YoutubeDL(object):
from .postprocessor.embedthumbnail import has_mutagen
from .cookies import SQLITE_AVAILABLE, KEYRING_AVAILABLE
- lib_str = ', '.join(sorted(filter(None, (
+ lib_str = join_nonempty(
compat_pycrypto_AES and compat_pycrypto_AES.__name__.split('.')[0],
- has_websockets and 'websockets',
+ KEYRING_AVAILABLE and 'keyring',
has_mutagen and 'mutagen',
SQLITE_AVAILABLE and 'sqlite',
- KEYRING_AVAILABLE and 'keyring',
- )))) or 'none'
+ has_websockets and 'websockets',
+ delim=', ') or 'none'
write_debug('Optional libraries: %s' % lib_str)
proxy_map = {}
diff --git a/yt_dlp/extractor/instagram.py b/yt_dlp/extractor/instagram.py
index 4694c9a33..0e726423e 100644
--- a/yt_dlp/extractor/instagram.py
+++ b/yt_dlp/extractor/instagram.py
@@ -74,6 +74,7 @@ class InstagramBaseIE(InfoExtractor):
class InstagramIOSIE(InfoExtractor):
+ IE_DESC = 'IOS instagram:// URL'
_VALID_URL = r'instagram://media\?id=(?P<id>[\d_]+)'
_TESTS = [{
'url': 'instagram://media?id=482584233761418119',
@@ -241,7 +242,7 @@ class InstagramIE(InstagramBaseIE):
if 'www.instagram.com/accounts/login' in urlh.geturl().rstrip('/'):
self.raise_login_required('You need to log in to access this content')
- (media, video_url, description, thumbnail, timestamp, uploader,
+ (media, video_url, description, thumbnails, timestamp, uploader,
uploader_id, like_count, comment_count, comments, height,
width) = [None] * 12
@@ -366,8 +367,8 @@ class InstagramIE(InstagramBaseIE):
if description is not None:
description = lowercase_escape(description)
- if not thumbnail:
- thumbnail = self._og_search_thumbnail(webpage)
+ if not thumbnails:
+ thumbnails = self._og_search_thumbnail(webpage)
return {
'id': video_id,
diff --git a/yt_dlp/extractor/vlive.py b/yt_dlp/extractor/vlive.py
index 4340b1d4c..8fccf1b63 100644
--- a/yt_dlp/extractor/vlive.py
+++ b/yt_dlp/extractor/vlive.py
@@ -12,6 +12,7 @@ from ..compat import (
from ..utils import (
ExtractorError,
int_or_none,
+ LazyList,
merge_dicts,
str_or_none,
strip_or_none,
@@ -363,11 +364,10 @@ class VLiveChannelIE(VLiveBaseIE):
if board.get('boardType') not in ('STAR', 'VLIVE_PLUS'):
raise ExtractorError(f'Board {board_name!r} is not supported', expected=True)
- entries = self._entries(posts_id or channel_id, board_name)
- first_video = next(entries)
- channel_name = first_video['channel']
+ entries = LazyList(self._entries(posts_id or channel_id, board_name))
+ channel_name = entries[0]['channel']
return self.playlist_result(
- itertools.chain([first_video], entries),
+ entries,
f'{channel_id}-{posts_id}' if posts_id else channel_id,
f'{channel_name} - {board_name}' if channel_name and board_name else channel_name)
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index 25554c862..7bcd6e7dc 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -4429,7 +4429,7 @@ class YoutubeYtUserIE(InfoExtractor):
def _real_extract(self, url):
user_id = self._match_id(url)
return self.url_result(
- 'https://www.youtube.com/user/%s' % user_id,
+ 'https://www.youtube.com/user/%s/videos' % user_id,
ie=YoutubeTabIE.ie_key(), video_id=user_id)
diff --git a/yt_dlp/postprocessor/__init__.py b/yt_dlp/postprocessor/__init__.py
index 07c87b76a..4ae230d2f 100644
--- a/yt_dlp/postprocessor/__init__.py
+++ b/yt_dlp/postprocessor/__init__.py
@@ -2,6 +2,7 @@
from ..utils import load_plugins
+from .common import PostProcessor
from .embedthumbnail import EmbedThumbnailPP
from .exec import ExecPP, ExecAfterDownloadPP
from .ffmpeg import (
@@ -39,5 +40,5 @@ def get_postprocessor(key):
return globals()[key + 'PP']
-__all__ = [name for name in globals().keys() if name.endswith('IE')]
-__all__.append('FFmpegPostProcessor')
+__all__ = [name for name in globals().keys() if name.endswith('PP')]
+__all__.extend(('PostProcessor', 'FFmpegPostProcessor'))
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index cd453f367..f07eef61f 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -6586,5 +6586,5 @@ def number_of_digits(number):
def join_nonempty(*values, delim='-', from_dict=None):
if from_dict is not None:
- values = operator.itemgetter(values)(from_dict)
+ values = map(from_dict.get, values)
return delim.join(map(str, filter(None, values)))