mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-10-04 13:24:40 -04:00
@@ -1,6 +1,6 @@
|
||||
# flake8: noqa: F401
|
||||
"""Imports all optional dependencies for the project.
|
||||
An attribute "_yt_dlp__identifier" may be inserted into the module if it uses an ambigious namespace"""
|
||||
An attribute "_yt_dlp__identifier" may be inserted into the module if it uses an ambiguous namespace"""
|
||||
|
||||
try:
|
||||
import brotlicffi as brotli
|
||||
|
@@ -103,7 +103,7 @@ class AbemaLicenseHandler(urllib.request.BaseHandler):
|
||||
HKEY = b'3AF0298C219469522A313570E8583005A642E73EDD58E3EA2FB7339D3DF1597E'
|
||||
|
||||
def __init__(self, ie: 'AbemaTVIE'):
|
||||
# the protcol that this should really handle is 'abematv-license://'
|
||||
# the protocol that this should really handle is 'abematv-license://'
|
||||
# abematv_license_open is just a placeholder for development purposes
|
||||
# ref. https://github.com/python/cpython/blob/f4c03484da59049eb62a9bf7777b963e2267d187/Lib/urllib/request.py#L510
|
||||
setattr(self, 'abematv-license_open', getattr(self, 'abematv_license_open'))
|
||||
@@ -312,7 +312,7 @@ class AbemaTVIE(AbemaTVBaseIE):
|
||||
|
||||
def _real_extract(self, url):
|
||||
# starting download using infojson from this extractor is undefined behavior,
|
||||
# and never be fixed in the future; you must trigger downloads by directly specifing URL.
|
||||
# and never be fixed in the future; you must trigger downloads by directly specifying URL.
|
||||
# (unless there's a way to hook before downloading by extractor)
|
||||
video_id, video_type = self._match_valid_url(url).group('id', 'type')
|
||||
headers = {
|
||||
|
@@ -391,7 +391,7 @@ class InfoExtractor:
|
||||
There must be a key "entries", which is a list, an iterable, or a PagedList
|
||||
object, each element of which is a valid dictionary by this specification.
|
||||
|
||||
Additionally, playlists can have "id", "title", and any other relevent
|
||||
Additionally, playlists can have "id", "title", and any other relevant
|
||||
attributes with the same semantics as videos (see above).
|
||||
|
||||
It can also have the following optional fields:
|
||||
@@ -696,7 +696,7 @@ class InfoExtractor:
|
||||
return self._downloader.cookiejar
|
||||
|
||||
def _initialize_pre_login(self):
|
||||
""" Intialization before login. Redefine in subclasses."""
|
||||
""" Initialization before login. Redefine in subclasses."""
|
||||
pass
|
||||
|
||||
def _perform_login(self, username, password):
|
||||
@@ -3207,7 +3207,7 @@ class InfoExtractor:
|
||||
|
||||
entries = []
|
||||
# amp-video and amp-audio are very similar to their HTML5 counterparts
|
||||
# so we wll include them right here (see
|
||||
# so we will include them right here (see
|
||||
# https://www.ampproject.org/docs/reference/components/amp-video)
|
||||
# For dl8-* tags see https://delight-vr.com/documentation/dl8-video/
|
||||
_MEDIA_TAG_NAME_RE = r'(?:(?:amp|dl8(?:-live)?)-)?(video|audio)'
|
||||
|
@@ -142,7 +142,7 @@ class GenericIE(InfoExtractor):
|
||||
IE_DESC = 'Generic downloader that works on some sites'
|
||||
_VALID_URL = r'.*'
|
||||
IE_NAME = 'generic'
|
||||
_NETRC_MACHINE = False # Supress username warning
|
||||
_NETRC_MACHINE = False # Suppress username warning
|
||||
_TESTS = [
|
||||
# Direct link to a video
|
||||
{
|
||||
|
@@ -110,7 +110,7 @@ class RokfinIE(InfoExtractor):
|
||||
self.raise_login_required('This video is only available to premium users', True, method='cookies')
|
||||
elif scheduled:
|
||||
self.raise_no_formats(
|
||||
f'Stream is offline; sheduled for {datetime.fromtimestamp(scheduled).strftime("%Y-%m-%d %H:%M:%S")}',
|
||||
f'Stream is offline; scheduled for {datetime.fromtimestamp(scheduled).strftime("%Y-%m-%d %H:%M:%S")}',
|
||||
video_id=video_id, expected=True)
|
||||
self._sort_formats(formats)
|
||||
|
||||
|
@@ -62,7 +62,7 @@ from ..utils import (
|
||||
variadic,
|
||||
)
|
||||
|
||||
# any clients starting with _ cannot be explicity requested by the user
|
||||
# any clients starting with _ cannot be explicitly requested by the user
|
||||
INNERTUBE_CLIENTS = {
|
||||
'web': {
|
||||
'INNERTUBE_API_KEY': 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',
|
||||
@@ -792,7 +792,7 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||
if yt_error:
|
||||
self._report_alerts([('ERROR', yt_error)], fatal=False)
|
||||
# Downloading page may result in intermittent 5xx HTTP error
|
||||
# Sometimes a 404 is also recieved. See: https://github.com/ytdl-org/youtube-dl/issues/28289
|
||||
# Sometimes a 404 is also received. See: https://github.com/ytdl-org/youtube-dl/issues/28289
|
||||
# We also want to catch all other network exceptions since errors in later pages can be troublesome
|
||||
# See https://github.com/yt-dlp/yt-dlp/issues/507#issuecomment-880188210
|
||||
if not isinstance(e.cause, urllib.error.HTTPError) or e.cause.code not in (403, 429):
|
||||
@@ -3504,7 +3504,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||
# See: https://github.com/yt-dlp/yt-dlp/issues/340
|
||||
# List of possible thumbnails - Ref: <https://stackoverflow.com/a/20542029>
|
||||
thumbnail_names = [
|
||||
# While the *1,*2,*3 thumbnails are just below their correspnding "*default" variants
|
||||
# While the *1,*2,*3 thumbnails are just below their corresponding "*default" variants
|
||||
# in resolution, these are not the custom thumbnail. So de-prioritize them
|
||||
'maxresdefault', 'hq720', 'sddefault', 'hqdefault', '0', 'mqdefault', 'default',
|
||||
'sd1', 'sd2', 'sd3', 'hq1', 'hq2', 'hq3', 'mq1', 'mq2', 'mq3', '1', '2', '3'
|
||||
|
@@ -206,7 +206,7 @@ class _YoutubeDLOptionParser(optparse.OptionParser):
|
||||
return sys.argv[1:] if args is None else list(args)
|
||||
|
||||
def _match_long_opt(self, opt):
|
||||
"""Improve ambigious argument resolution by comparing option objects instead of argument strings"""
|
||||
"""Improve ambiguous argument resolution by comparing option objects instead of argument strings"""
|
||||
try:
|
||||
return super()._match_long_opt(opt)
|
||||
except optparse.AmbiguousOptionError as e:
|
||||
@@ -453,7 +453,7 @@ def create_parser():
|
||||
'Eg: --alias get-audio,-X "-S=aext:{0},abr -x --audio-format {0}" creates options '
|
||||
'"--get-audio" and "-X" that takes an argument (ARG0) and expands to '
|
||||
'"-S=aext:ARG0,abr -x --audio-format ARG0". All defined aliases are listed in the --help output. '
|
||||
'Alias options can trigger more aliases; so be carefull to avoid defining recursive options. '
|
||||
'Alias options can trigger more aliases; so be careful to avoid defining recursive options. '
|
||||
f'As a safety measure, each alias may be triggered a maximum of {_YoutubeDLOptionParser.ALIAS_TRIGGER_LIMIT} times. '
|
||||
'This option can be used multiple times'))
|
||||
|
||||
@@ -525,7 +525,7 @@ def create_parser():
|
||||
'-I', '--playlist-items',
|
||||
dest='playlist_items', metavar='ITEM_SPEC', default=None,
|
||||
help=(
|
||||
'Comma seperated playlist_index of the videos to download. '
|
||||
'Comma separated playlist_index of the videos to download. '
|
||||
'You can specify a range using "[START]:[STOP][:STEP]". For backward compatibility, START-STOP is also supported. '
|
||||
'Use negative indices to count from the right and negative STEP to download in reverse order. '
|
||||
'Eg: "-I 1:3,7,-5::2" used on a playlist of size 15 will download the videos at index 1,2,3,7,11,13,15'))
|
||||
|
@@ -586,7 +586,7 @@ class FFmpegEmbedSubtitlePP(FFmpegPostProcessor):
|
||||
|
||||
filename = info['filepath']
|
||||
|
||||
# Disabled temporarily. There needs to be a way to overide this
|
||||
# Disabled temporarily. There needs to be a way to override this
|
||||
# in case of duration actually mismatching in extractor
|
||||
# See: https://github.com/yt-dlp/yt-dlp/issues/1870, https://github.com/yt-dlp/yt-dlp/issues/1385
|
||||
'''
|
||||
|
@@ -234,7 +234,7 @@ class Updater:
|
||||
|
||||
def run_update(ydl):
|
||||
"""Update the program file with the latest version from the repository
|
||||
@returns Whether there was a successfull update (No update = False)
|
||||
@returns Whether there was a successful update (No update = False)
|
||||
"""
|
||||
return Updater(ydl).update()
|
||||
|
||||
|
@@ -2994,7 +2994,7 @@ def read_batch_urls(batch_fd):
|
||||
if not url or url.startswith(('#', ';', ']')):
|
||||
return False
|
||||
# "#" cannot be stripped out since it is part of the URI
|
||||
# However, it can be safely stipped out if follwing a whitespace
|
||||
# However, it can be safely stripped out if following a whitespace
|
||||
return re.split(r'\s#', url, 1)[0].rstrip()
|
||||
|
||||
with contextlib.closing(batch_fd) as fd:
|
||||
|
Reference in New Issue
Block a user