mirror of
https://github.com/ytdl-org/youtube-dl
synced 2024-09-10 13:36:28 +02:00
Merge pull request #8497 from jaimeMF/lazy-load
Add experimenta lazy loading of info extractors
This commit is contained in:
commit
680efb6723
1
.gitignore
vendored
1
.gitignore
vendored
@ -13,6 +13,7 @@ README.txt
|
|||||||
youtube-dl.1
|
youtube-dl.1
|
||||||
youtube-dl.bash-completion
|
youtube-dl.bash-completion
|
||||||
youtube-dl.fish
|
youtube-dl.fish
|
||||||
|
youtube_dl/extractor/lazy_extractors.py
|
||||||
youtube-dl
|
youtube-dl
|
||||||
youtube-dl.exe
|
youtube-dl.exe
|
||||||
youtube-dl.tar.gz
|
youtube-dl.tar.gz
|
||||||
|
8
Makefile
8
Makefile
@ -1,7 +1,7 @@
|
|||||||
all: youtube-dl README.md CONTRIBUTING.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish supportedsites
|
all: youtube-dl README.md CONTRIBUTING.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish supportedsites
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.zsh youtube-dl.fish *.dump *.part *.info.json *.mp4 *.flv *.mp3 *.avi CONTRIBUTING.md.tmp ISSUE_TEMPLATE.md.tmp youtube-dl youtube-dl.exe
|
rm -rf youtube-dl.1.temp.md youtube-dl.1 youtube-dl.bash-completion README.txt MANIFEST build/ dist/ .coverage cover/ youtube-dl.tar.gz youtube-dl.zsh youtube-dl.fish youtube_dl/extractor/lazy_extractors.py *.dump *.part *.info.json *.mp4 *.flv *.mp3 *.avi CONTRIBUTING.md.tmp ISSUE_TEMPLATE.md.tmp youtube-dl youtube-dl.exe
|
||||||
find . -name "*.pyc" -delete
|
find . -name "*.pyc" -delete
|
||||||
find . -name "*.class" -delete
|
find . -name "*.class" -delete
|
||||||
|
|
||||||
@ -88,6 +88,12 @@ youtube-dl.fish: youtube_dl/*.py youtube_dl/*/*.py devscripts/fish-completion.in
|
|||||||
|
|
||||||
fish-completion: youtube-dl.fish
|
fish-completion: youtube-dl.fish
|
||||||
|
|
||||||
|
lazy-extractors: youtube_dl/extractor/lazy_extractors.py
|
||||||
|
|
||||||
|
_EXTRACTOR_FILES != find youtube_dl/extractor -iname '*.py' -and -not -iname 'lazy_extractors.py'
|
||||||
|
youtube_dl/extractor/lazy_extractors.py: devscripts/make_lazy_extractors.py devscripts/lazy_load_template.py $(_EXTRACTOR_FILES)
|
||||||
|
$(PYTHON) devscripts/make_lazy_extractors.py $@
|
||||||
|
|
||||||
youtube-dl.tar.gz: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish
|
youtube-dl.tar.gz: youtube-dl README.md README.txt youtube-dl.1 youtube-dl.bash-completion youtube-dl.zsh youtube-dl.fish
|
||||||
@tar -czf youtube-dl.tar.gz --transform "s|^|youtube-dl/|" --owner 0 --group 0 \
|
@tar -czf youtube-dl.tar.gz --transform "s|^|youtube-dl/|" --owner 0 --group 0 \
|
||||||
--exclude '*.DS_Store' \
|
--exclude '*.DS_Store' \
|
||||||
|
@ -889,14 +889,14 @@ After you have ensured this site is distributing it's content legally, you can f
|
|||||||
# TODO more properties (see youtube_dl/extractor/common.py)
|
# TODO more properties (see youtube_dl/extractor/common.py)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
5. Add an import in [`youtube_dl/extractor/__init__.py`](https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/__init__.py).
|
5. Add an import in [`youtube_dl/extractor/extractors.py`](https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/extractors.py).
|
||||||
6. Run `python test/test_download.py TestDownload.test_YourExtractor`. This *should fail* at first, but you can continually re-run it until you're done. If you decide to add more than one test, then rename ``_TEST`` to ``_TESTS`` and make it into a list of dictionaries. The tests will then be named `TestDownload.test_YourExtractor`, `TestDownload.test_YourExtractor_1`, `TestDownload.test_YourExtractor_2`, etc.
|
6. Run `python test/test_download.py TestDownload.test_YourExtractor`. This *should fail* at first, but you can continually re-run it until you're done. If you decide to add more than one test, then rename ``_TEST`` to ``_TESTS`` and make it into a list of dictionaries. The tests will then be named `TestDownload.test_YourExtractor`, `TestDownload.test_YourExtractor_1`, `TestDownload.test_YourExtractor_2`, etc.
|
||||||
7. Have a look at [`youtube_dl/extractor/common.py`](https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/common.py) for possible helper methods and a [detailed description of what your extractor should and may return](https://github.com/rg3/youtube-dl/blob/58525c94d547be1c8167d16c298bdd75506db328/youtube_dl/extractor/common.py#L68-L226). Add tests and code for as many as you want.
|
7. Have a look at [`youtube_dl/extractor/common.py`](https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/common.py) for possible helper methods and a [detailed description of what your extractor should and may return](https://github.com/rg3/youtube-dl/blob/58525c94d547be1c8167d16c298bdd75506db328/youtube_dl/extractor/common.py#L68-L226). Add tests and code for as many as you want.
|
||||||
8. Keep in mind that the only mandatory fields in info dict for successful extraction process are `id`, `title` and either `url` or `formats`, i.e. these are the critical data the extraction does not make any sense without. This means that [any field](https://github.com/rg3/youtube-dl/blob/58525c94d547be1c8167d16c298bdd75506db328/youtube_dl/extractor/common.py#L138-L226) apart from aforementioned mandatory ones should be treated **as optional** and extraction should be **tolerate** to situations when sources for these fields can potentially be unavailable (even if they always available at the moment) and **future-proof** in order not to break the extraction of general purpose mandatory fields. For example, if you have some intermediate dict `meta` that is a source of metadata and it has a key `summary` that you want to extract and put into resulting info dict as `description`, you should be ready that this key may be missing from the `meta` dict, i.e. you should extract it as `meta.get('summary')` and not `meta['summary']`. Similarly, you should pass `fatal=False` when extracting data from a webpage with `_search_regex/_html_search_regex`.
|
8. Keep in mind that the only mandatory fields in info dict for successful extraction process are `id`, `title` and either `url` or `formats`, i.e. these are the critical data the extraction does not make any sense without. This means that [any field](https://github.com/rg3/youtube-dl/blob/58525c94d547be1c8167d16c298bdd75506db328/youtube_dl/extractor/common.py#L138-L226) apart from aforementioned mandatory ones should be treated **as optional** and extraction should be **tolerate** to situations when sources for these fields can potentially be unavailable (even if they always available at the moment) and **future-proof** in order not to break the extraction of general purpose mandatory fields. For example, if you have some intermediate dict `meta` that is a source of metadata and it has a key `summary` that you want to extract and put into resulting info dict as `description`, you should be ready that this key may be missing from the `meta` dict, i.e. you should extract it as `meta.get('summary')` and not `meta['summary']`. Similarly, you should pass `fatal=False` when extracting data from a webpage with `_search_regex/_html_search_regex`.
|
||||||
9. Check the code with [flake8](https://pypi.python.org/pypi/flake8).
|
9. Check the code with [flake8](https://pypi.python.org/pypi/flake8).
|
||||||
10. When the tests pass, [add](http://git-scm.com/docs/git-add) the new files and [commit](http://git-scm.com/docs/git-commit) them and [push](http://git-scm.com/docs/git-push) the result, like this:
|
10. When the tests pass, [add](http://git-scm.com/docs/git-add) the new files and [commit](http://git-scm.com/docs/git-commit) them and [push](http://git-scm.com/docs/git-push) the result, like this:
|
||||||
|
|
||||||
$ git add youtube_dl/extractor/__init__.py
|
$ git add youtube_dl/extractor/extractors.py
|
||||||
$ git add youtube_dl/extractor/yourextractor.py
|
$ git add youtube_dl/extractor/yourextractor.py
|
||||||
$ git commit -m '[yourextractor] Add new extractor'
|
$ git commit -m '[yourextractor] Add new extractor'
|
||||||
$ git push origin yourextractor
|
$ git push origin yourextractor
|
||||||
|
19
devscripts/lazy_load_template.py
Normal file
19
devscripts/lazy_load_template.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# encoding: utf-8
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class LazyLoadExtractor(object):
|
||||||
|
_module = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def ie_key(cls):
|
||||||
|
return cls.__name__[:-2]
|
||||||
|
|
||||||
|
def __new__(cls, *args, **kwargs):
|
||||||
|
mod = __import__(cls._module, fromlist=(cls.__name__,))
|
||||||
|
real_cls = getattr(mod, cls.__name__)
|
||||||
|
instance = real_cls.__new__(real_cls)
|
||||||
|
instance.__init__(*args, **kwargs)
|
||||||
|
return instance
|
63
devscripts/make_lazy_extractors.py
Normal file
63
devscripts/make_lazy_extractors.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
from __future__ import unicode_literals, print_function
|
||||||
|
|
||||||
|
from inspect import getsource
|
||||||
|
import os
|
||||||
|
from os.path import dirname as dirn
|
||||||
|
import sys
|
||||||
|
|
||||||
|
print('WARNING: Lazy loading extractors is an experimental feature that may not always work', file=sys.stderr)
|
||||||
|
|
||||||
|
sys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))
|
||||||
|
|
||||||
|
lazy_extractors_filename = sys.argv[1]
|
||||||
|
if os.path.exists(lazy_extractors_filename):
|
||||||
|
os.remove(lazy_extractors_filename)
|
||||||
|
|
||||||
|
from youtube_dl.extractor import _ALL_CLASSES
|
||||||
|
from youtube_dl.extractor.common import InfoExtractor
|
||||||
|
|
||||||
|
with open('devscripts/lazy_load_template.py', 'rt') as f:
|
||||||
|
module_template = f.read()
|
||||||
|
|
||||||
|
module_contents = [module_template + '\n' + getsource(InfoExtractor.suitable)]
|
||||||
|
|
||||||
|
ie_template = '''
|
||||||
|
class {name}(LazyLoadExtractor):
|
||||||
|
_VALID_URL = {valid_url!r}
|
||||||
|
_module = '{module}'
|
||||||
|
'''
|
||||||
|
|
||||||
|
make_valid_template = '''
|
||||||
|
@classmethod
|
||||||
|
def _make_valid_url(cls):
|
||||||
|
return {valid_url!r}
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
def build_lazy_ie(ie, name):
|
||||||
|
valid_url = getattr(ie, '_VALID_URL', None)
|
||||||
|
s = ie_template.format(
|
||||||
|
name=name,
|
||||||
|
valid_url=valid_url,
|
||||||
|
module=ie.__module__)
|
||||||
|
if ie.suitable.__func__ is not InfoExtractor.suitable.__func__:
|
||||||
|
s += '\n' + getsource(ie.suitable)
|
||||||
|
if hasattr(ie, '_make_valid_url'):
|
||||||
|
# search extractors
|
||||||
|
s += make_valid_template.format(valid_url=ie._make_valid_url())
|
||||||
|
return s
|
||||||
|
|
||||||
|
names = []
|
||||||
|
for ie in list(sorted(_ALL_CLASSES[:-1], key=lambda cls: cls.ie_key())) + _ALL_CLASSES[-1:]:
|
||||||
|
name = ie.ie_key() + 'IE'
|
||||||
|
src = build_lazy_ie(ie, name)
|
||||||
|
module_contents.append(src)
|
||||||
|
names.append(name)
|
||||||
|
|
||||||
|
module_contents.append(
|
||||||
|
'_ALL_CLASSES = [{0}]'.format(', '.join(names)))
|
||||||
|
|
||||||
|
module_src = '\n'.join(module_contents) + '\n'
|
||||||
|
|
||||||
|
with open(lazy_extractors_filename, 'wt') as f:
|
||||||
|
f.write(module_src)
|
@ -2,5 +2,5 @@
|
|||||||
universal = True
|
universal = True
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
exclude = youtube_dl/extractor/__init__.py,devscripts/buildserver.py,devscripts/make_issue_template.py,setup.py,build,.git
|
exclude = youtube_dl/extractor/__init__.py,devscripts/buildserver.py,devscripts/lazy_load_template.py,devscripts/make_issue_template.py,setup.py,build,.git
|
||||||
ignore = E402,E501,E731
|
ignore = E402,E501,E731
|
||||||
|
22
setup.py
22
setup.py
@ -8,11 +8,12 @@ import warnings
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from setuptools import setup
|
from setuptools import setup, Command
|
||||||
setuptools_available = True
|
setuptools_available = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from distutils.core import setup
|
from distutils.core import setup, Command
|
||||||
setuptools_available = False
|
setuptools_available = False
|
||||||
|
from distutils.spawn import spawn
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# This will create an exe that needs Microsoft Visual C++ 2008
|
# This will create an exe that needs Microsoft Visual C++ 2008
|
||||||
@ -70,6 +71,22 @@ else:
|
|||||||
else:
|
else:
|
||||||
params['scripts'] = ['bin/youtube-dl']
|
params['scripts'] = ['bin/youtube-dl']
|
||||||
|
|
||||||
|
class build_lazy_extractors(Command):
|
||||||
|
description = "Build the extractor lazy loading module"
|
||||||
|
user_options = []
|
||||||
|
|
||||||
|
def initialize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def finalize_options(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
spawn(
|
||||||
|
[sys.executable, 'devscripts/make_lazy_extractors.py', 'youtube_dl/extractor/lazy_extractors.py'],
|
||||||
|
dry_run=self.dry_run,
|
||||||
|
)
|
||||||
|
|
||||||
# Get the version from youtube_dl/version.py without importing the package
|
# Get the version from youtube_dl/version.py without importing the package
|
||||||
exec(compile(open('youtube_dl/version.py').read(),
|
exec(compile(open('youtube_dl/version.py').read(),
|
||||||
'youtube_dl/version.py', 'exec'))
|
'youtube_dl/version.py', 'exec'))
|
||||||
@ -107,5 +124,6 @@ setup(
|
|||||||
"Programming Language :: Python :: 3.4",
|
"Programming Language :: Python :: 3.4",
|
||||||
],
|
],
|
||||||
|
|
||||||
|
cmdclass={'build_lazy_extractors': build_lazy_extractors},
|
||||||
**params
|
**params
|
||||||
)
|
)
|
||||||
|
@ -82,7 +82,7 @@ from .utils import (
|
|||||||
YoutubeDLHandler,
|
YoutubeDLHandler,
|
||||||
)
|
)
|
||||||
from .cache import Cache
|
from .cache import Cache
|
||||||
from .extractor import get_info_extractor, gen_extractors
|
from .extractor import get_info_extractor, gen_extractor_classes, _LAZY_LOADER
|
||||||
from .downloader import get_suitable_downloader
|
from .downloader import get_suitable_downloader
|
||||||
from .downloader.rtmp import rtmpdump_version
|
from .downloader.rtmp import rtmpdump_version
|
||||||
from .postprocessor import (
|
from .postprocessor import (
|
||||||
@ -378,8 +378,9 @@ class YoutubeDL(object):
|
|||||||
def add_info_extractor(self, ie):
|
def add_info_extractor(self, ie):
|
||||||
"""Add an InfoExtractor object to the end of the list."""
|
"""Add an InfoExtractor object to the end of the list."""
|
||||||
self._ies.append(ie)
|
self._ies.append(ie)
|
||||||
self._ies_instances[ie.ie_key()] = ie
|
if not isinstance(ie, type):
|
||||||
ie.set_downloader(self)
|
self._ies_instances[ie.ie_key()] = ie
|
||||||
|
ie.set_downloader(self)
|
||||||
|
|
||||||
def get_info_extractor(self, ie_key):
|
def get_info_extractor(self, ie_key):
|
||||||
"""
|
"""
|
||||||
@ -397,7 +398,7 @@ class YoutubeDL(object):
|
|||||||
"""
|
"""
|
||||||
Add the InfoExtractors returned by gen_extractors to the end of the list
|
Add the InfoExtractors returned by gen_extractors to the end of the list
|
||||||
"""
|
"""
|
||||||
for ie in gen_extractors():
|
for ie in gen_extractor_classes():
|
||||||
self.add_info_extractor(ie)
|
self.add_info_extractor(ie)
|
||||||
|
|
||||||
def add_post_processor(self, pp):
|
def add_post_processor(self, pp):
|
||||||
@ -661,6 +662,7 @@ class YoutubeDL(object):
|
|||||||
if not ie.suitable(url):
|
if not ie.suitable(url):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
ie = self.get_info_extractor(ie.ie_key())
|
||||||
if not ie.working():
|
if not ie.working():
|
||||||
self.report_warning('The program functionality for this site has been marked as broken, '
|
self.report_warning('The program functionality for this site has been marked as broken, '
|
||||||
'and will probably not work.')
|
'and will probably not work.')
|
||||||
@ -1957,6 +1959,8 @@ class YoutubeDL(object):
|
|||||||
write_string(encoding_str, encoding=None)
|
write_string(encoding_str, encoding=None)
|
||||||
|
|
||||||
self._write_string('[debug] youtube-dl version ' + __version__ + '\n')
|
self._write_string('[debug] youtube-dl version ' + __version__ + '\n')
|
||||||
|
if _LAZY_LOADER:
|
||||||
|
self._write_string('[debug] Lazy loading extractors enabled' + '\n')
|
||||||
try:
|
try:
|
||||||
sp = subprocess.Popen(
|
sp = subprocess.Popen(
|
||||||
['git', 'rev-parse', '--short', 'HEAD'],
|
['git', 'rev-parse', '--short', 'HEAD'],
|
||||||
|
File diff suppressed because it is too large
Load Diff
991
youtube_dl/extractor/extractors.py
Normal file
991
youtube_dl/extractor/extractors.py
Normal file
@ -0,0 +1,991 @@
|
|||||||
|
# flake8: noqa
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from .abc import ABCIE
|
||||||
|
from .abc7news import Abc7NewsIE
|
||||||
|
from .academicearth import AcademicEarthCourseIE
|
||||||
|
from .acast import (
|
||||||
|
ACastIE,
|
||||||
|
ACastChannelIE,
|
||||||
|
)
|
||||||
|
from .addanime import AddAnimeIE
|
||||||
|
from .adobetv import (
|
||||||
|
AdobeTVIE,
|
||||||
|
AdobeTVShowIE,
|
||||||
|
AdobeTVChannelIE,
|
||||||
|
AdobeTVVideoIE,
|
||||||
|
)
|
||||||
|
from .adultswim import AdultSwimIE
|
||||||
|
from .aenetworks import AENetworksIE
|
||||||
|
from .aftonbladet import AftonbladetIE
|
||||||
|
from .airmozilla import AirMozillaIE
|
||||||
|
from .aljazeera import AlJazeeraIE
|
||||||
|
from .alphaporno import AlphaPornoIE
|
||||||
|
from .animeondemand import AnimeOnDemandIE
|
||||||
|
from .anitube import AnitubeIE
|
||||||
|
from .anysex import AnySexIE
|
||||||
|
from .aol import (
|
||||||
|
AolIE,
|
||||||
|
AolFeaturesIE,
|
||||||
|
)
|
||||||
|
from .allocine import AllocineIE
|
||||||
|
from .aparat import AparatIE
|
||||||
|
from .appleconnect import AppleConnectIE
|
||||||
|
from .appletrailers import (
|
||||||
|
AppleTrailersIE,
|
||||||
|
AppleTrailersSectionIE,
|
||||||
|
)
|
||||||
|
from .archiveorg import ArchiveOrgIE
|
||||||
|
from .ard import (
|
||||||
|
ARDIE,
|
||||||
|
ARDMediathekIE,
|
||||||
|
SportschauIE,
|
||||||
|
)
|
||||||
|
from .arte import (
|
||||||
|
ArteTvIE,
|
||||||
|
ArteTVPlus7IE,
|
||||||
|
ArteTVCreativeIE,
|
||||||
|
ArteTVConcertIE,
|
||||||
|
ArteTVFutureIE,
|
||||||
|
ArteTVCinemaIE,
|
||||||
|
ArteTVDDCIE,
|
||||||
|
ArteTVMagazineIE,
|
||||||
|
ArteTVEmbedIE,
|
||||||
|
)
|
||||||
|
from .atresplayer import AtresPlayerIE
|
||||||
|
from .atttechchannel import ATTTechChannelIE
|
||||||
|
from .audimedia import AudiMediaIE
|
||||||
|
from .audioboom import AudioBoomIE
|
||||||
|
from .audiomack import AudiomackIE, AudiomackAlbumIE
|
||||||
|
from .azubu import AzubuIE, AzubuLiveIE
|
||||||
|
from .baidu import BaiduVideoIE
|
||||||
|
from .bambuser import BambuserIE, BambuserChannelIE
|
||||||
|
from .bandcamp import BandcampIE, BandcampAlbumIE
|
||||||
|
from .bbc import (
|
||||||
|
BBCCoUkIE,
|
||||||
|
BBCCoUkArticleIE,
|
||||||
|
BBCIE,
|
||||||
|
)
|
||||||
|
from .beeg import BeegIE
|
||||||
|
from .behindkink import BehindKinkIE
|
||||||
|
from .beatportpro import BeatportProIE
|
||||||
|
from .bet import BetIE
|
||||||
|
from .bigflix import BigflixIE
|
||||||
|
from .bild import BildIE
|
||||||
|
from .bilibili import BiliBiliIE
|
||||||
|
from .biobiochiletv import BioBioChileTVIE
|
||||||
|
from .bleacherreport import (
|
||||||
|
BleacherReportIE,
|
||||||
|
BleacherReportCMSIE,
|
||||||
|
)
|
||||||
|
from .blinkx import BlinkxIE
|
||||||
|
from .bloomberg import BloombergIE
|
||||||
|
from .bokecc import BokeCCIE
|
||||||
|
from .bpb import BpbIE
|
||||||
|
from .br import BRIE
|
||||||
|
from .bravotv import BravoTVIE
|
||||||
|
from .breakcom import BreakIE
|
||||||
|
from .brightcove import (
|
||||||
|
BrightcoveLegacyIE,
|
||||||
|
BrightcoveNewIE,
|
||||||
|
)
|
||||||
|
from .buzzfeed import BuzzFeedIE
|
||||||
|
from .byutv import BYUtvIE
|
||||||
|
from .c56 import C56IE
|
||||||
|
from .camdemy import (
|
||||||
|
CamdemyIE,
|
||||||
|
CamdemyFolderIE
|
||||||
|
)
|
||||||
|
from .camwithher import CamWithHerIE
|
||||||
|
from .canalplus import CanalplusIE
|
||||||
|
from .canalc2 import Canalc2IE
|
||||||
|
from .canvas import CanvasIE
|
||||||
|
from .cbc import (
|
||||||
|
CBCIE,
|
||||||
|
CBCPlayerIE,
|
||||||
|
)
|
||||||
|
from .cbs import CBSIE
|
||||||
|
from .cbsinteractive import CBSInteractiveIE
|
||||||
|
from .cbsnews import (
|
||||||
|
CBSNewsIE,
|
||||||
|
CBSNewsLiveVideoIE,
|
||||||
|
)
|
||||||
|
from .cbssports import CBSSportsIE
|
||||||
|
from .ccc import CCCIE
|
||||||
|
from .cda import CDAIE
|
||||||
|
from .ceskatelevize import CeskaTelevizeIE
|
||||||
|
from .channel9 import Channel9IE
|
||||||
|
from .chaturbate import ChaturbateIE
|
||||||
|
from .chilloutzone import ChilloutzoneIE
|
||||||
|
from .chirbit import (
|
||||||
|
ChirbitIE,
|
||||||
|
ChirbitProfileIE,
|
||||||
|
)
|
||||||
|
from .cinchcast import CinchcastIE
|
||||||
|
from .cinemassacre import CinemassacreIE
|
||||||
|
from .clipfish import ClipfishIE
|
||||||
|
from .cliphunter import CliphunterIE
|
||||||
|
from .clipsyndicate import ClipsyndicateIE
|
||||||
|
from .cloudy import CloudyIE
|
||||||
|
from .clubic import ClubicIE
|
||||||
|
from .clyp import ClypIE
|
||||||
|
from .cmt import CMTIE
|
||||||
|
from .cnbc import CNBCIE
|
||||||
|
from .cnn import (
|
||||||
|
CNNIE,
|
||||||
|
CNNBlogsIE,
|
||||||
|
CNNArticleIE,
|
||||||
|
)
|
||||||
|
from .collegehumor import CollegeHumorIE
|
||||||
|
from .collegerama import CollegeRamaIE
|
||||||
|
from .comedycentral import ComedyCentralIE, ComedyCentralShowsIE
|
||||||
|
from .comcarcoff import ComCarCoffIE
|
||||||
|
from .commonmistakes import CommonMistakesIE, UnicodeBOMIE
|
||||||
|
from .commonprotocols import RtmpIE
|
||||||
|
from .condenast import CondeNastIE
|
||||||
|
from .cracked import CrackedIE
|
||||||
|
from .crackle import CrackleIE
|
||||||
|
from .criterion import CriterionIE
|
||||||
|
from .crooksandliars import CrooksAndLiarsIE
|
||||||
|
from .crunchyroll import (
|
||||||
|
CrunchyrollIE,
|
||||||
|
CrunchyrollShowPlaylistIE
|
||||||
|
)
|
||||||
|
from .cspan import CSpanIE
|
||||||
|
from .ctsnews import CtsNewsIE
|
||||||
|
from .cultureunplugged import CultureUnpluggedIE
|
||||||
|
from .cwtv import CWTVIE
|
||||||
|
from .dailymotion import (
|
||||||
|
DailymotionIE,
|
||||||
|
DailymotionPlaylistIE,
|
||||||
|
DailymotionUserIE,
|
||||||
|
DailymotionCloudIE,
|
||||||
|
)
|
||||||
|
from .daum import (
|
||||||
|
DaumIE,
|
||||||
|
DaumClipIE,
|
||||||
|
DaumPlaylistIE,
|
||||||
|
DaumUserIE,
|
||||||
|
)
|
||||||
|
from .dbtv import DBTVIE
|
||||||
|
from .dcn import (
|
||||||
|
DCNIE,
|
||||||
|
DCNVideoIE,
|
||||||
|
DCNLiveIE,
|
||||||
|
DCNSeasonIE,
|
||||||
|
)
|
||||||
|
from .dctp import DctpTvIE
|
||||||
|
from .deezer import DeezerPlaylistIE
|
||||||
|
from .democracynow import DemocracynowIE
|
||||||
|
from .dfb import DFBIE
|
||||||
|
from .dhm import DHMIE
|
||||||
|
from .dotsub import DotsubIE
|
||||||
|
from .douyutv import DouyuTVIE
|
||||||
|
from .dplay import DPlayIE
|
||||||
|
from .dramafever import (
|
||||||
|
DramaFeverIE,
|
||||||
|
DramaFeverSeriesIE,
|
||||||
|
)
|
||||||
|
from .dreisat import DreiSatIE
|
||||||
|
from .drbonanza import DRBonanzaIE
|
||||||
|
from .drtuber import DrTuberIE
|
||||||
|
from .drtv import DRTVIE
|
||||||
|
from .dvtv import DVTVIE
|
||||||
|
from .dump import DumpIE
|
||||||
|
from .dumpert import DumpertIE
|
||||||
|
from .defense import DefenseGouvFrIE
|
||||||
|
from .discovery import DiscoveryIE
|
||||||
|
from .dropbox import DropboxIE
|
||||||
|
from .dw import (
|
||||||
|
DWIE,
|
||||||
|
DWArticleIE,
|
||||||
|
)
|
||||||
|
from .eagleplatform import EaglePlatformIE
|
||||||
|
from .ebaumsworld import EbaumsWorldIE
|
||||||
|
from .echomsk import EchoMskIE
|
||||||
|
from .ehow import EHowIE
|
||||||
|
from .eighttracks import EightTracksIE
|
||||||
|
from .einthusan import EinthusanIE
|
||||||
|
from .eitb import EitbIE
|
||||||
|
from .ellentv import (
|
||||||
|
EllenTVIE,
|
||||||
|
EllenTVClipsIE,
|
||||||
|
)
|
||||||
|
from .elpais import ElPaisIE
|
||||||
|
from .embedly import EmbedlyIE
|
||||||
|
from .engadget import EngadgetIE
|
||||||
|
from .eporner import EpornerIE
|
||||||
|
from .eroprofile import EroProfileIE
|
||||||
|
from .escapist import EscapistIE
|
||||||
|
from .espn import ESPNIE
|
||||||
|
from .esri import EsriVideoIE
|
||||||
|
from .europa import EuropaIE
|
||||||
|
from .everyonesmixtape import EveryonesMixtapeIE
|
||||||
|
from .exfm import ExfmIE
|
||||||
|
from .expotv import ExpoTVIE
|
||||||
|
from .extremetube import ExtremeTubeIE
|
||||||
|
from .facebook import FacebookIE
|
||||||
|
from .faz import FazIE
|
||||||
|
from .fc2 import FC2IE
|
||||||
|
from .fczenit import FczenitIE
|
||||||
|
from .firstpost import FirstpostIE
|
||||||
|
from .firsttv import FirstTVIE
|
||||||
|
from .fivemin import FiveMinIE
|
||||||
|
from .fivetv import FiveTVIE
|
||||||
|
from .fktv import FKTVIE
|
||||||
|
from .flickr import FlickrIE
|
||||||
|
from .folketinget import FolketingetIE
|
||||||
|
from .footyroom import FootyRoomIE
|
||||||
|
from .fourtube import FourTubeIE
|
||||||
|
from .fox import FOXIE
|
||||||
|
from .foxgay import FoxgayIE
|
||||||
|
from .foxnews import FoxNewsIE
|
||||||
|
from .foxsports import FoxSportsIE
|
||||||
|
from .franceculture import (
|
||||||
|
FranceCultureIE,
|
||||||
|
FranceCultureEmissionIE,
|
||||||
|
)
|
||||||
|
from .franceinter import FranceInterIE
|
||||||
|
from .francetv import (
|
||||||
|
PluzzIE,
|
||||||
|
FranceTvInfoIE,
|
||||||
|
FranceTVIE,
|
||||||
|
GenerationQuoiIE,
|
||||||
|
CultureboxIE,
|
||||||
|
)
|
||||||
|
from .freesound import FreesoundIE
|
||||||
|
from .freespeech import FreespeechIE
|
||||||
|
from .freevideo import FreeVideoIE
|
||||||
|
from .funimation import FunimationIE
|
||||||
|
from .funnyordie import FunnyOrDieIE
|
||||||
|
from .gameinformer import GameInformerIE
|
||||||
|
from .gamekings import GamekingsIE
|
||||||
|
from .gameone import (
|
||||||
|
GameOneIE,
|
||||||
|
GameOnePlaylistIE,
|
||||||
|
)
|
||||||
|
from .gamersyde import GamersydeIE
|
||||||
|
from .gamespot import GameSpotIE
|
||||||
|
from .gamestar import GameStarIE
|
||||||
|
from .gametrailers import GametrailersIE
|
||||||
|
from .gazeta import GazetaIE
|
||||||
|
from .gdcvault import GDCVaultIE
|
||||||
|
from .generic import GenericIE
|
||||||
|
from .gfycat import GfycatIE
|
||||||
|
from .giantbomb import GiantBombIE
|
||||||
|
from .giga import GigaIE
|
||||||
|
from .glide import GlideIE
|
||||||
|
from .globo import (
|
||||||
|
GloboIE,
|
||||||
|
GloboArticleIE,
|
||||||
|
)
|
||||||
|
from .godtube import GodTubeIE
|
||||||
|
from .goldenmoustache import GoldenMoustacheIE
|
||||||
|
from .golem import GolemIE
|
||||||
|
from .googledrive import GoogleDriveIE
|
||||||
|
from .googleplus import GooglePlusIE
|
||||||
|
from .googlesearch import GoogleSearchIE
|
||||||
|
from .goshgay import GoshgayIE
|
||||||
|
from .gputechconf import GPUTechConfIE
|
||||||
|
from .groupon import GrouponIE
|
||||||
|
from .hark import HarkIE
|
||||||
|
from .hbo import HBOIE
|
||||||
|
from .hearthisat import HearThisAtIE
|
||||||
|
from .heise import HeiseIE
|
||||||
|
from .hellporno import HellPornoIE
|
||||||
|
from .helsinki import HelsinkiIE
|
||||||
|
from .hentaistigma import HentaiStigmaIE
|
||||||
|
from .historicfilms import HistoricFilmsIE
|
||||||
|
from .hitbox import HitboxIE, HitboxLiveIE
|
||||||
|
from .hornbunny import HornBunnyIE
|
||||||
|
from .hotnewhiphop import HotNewHipHopIE
|
||||||
|
from .hotstar import HotStarIE
|
||||||
|
from .howcast import HowcastIE
|
||||||
|
from .howstuffworks import HowStuffWorksIE
|
||||||
|
from .huffpost import HuffPostIE
|
||||||
|
from .hypem import HypemIE
|
||||||
|
from .iconosquare import IconosquareIE
|
||||||
|
from .ign import (
|
||||||
|
IGNIE,
|
||||||
|
OneUPIE,
|
||||||
|
PCMagIE,
|
||||||
|
)
|
||||||
|
from .imdb import (
|
||||||
|
ImdbIE,
|
||||||
|
ImdbListIE
|
||||||
|
)
|
||||||
|
from .imgur import (
|
||||||
|
ImgurIE,
|
||||||
|
ImgurAlbumIE,
|
||||||
|
)
|
||||||
|
from .ina import InaIE
|
||||||
|
from .indavideo import (
|
||||||
|
IndavideoIE,
|
||||||
|
IndavideoEmbedIE,
|
||||||
|
)
|
||||||
|
from .infoq import InfoQIE
|
||||||
|
from .instagram import InstagramIE, InstagramUserIE
|
||||||
|
from .internetvideoarchive import InternetVideoArchiveIE
|
||||||
|
from .iprima import IPrimaIE
|
||||||
|
from .iqiyi import IqiyiIE
|
||||||
|
from .ir90tv import Ir90TvIE
|
||||||
|
from .ivi import (
|
||||||
|
IviIE,
|
||||||
|
IviCompilationIE
|
||||||
|
)
|
||||||
|
from .ivideon import IvideonIE
|
||||||
|
from .izlesene import IzleseneIE
|
||||||
|
from .jadorecettepub import JadoreCettePubIE
|
||||||
|
from .jeuxvideo import JeuxVideoIE
|
||||||
|
from .jove import JoveIE
|
||||||
|
from .jwplatform import JWPlatformIE
|
||||||
|
from .jpopsukitv import JpopsukiIE
|
||||||
|
from .kaltura import KalturaIE
|
||||||
|
from .kanalplay import KanalPlayIE
|
||||||
|
from .kankan import KankanIE
|
||||||
|
from .karaoketv import KaraoketvIE
|
||||||
|
from .karrierevideos import KarriereVideosIE
|
||||||
|
from .keezmovies import KeezMoviesIE
|
||||||
|
from .khanacademy import KhanAcademyIE
|
||||||
|
from .kickstarter import KickStarterIE
|
||||||
|
from .keek import KeekIE
|
||||||
|
from .konserthusetplay import KonserthusetPlayIE
|
||||||
|
from .kontrtube import KontrTubeIE
|
||||||
|
from .krasview import KrasViewIE
|
||||||
|
from .ku6 import Ku6IE
|
||||||
|
from .kusi import KUSIIE
|
||||||
|
from .kuwo import (
|
||||||
|
KuwoIE,
|
||||||
|
KuwoAlbumIE,
|
||||||
|
KuwoChartIE,
|
||||||
|
KuwoSingerIE,
|
||||||
|
KuwoCategoryIE,
|
||||||
|
KuwoMvIE,
|
||||||
|
)
|
||||||
|
from .la7 import LA7IE
|
||||||
|
from .laola1tv import Laola1TvIE
|
||||||
|
from .lecture2go import Lecture2GoIE
|
||||||
|
from .lemonde import LemondeIE
|
||||||
|
from .leeco import (
|
||||||
|
LeIE,
|
||||||
|
LePlaylistIE,
|
||||||
|
LetvCloudIE,
|
||||||
|
)
|
||||||
|
from .libsyn import LibsynIE
|
||||||
|
from .lifenews import (
|
||||||
|
LifeNewsIE,
|
||||||
|
LifeEmbedIE,
|
||||||
|
)
|
||||||
|
from .limelight import (
|
||||||
|
LimelightMediaIE,
|
||||||
|
LimelightChannelIE,
|
||||||
|
LimelightChannelListIE,
|
||||||
|
)
|
||||||
|
from .liveleak import LiveLeakIE
|
||||||
|
from .livestream import (
|
||||||
|
LivestreamIE,
|
||||||
|
LivestreamOriginalIE,
|
||||||
|
LivestreamShortenerIE,
|
||||||
|
)
|
||||||
|
from .lnkgo import LnkGoIE
|
||||||
|
from .lovehomeporn import LoveHomePornIE
|
||||||
|
from .lrt import LRTIE
|
||||||
|
from .lynda import (
|
||||||
|
LyndaIE,
|
||||||
|
LyndaCourseIE
|
||||||
|
)
|
||||||
|
from .m6 import M6IE
|
||||||
|
from .macgamestore import MacGameStoreIE
|
||||||
|
from .mailru import MailRuIE
|
||||||
|
from .makerschannel import MakersChannelIE
|
||||||
|
from .makertv import MakerTVIE
|
||||||
|
from .malemotion import MalemotionIE
|
||||||
|
from .matchtv import MatchTVIE
|
||||||
|
from .mdr import MDRIE
|
||||||
|
from .metacafe import MetacafeIE
|
||||||
|
from .metacritic import MetacriticIE
|
||||||
|
from .mgoon import MgoonIE
|
||||||
|
from .minhateca import MinhatecaIE
|
||||||
|
from .ministrygrid import MinistryGridIE
|
||||||
|
from .minoto import MinotoIE
|
||||||
|
from .miomio import MioMioIE
|
||||||
|
from .mit import TechTVMITIE, MITIE, OCWMITIE
|
||||||
|
from .mitele import MiTeleIE
|
||||||
|
from .mixcloud import MixcloudIE
|
||||||
|
from .mlb import MLBIE
|
||||||
|
from .mnet import MnetIE
|
||||||
|
from .mpora import MporaIE
|
||||||
|
from .moevideo import MoeVideoIE
|
||||||
|
from .mofosex import MofosexIE
|
||||||
|
from .mojvideo import MojvideoIE
|
||||||
|
from .moniker import MonikerIE
|
||||||
|
from .mooshare import MooshareIE
|
||||||
|
from .morningstar import MorningstarIE
|
||||||
|
from .motherless import MotherlessIE
|
||||||
|
from .motorsport import MotorsportIE
|
||||||
|
from .movieclips import MovieClipsIE
|
||||||
|
from .moviezine import MoviezineIE
|
||||||
|
from .mtv import (
|
||||||
|
MTVIE,
|
||||||
|
MTVServicesEmbeddedIE,
|
||||||
|
MTVIggyIE,
|
||||||
|
MTVDEIE,
|
||||||
|
)
|
||||||
|
from .muenchentv import MuenchenTVIE
|
||||||
|
from .musicplayon import MusicPlayOnIE
|
||||||
|
from .muzu import MuzuTVIE
|
||||||
|
from .mwave import MwaveIE
|
||||||
|
from .myspace import MySpaceIE, MySpaceAlbumIE
|
||||||
|
from .myspass import MySpassIE
|
||||||
|
from .myvi import MyviIE
|
||||||
|
from .myvideo import MyVideoIE
|
||||||
|
from .myvidster import MyVidsterIE
|
||||||
|
from .nationalgeographic import (
|
||||||
|
NationalGeographicIE,
|
||||||
|
NationalGeographicChannelIE,
|
||||||
|
)
|
||||||
|
from .naver import NaverIE
|
||||||
|
from .nba import NBAIE
|
||||||
|
from .nbc import (
|
||||||
|
CSNNEIE,
|
||||||
|
NBCIE,
|
||||||
|
NBCNewsIE,
|
||||||
|
NBCSportsIE,
|
||||||
|
NBCSportsVPlayerIE,
|
||||||
|
MSNBCIE,
|
||||||
|
)
|
||||||
|
from .ndr import (
|
||||||
|
NDRIE,
|
||||||
|
NJoyIE,
|
||||||
|
NDREmbedBaseIE,
|
||||||
|
NDREmbedIE,
|
||||||
|
NJoyEmbedIE,
|
||||||
|
)
|
||||||
|
from .ndtv import NDTVIE
|
||||||
|
from .netzkino import NetzkinoIE
|
||||||
|
from .nerdcubed import NerdCubedFeedIE
|
||||||
|
from .nerdist import NerdistIE
|
||||||
|
from .neteasemusic import (
|
||||||
|
NetEaseMusicIE,
|
||||||
|
NetEaseMusicAlbumIE,
|
||||||
|
NetEaseMusicSingerIE,
|
||||||
|
NetEaseMusicListIE,
|
||||||
|
NetEaseMusicMvIE,
|
||||||
|
NetEaseMusicProgramIE,
|
||||||
|
NetEaseMusicDjRadioIE,
|
||||||
|
)
|
||||||
|
from .newgrounds import NewgroundsIE
|
||||||
|
from .newstube import NewstubeIE
|
||||||
|
from .nextmedia import (
|
||||||
|
NextMediaIE,
|
||||||
|
NextMediaActionNewsIE,
|
||||||
|
AppleDailyIE,
|
||||||
|
)
|
||||||
|
from .nextmovie import NextMovieIE
|
||||||
|
from .nfb import NFBIE
|
||||||
|
from .nfl import NFLIE
|
||||||
|
from .nhl import (
|
||||||
|
NHLIE,
|
||||||
|
NHLNewsIE,
|
||||||
|
NHLVideocenterIE,
|
||||||
|
)
|
||||||
|
from .nick import NickIE
|
||||||
|
from .niconico import NiconicoIE, NiconicoPlaylistIE
|
||||||
|
from .ninegag import NineGagIE
|
||||||
|
from .noco import NocoIE
|
||||||
|
from .normalboots import NormalbootsIE
|
||||||
|
from .nosvideo import NosVideoIE
|
||||||
|
from .nova import NovaIE
|
||||||
|
from .novamov import (
|
||||||
|
AuroraVidIE,
|
||||||
|
CloudTimeIE,
|
||||||
|
NowVideoIE,
|
||||||
|
VideoWeedIE,
|
||||||
|
WholeCloudIE,
|
||||||
|
)
|
||||||
|
from .nowness import (
|
||||||
|
NownessIE,
|
||||||
|
NownessPlaylistIE,
|
||||||
|
NownessSeriesIE,
|
||||||
|
)
|
||||||
|
from .nowtv import (
|
||||||
|
NowTVIE,
|
||||||
|
NowTVListIE,
|
||||||
|
)
|
||||||
|
from .noz import NozIE
|
||||||
|
from .npo import (
|
||||||
|
NPOIE,
|
||||||
|
NPOLiveIE,
|
||||||
|
NPORadioIE,
|
||||||
|
NPORadioFragmentIE,
|
||||||
|
SchoolTVIE,
|
||||||
|
VPROIE,
|
||||||
|
WNLIE
|
||||||
|
)
|
||||||
|
from .npr import NprIE
|
||||||
|
from .nrk import (
|
||||||
|
NRKIE,
|
||||||
|
NRKPlaylistIE,
|
||||||
|
NRKSkoleIE,
|
||||||
|
NRKTVIE,
|
||||||
|
)
|
||||||
|
from .ntvde import NTVDeIE
|
||||||
|
from .ntvru import NTVRuIE
|
||||||
|
from .nytimes import (
|
||||||
|
NYTimesIE,
|
||||||
|
NYTimesArticleIE,
|
||||||
|
)
|
||||||
|
from .nuvid import NuvidIE
|
||||||
|
from .odnoklassniki import OdnoklassnikiIE
|
||||||
|
from .oktoberfesttv import OktoberfestTVIE
|
||||||
|
from .onionstudios import OnionStudiosIE
|
||||||
|
from .ooyala import (
|
||||||
|
OoyalaIE,
|
||||||
|
OoyalaExternalIE,
|
||||||
|
)
|
||||||
|
from .openload import OpenloadIE
|
||||||
|
from .ora import OraTVIE
|
||||||
|
from .orf import (
|
||||||
|
ORFTVthekIE,
|
||||||
|
ORFOE1IE,
|
||||||
|
ORFFM4IE,
|
||||||
|
ORFIPTVIE,
|
||||||
|
)
|
||||||
|
from .pandoratv import PandoraTVIE
|
||||||
|
from .parliamentliveuk import ParliamentLiveUKIE
|
||||||
|
from .patreon import PatreonIE
|
||||||
|
from .pbs import PBSIE
|
||||||
|
from .periscope import PeriscopeIE
|
||||||
|
from .philharmoniedeparis import PhilharmonieDeParisIE
|
||||||
|
from .phoenix import PhoenixIE
|
||||||
|
from .photobucket import PhotobucketIE
|
||||||
|
from .pinkbike import PinkbikeIE
|
||||||
|
from .planetaplay import PlanetaPlayIE
|
||||||
|
from .pladform import PladformIE
|
||||||
|
from .played import PlayedIE
|
||||||
|
from .playfm import PlayFMIE
|
||||||
|
from .plays import PlaysTVIE
|
||||||
|
from .playtvak import PlaytvakIE
|
||||||
|
from .playvid import PlayvidIE
|
||||||
|
from .playwire import PlaywireIE
|
||||||
|
from .pluralsight import (
|
||||||
|
PluralsightIE,
|
||||||
|
PluralsightCourseIE,
|
||||||
|
)
|
||||||
|
from .podomatic import PodomaticIE
|
||||||
|
from .porn91 import Porn91IE
|
||||||
|
from .pornhd import PornHdIE
|
||||||
|
from .pornhub import (
|
||||||
|
PornHubIE,
|
||||||
|
PornHubPlaylistIE,
|
||||||
|
PornHubUserVideosIE,
|
||||||
|
)
|
||||||
|
from .pornotube import PornotubeIE
|
||||||
|
from .pornovoisines import PornoVoisinesIE
|
||||||
|
from .pornoxo import PornoXOIE
|
||||||
|
from .primesharetv import PrimeShareTVIE
|
||||||
|
from .promptfile import PromptFileIE
|
||||||
|
from .prosiebensat1 import ProSiebenSat1IE
|
||||||
|
from .puls4 import Puls4IE
|
||||||
|
from .pyvideo import PyvideoIE
|
||||||
|
from .qqmusic import (
|
||||||
|
QQMusicIE,
|
||||||
|
QQMusicSingerIE,
|
||||||
|
QQMusicAlbumIE,
|
||||||
|
QQMusicToplistIE,
|
||||||
|
QQMusicPlaylistIE,
|
||||||
|
)
|
||||||
|
from .quickvid import QuickVidIE
|
||||||
|
from .r7 import R7IE
|
||||||
|
from .radiode import RadioDeIE
|
||||||
|
from .radiojavan import RadioJavanIE
|
||||||
|
from .radiobremen import RadioBremenIE
|
||||||
|
from .radiofrance import RadioFranceIE
|
||||||
|
from .rai import (
|
||||||
|
RaiTVIE,
|
||||||
|
RaiIE,
|
||||||
|
)
|
||||||
|
from .rbmaradio import RBMARadioIE
|
||||||
|
from .rds import RDSIE
|
||||||
|
from .redtube import RedTubeIE
|
||||||
|
from .regiotv import RegioTVIE
|
||||||
|
from .restudy import RestudyIE
|
||||||
|
from .reverbnation import ReverbNationIE
|
||||||
|
from .revision3 import Revision3IE
|
||||||
|
from .rice import RICEIE
|
||||||
|
from .ringtv import RingTVIE
|
||||||
|
from .ro220 import Ro220IE
|
||||||
|
from .rottentomatoes import RottenTomatoesIE
|
||||||
|
from .roxwel import RoxwelIE
|
||||||
|
from .rtbf import RTBFIE
|
||||||
|
from .rte import RteIE, RteRadioIE
|
||||||
|
from .rtlnl import RtlNlIE
|
||||||
|
from .rtl2 import RTL2IE
|
||||||
|
from .rtp import RTPIE
|
||||||
|
from .rts import RTSIE
|
||||||
|
from .rtve import RTVEALaCartaIE, RTVELiveIE, RTVEInfantilIE
|
||||||
|
from .rtvnh import RTVNHIE
|
||||||
|
from .ruhd import RUHDIE
|
||||||
|
from .ruleporn import RulePornIE
|
||||||
|
from .rutube import (
|
||||||
|
RutubeIE,
|
||||||
|
RutubeChannelIE,
|
||||||
|
RutubeEmbedIE,
|
||||||
|
RutubeMovieIE,
|
||||||
|
RutubePersonIE,
|
||||||
|
)
|
||||||
|
from .rutv import RUTVIE
|
||||||
|
from .ruutu import RuutuIE
|
||||||
|
from .sandia import SandiaIE
|
||||||
|
from .safari import (
|
||||||
|
SafariIE,
|
||||||
|
SafariApiIE,
|
||||||
|
SafariCourseIE,
|
||||||
|
)
|
||||||
|
from .sapo import SapoIE
|
||||||
|
from .savefrom import SaveFromIE
|
||||||
|
from .sbs import SBSIE
|
||||||
|
from .scivee import SciVeeIE
|
||||||
|
from .screencast import ScreencastIE
|
||||||
|
from .screencastomatic import ScreencastOMaticIE
|
||||||
|
from .screenjunkies import ScreenJunkiesIE
|
||||||
|
from .screenwavemedia import ScreenwaveMediaIE, TeamFourIE
|
||||||
|
from .senateisvp import SenateISVPIE
|
||||||
|
from .servingsys import ServingSysIE
|
||||||
|
from .sexu import SexuIE
|
||||||
|
from .sexykarma import SexyKarmaIE
|
||||||
|
from .shahid import ShahidIE
|
||||||
|
from .shared import SharedIE
|
||||||
|
from .sharesix import ShareSixIE
|
||||||
|
from .sina import SinaIE
|
||||||
|
from .skynewsarabia import (
|
||||||
|
SkyNewsArabiaIE,
|
||||||
|
SkyNewsArabiaArticleIE,
|
||||||
|
)
|
||||||
|
from .slideshare import SlideshareIE
|
||||||
|
from .slutload import SlutloadIE
|
||||||
|
from .smotri import (
|
||||||
|
SmotriIE,
|
||||||
|
SmotriCommunityIE,
|
||||||
|
SmotriUserIE,
|
||||||
|
SmotriBroadcastIE,
|
||||||
|
)
|
||||||
|
from .snagfilms import (
|
||||||
|
SnagFilmsIE,
|
||||||
|
SnagFilmsEmbedIE,
|
||||||
|
)
|
||||||
|
from .snotr import SnotrIE
|
||||||
|
from .sohu import SohuIE
|
||||||
|
from .soundcloud import (
|
||||||
|
SoundcloudIE,
|
||||||
|
SoundcloudSetIE,
|
||||||
|
SoundcloudUserIE,
|
||||||
|
SoundcloudPlaylistIE,
|
||||||
|
SoundcloudSearchIE
|
||||||
|
)
|
||||||
|
from .soundgasm import (
|
||||||
|
SoundgasmIE,
|
||||||
|
SoundgasmProfileIE
|
||||||
|
)
|
||||||
|
from .southpark import (
|
||||||
|
SouthParkIE,
|
||||||
|
SouthParkDeIE,
|
||||||
|
SouthParkDkIE,
|
||||||
|
SouthParkEsIE,
|
||||||
|
SouthParkNlIE
|
||||||
|
)
|
||||||
|
from .spankbang import SpankBangIE
|
||||||
|
from .spankwire import SpankwireIE
|
||||||
|
from .spiegel import SpiegelIE, SpiegelArticleIE
|
||||||
|
from .spiegeltv import SpiegeltvIE
|
||||||
|
from .spike import SpikeIE
|
||||||
|
from .stitcher import StitcherIE
|
||||||
|
from .sport5 import Sport5IE
|
||||||
|
from .sportbox import (
|
||||||
|
SportBoxIE,
|
||||||
|
SportBoxEmbedIE,
|
||||||
|
)
|
||||||
|
from .sportdeutschland import SportDeutschlandIE
|
||||||
|
from .srgssr import (
|
||||||
|
SRGSSRIE,
|
||||||
|
SRGSSRPlayIE,
|
||||||
|
)
|
||||||
|
from .srmediathek import SRMediathekIE
|
||||||
|
from .ssa import SSAIE
|
||||||
|
from .stanfordoc import StanfordOpenClassroomIE
|
||||||
|
from .steam import SteamIE
|
||||||
|
from .streamcloud import StreamcloudIE
|
||||||
|
from .streamcz import StreamCZIE
|
||||||
|
from .streetvoice import StreetVoiceIE
|
||||||
|
from .sunporno import SunPornoIE
|
||||||
|
from .svt import (
|
||||||
|
SVTIE,
|
||||||
|
SVTPlayIE,
|
||||||
|
)
|
||||||
|
from .swrmediathek import SWRMediathekIE
|
||||||
|
from .syfy import SyfyIE
|
||||||
|
from .sztvhu import SztvHuIE
|
||||||
|
from .tagesschau import TagesschauIE
|
||||||
|
from .tapely import TapelyIE
|
||||||
|
from .tass import TassIE
|
||||||
|
from .teachertube import (
|
||||||
|
TeacherTubeIE,
|
||||||
|
TeacherTubeUserIE,
|
||||||
|
)
|
||||||
|
from .teachingchannel import TeachingChannelIE
|
||||||
|
from .teamcoco import TeamcocoIE
|
||||||
|
from .techtalks import TechTalksIE
|
||||||
|
from .ted import TEDIE
|
||||||
|
from .tele13 import Tele13IE
|
||||||
|
from .telebruxelles import TeleBruxellesIE
|
||||||
|
from .telecinco import TelecincoIE
|
||||||
|
from .telegraaf import TelegraafIE
|
||||||
|
from .telemb import TeleMBIE
|
||||||
|
from .teletask import TeleTaskIE
|
||||||
|
from .testurl import TestURLIE
|
||||||
|
from .tf1 import TF1IE
|
||||||
|
from .theintercept import TheInterceptIE
|
||||||
|
from .theonion import TheOnionIE
|
||||||
|
from .theplatform import (
|
||||||
|
ThePlatformIE,
|
||||||
|
ThePlatformFeedIE,
|
||||||
|
)
|
||||||
|
from .thescene import TheSceneIE
|
||||||
|
from .thesixtyone import TheSixtyOneIE
|
||||||
|
from .thestar import TheStarIE
|
||||||
|
from .thisamericanlife import ThisAmericanLifeIE
|
||||||
|
from .thisav import ThisAVIE
|
||||||
|
from .tinypic import TinyPicIE
|
||||||
|
from .tlc import TlcDeIE
|
||||||
|
from .tmz import (
|
||||||
|
TMZIE,
|
||||||
|
TMZArticleIE,
|
||||||
|
)
|
||||||
|
from .tnaflix import (
|
||||||
|
TNAFlixNetworkEmbedIE,
|
||||||
|
TNAFlixIE,
|
||||||
|
EMPFlixIE,
|
||||||
|
MovieFapIE,
|
||||||
|
)
|
||||||
|
from .toggle import ToggleIE
|
||||||
|
from .thvideo import (
|
||||||
|
THVideoIE,
|
||||||
|
THVideoPlaylistIE
|
||||||
|
)
|
||||||
|
from .toutv import TouTvIE
|
||||||
|
from .toypics import ToypicsUserIE, ToypicsIE
|
||||||
|
from .traileraddict import TrailerAddictIE
|
||||||
|
from .trilulilu import TriluliluIE
|
||||||
|
from .trollvids import TrollvidsIE
|
||||||
|
from .trutube import TruTubeIE
|
||||||
|
from .tube8 import Tube8IE
|
||||||
|
from .tubitv import TubiTvIE
|
||||||
|
from .tudou import (
|
||||||
|
TudouIE,
|
||||||
|
TudouPlaylistIE,
|
||||||
|
TudouAlbumIE,
|
||||||
|
)
|
||||||
|
from .tumblr import TumblrIE
|
||||||
|
from .tunein import (
|
||||||
|
TuneInClipIE,
|
||||||
|
TuneInStationIE,
|
||||||
|
TuneInProgramIE,
|
||||||
|
TuneInTopicIE,
|
||||||
|
TuneInShortenerIE,
|
||||||
|
)
|
||||||
|
from .turbo import TurboIE
|
||||||
|
from .tutv import TutvIE
|
||||||
|
from .tv2 import (
|
||||||
|
TV2IE,
|
||||||
|
TV2ArticleIE,
|
||||||
|
)
|
||||||
|
from .tv3 import TV3IE
|
||||||
|
from .tv4 import TV4IE
|
||||||
|
from .tvc import (
|
||||||
|
TVCIE,
|
||||||
|
TVCArticleIE,
|
||||||
|
)
|
||||||
|
from .tvigle import TvigleIE
|
||||||
|
from .tvland import TVLandIE
|
||||||
|
from .tvp import TvpIE, TvpSeriesIE
|
||||||
|
from .tvplay import TVPlayIE
|
||||||
|
from .tweakers import TweakersIE
|
||||||
|
from .twentyfourvideo import TwentyFourVideoIE
|
||||||
|
from .twentymin import TwentyMinutenIE
|
||||||
|
from .twentytwotracks import (
|
||||||
|
TwentyTwoTracksIE,
|
||||||
|
TwentyTwoTracksGenreIE
|
||||||
|
)
|
||||||
|
from .twitch import (
|
||||||
|
TwitchVideoIE,
|
||||||
|
TwitchChapterIE,
|
||||||
|
TwitchVodIE,
|
||||||
|
TwitchProfileIE,
|
||||||
|
TwitchPastBroadcastsIE,
|
||||||
|
TwitchBookmarksIE,
|
||||||
|
TwitchStreamIE,
|
||||||
|
)
|
||||||
|
from .twitter import (
|
||||||
|
TwitterCardIE,
|
||||||
|
TwitterIE,
|
||||||
|
TwitterAmplifyIE,
|
||||||
|
)
|
||||||
|
from .ubu import UbuIE
|
||||||
|
from .udemy import (
|
||||||
|
UdemyIE,
|
||||||
|
UdemyCourseIE
|
||||||
|
)
|
||||||
|
from .udn import UDNEmbedIE
|
||||||
|
from .digiteka import DigitekaIE
|
||||||
|
from .unistra import UnistraIE
|
||||||
|
from .urort import UrortIE
|
||||||
|
from .usatoday import USATodayIE
|
||||||
|
from .ustream import UstreamIE, UstreamChannelIE
|
||||||
|
from .ustudio import UstudioIE
|
||||||
|
from .varzesh3 import Varzesh3IE
|
||||||
|
from .vbox7 import Vbox7IE
|
||||||
|
from .veehd import VeeHDIE
|
||||||
|
from .veoh import VeohIE
|
||||||
|
from .vessel import VesselIE
|
||||||
|
from .vesti import VestiIE
|
||||||
|
from .vevo import VevoIE
|
||||||
|
from .vgtv import (
|
||||||
|
BTArticleIE,
|
||||||
|
BTVestlendingenIE,
|
||||||
|
VGTVIE,
|
||||||
|
)
|
||||||
|
from .vh1 import VH1IE
|
||||||
|
from .vice import (
|
||||||
|
ViceIE,
|
||||||
|
ViceShowIE,
|
||||||
|
)
|
||||||
|
from .viddler import ViddlerIE
|
||||||
|
from .videodetective import VideoDetectiveIE
|
||||||
|
from .videofyme import VideofyMeIE
|
||||||
|
from .videomega import VideoMegaIE
|
||||||
|
from .videomore import (
|
||||||
|
VideomoreIE,
|
||||||
|
VideomoreVideoIE,
|
||||||
|
VideomoreSeasonIE,
|
||||||
|
)
|
||||||
|
from .videopremium import VideoPremiumIE
|
||||||
|
from .videott import VideoTtIE
|
||||||
|
from .vidme import (
|
||||||
|
VidmeIE,
|
||||||
|
VidmeUserIE,
|
||||||
|
VidmeUserLikesIE,
|
||||||
|
)
|
||||||
|
from .vidzi import VidziIE
|
||||||
|
from .vier import VierIE, VierVideosIE
|
||||||
|
from .viewster import ViewsterIE
|
||||||
|
from .viidea import ViideaIE
|
||||||
|
from .vimeo import (
|
||||||
|
VimeoIE,
|
||||||
|
VimeoAlbumIE,
|
||||||
|
VimeoChannelIE,
|
||||||
|
VimeoGroupsIE,
|
||||||
|
VimeoLikesIE,
|
||||||
|
VimeoOndemandIE,
|
||||||
|
VimeoReviewIE,
|
||||||
|
VimeoUserIE,
|
||||||
|
VimeoWatchLaterIE,
|
||||||
|
)
|
||||||
|
from .vimple import VimpleIE
|
||||||
|
from .vine import (
|
||||||
|
VineIE,
|
||||||
|
VineUserIE,
|
||||||
|
)
|
||||||
|
from .viki import (
|
||||||
|
VikiIE,
|
||||||
|
VikiChannelIE,
|
||||||
|
)
|
||||||
|
from .vk import (
|
||||||
|
VKIE,
|
||||||
|
VKUserVideosIE,
|
||||||
|
)
|
||||||
|
from .vlive import VLiveIE
|
||||||
|
from .vodlocker import VodlockerIE
|
||||||
|
from .voicerepublic import VoiceRepublicIE
|
||||||
|
from .voxmedia import VoxMediaIE
|
||||||
|
from .vporn import VpornIE
|
||||||
|
from .vrt import VRTIE
|
||||||
|
from .vube import VubeIE
|
||||||
|
from .vuclip import VuClipIE
|
||||||
|
from .vulture import VultureIE
|
||||||
|
from .walla import WallaIE
|
||||||
|
from .washingtonpost import WashingtonPostIE
|
||||||
|
from .wat import WatIE
|
||||||
|
from .wayofthemaster import WayOfTheMasterIE
|
||||||
|
from .wdr import (
|
||||||
|
WDRIE,
|
||||||
|
WDRMobileIE,
|
||||||
|
WDRMausIE,
|
||||||
|
)
|
||||||
|
from .webofstories import (
|
||||||
|
WebOfStoriesIE,
|
||||||
|
WebOfStoriesPlaylistIE,
|
||||||
|
)
|
||||||
|
from .weibo import WeiboIE
|
||||||
|
from .weiqitv import WeiqiTVIE
|
||||||
|
from .wimp import WimpIE
|
||||||
|
from .wistia import WistiaIE
|
||||||
|
from .worldstarhiphop import WorldStarHipHopIE
|
||||||
|
from .wrzuta import WrzutaIE
|
||||||
|
from .wsj import WSJIE
|
||||||
|
from .xbef import XBefIE
|
||||||
|
from .xboxclips import XboxClipsIE
|
||||||
|
from .xfileshare import XFileShareIE
|
||||||
|
from .xhamster import (
|
||||||
|
XHamsterIE,
|
||||||
|
XHamsterEmbedIE,
|
||||||
|
)
|
||||||
|
from .xminus import XMinusIE
|
||||||
|
from .xnxx import XNXXIE
|
||||||
|
from .xstream import XstreamIE
|
||||||
|
from .xtube import XTubeUserIE, XTubeIE
|
||||||
|
from .xuite import XuiteIE
|
||||||
|
from .xvideos import XVideosIE
|
||||||
|
from .xxxymovies import XXXYMoviesIE
|
||||||
|
from .yahoo import (
|
||||||
|
YahooIE,
|
||||||
|
YahooSearchIE,
|
||||||
|
)
|
||||||
|
from .yam import YamIE
|
||||||
|
from .yandexmusic import (
|
||||||
|
YandexMusicTrackIE,
|
||||||
|
YandexMusicAlbumIE,
|
||||||
|
YandexMusicPlaylistIE,
|
||||||
|
)
|
||||||
|
from .yesjapan import YesJapanIE
|
||||||
|
from .yinyuetai import YinYueTaiIE
|
||||||
|
from .ynet import YnetIE
|
||||||
|
from .youjizz import YouJizzIE
|
||||||
|
from .youku import YoukuIE
|
||||||
|
from .youporn import YouPornIE
|
||||||
|
from .yourupload import YourUploadIE
|
||||||
|
from .youtube import (
|
||||||
|
YoutubeIE,
|
||||||
|
YoutubeChannelIE,
|
||||||
|
YoutubeFavouritesIE,
|
||||||
|
YoutubeHistoryIE,
|
||||||
|
YoutubeLiveIE,
|
||||||
|
YoutubePlaylistIE,
|
||||||
|
YoutubePlaylistsIE,
|
||||||
|
YoutubeRecommendedIE,
|
||||||
|
YoutubeSearchDateIE,
|
||||||
|
YoutubeSearchIE,
|
||||||
|
YoutubeSearchURLIE,
|
||||||
|
YoutubeShowIE,
|
||||||
|
YoutubeSubscriptionsIE,
|
||||||
|
YoutubeTruncatedIDIE,
|
||||||
|
YoutubeTruncatedURLIE,
|
||||||
|
YoutubeUserIE,
|
||||||
|
YoutubeWatchLaterIE,
|
||||||
|
)
|
||||||
|
from .zapiks import ZapiksIE
|
||||||
|
from .zdf import ZDFIE, ZDFChannelIE
|
||||||
|
from .zingmp3 import (
|
||||||
|
ZingMp3SongIE,
|
||||||
|
ZingMp3AlbumIE,
|
||||||
|
)
|
||||||
|
from .zippcast import ZippCastIE
|
Loading…
Reference in New Issue
Block a user