logo

oasis-root

Compiled tree of Oasis Linux based on own branch at <https://hacktivis.me/git/oasis/> git clone https://anongit.hacktivis.me/git/oasis-root.git

lazy_extractors.py (781331B)


  1. import importlib
  2. import random
  3. import re
  4. from ..utils import (
  5. age_restricted,
  6. bug_reports_message,
  7. classproperty,
  8. variadic,
  9. write_string,
  10. )
  11. # These bloat the lazy_extractors, so allow them to passthrough silently
  12. ALLOWED_CLASSMETHODS = {'extract_from_webpage', 'get_testcases', 'get_webpage_testcases'}
  13. _WARNED = False
  14. class LazyLoadMetaClass(type):
  15. def __getattr__(cls, name):
  16. global _WARNED
  17. if ('_real_class' not in cls.__dict__
  18. and name not in ALLOWED_CLASSMETHODS and not _WARNED):
  19. _WARNED = True
  20. write_string('WARNING: Falling back to normal extractor since lazy extractor '
  21. f'{cls.__name__} does not have attribute {name}{bug_reports_message()}\n')
  22. return getattr(cls.real_class, name)
  23. class LazyLoadExtractor(metaclass=LazyLoadMetaClass):
  24. @classproperty
  25. def real_class(cls):
  26. if '_real_class' not in cls.__dict__:
  27. cls._real_class = getattr(importlib.import_module(cls._module), cls.__name__)
  28. return cls._real_class
  29. def __new__(cls, *args, **kwargs):
  30. instance = cls.real_class.__new__(cls.real_class)
  31. instance.__init__(*args, **kwargs)
  32. return instance
  33. _module = None
  34. _ENABLED = True
  35. _VALID_URL = None
  36. _WORKING = True
  37. IE_DESC = None
  38. _NETRC_MACHINE = None
  39. SEARCH_KEY = None
  40. age_limit = 0
  41. _RETURN_TYPE = None
  42. @classmethod
  43. def ie_key(cls):
  44. """A string for getting the InfoExtractor with get_info_extractor"""
  45. return cls.__name__[:-2]
  46. @classmethod
  47. def suitable(cls, url):
  48. """Receives a URL and returns True if suitable for this IE."""
  49. # This function must import everything it needs (except other extractors),
  50. # so that lazy_extractors works correctly
  51. return cls._match_valid_url(url) is not None
  52. @classmethod
  53. def _match_valid_url(cls, url):
  54. if cls._VALID_URL is False:
  55. return None
  56. # This does not use has/getattr intentionally - we want to know whether
  57. # we have cached the regexp for *this* class, whereas getattr would also
  58. # match the superclass
  59. if '_VALID_URL_RE' not in cls.__dict__:
  60. cls._VALID_URL_RE = tuple(map(re.compile, variadic(cls._VALID_URL)))
  61. return next(filter(None, (regex.match(url) for regex in cls._VALID_URL_RE)), None)
  62. @classmethod
  63. def working(cls):
  64. """Getter method for _WORKING."""
  65. return cls._WORKING
  66. @classmethod
  67. def get_temp_id(cls, url):
  68. try:
  69. return cls._match_id(url)
  70. except (IndexError, AttributeError):
  71. return None
  72. @classmethod
  73. def _match_id(cls, url):
  74. return cls._match_valid_url(url).group('id')
  75. @classmethod
  76. def description(cls, *, markdown=True, search_examples=None):
  77. """Description of the extractor"""
  78. desc = ''
  79. if cls._NETRC_MACHINE:
  80. if markdown:
  81. desc += f' [*{cls._NETRC_MACHINE}*](## "netrc machine")'
  82. else:
  83. desc += f' [{cls._NETRC_MACHINE}]'
  84. if cls.IE_DESC is False:
  85. desc += ' [HIDDEN]'
  86. elif cls.IE_DESC:
  87. desc += f' {cls.IE_DESC}'
  88. if cls.SEARCH_KEY:
  89. desc += f'{";" if cls.IE_DESC else ""} "{cls.SEARCH_KEY}:" prefix'
  90. if search_examples:
  91. _COUNTS = ('', '5', '10', 'all')
  92. desc += f' (e.g. "{cls.SEARCH_KEY}{random.choice(_COUNTS)}:{random.choice(search_examples)}")'
  93. if not cls.working():
  94. desc += ' (**Currently broken**)' if markdown else ' (Currently broken)'
  95. # Escape emojis. Ref: https://github.com/github/markup/issues/1153
  96. name = (' - **{}**'.format(re.sub(r':(\w+:)', ':\u200B\\g<1>', cls.IE_NAME))) if markdown else cls.IE_NAME
  97. return f'{name}:{desc}' if desc else name
  98. @classmethod
  99. def is_suitable(cls, age_limit):
  100. """Test whether the extractor is generally suitable for the given age limit"""
  101. return not age_restricted(cls.age_limit, age_limit)
  102. @classmethod
  103. def supports_login(cls):
  104. return bool(cls._NETRC_MACHINE)
  105. @classmethod
  106. def is_single_video(cls, url):
  107. """Returns whether the URL is of a single video, None if unknown"""
  108. if cls.suitable(url):
  109. return {'video': True, 'playlist': False}.get(cls._RETURN_TYPE)
  110. class LazyLoadSearchExtractor(LazyLoadExtractor):
  111. pass
  112. class YoutubeBaseInfoExtractor(LazyLoadExtractor):
  113. _module = 'yt_dlp.extractor.youtube'
  114. IE_NAME = 'YoutubeBaseInfoExtract'
  115. _NETRC_MACHINE = 'youtube'
  116. class YoutubeIE(YoutubeBaseInfoExtractor):
  117. _module = 'yt_dlp.extractor.youtube'
  118. IE_NAME = 'youtube'
  119. _VALID_URL = '(?x)^\n (\n (?:https?://|//) # http(s):// or protocol-independent URL\n (?:(?:(?:(?:\\w+\\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\\.com|\n (?:www\\.)?deturl\\.com/www\\.youtube\\.com|\n (?:www\\.)?pwnyoutube\\.com|\n (?:www\\.)?hooktube\\.com|\n (?:www\\.)?yourepeat\\.com|\n tube\\.majestyc\\.net|\n (?:www\\.)?redirect\\.invidious\\.io|(?:(?:www|dev)\\.)?invidio\\.us|(?:www\\.)?invidious\\.pussthecat\\.org|(?:www\\.)?invidious\\.zee\\.li|(?:www\\.)?invidious\\.ethibox\\.fr|(?:www\\.)?iv\\.ggtyler\\.dev|(?:www\\.)?inv\\.vern\\.i2p|(?:www\\.)?am74vkcrjp2d5v36lcdqgsj2m6x36tbrkhsruoegwfcizzabnfgf5zyd\\.onion|(?:www\\.)?inv\\.riverside\\.rocks|(?:www\\.)?invidious\\.silur\\.me|(?:www\\.)?inv\\.bp\\.projectsegfau\\.lt|(?:www\\.)?invidious\\.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid\\.onion|(?:www\\.)?invidious\\.slipfox\\.xyz|(?:www\\.)?invidious\\.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd\\.onion|(?:www\\.)?inv\\.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad\\.onion|(?:www\\.)?invidious\\.tiekoetter\\.com|(?:www\\.)?iv\\.odysfvr23q5wgt7i456o5t3trw2cw5dgn56vbjfbq2m7xsc5vqbqpcyd\\.onion|(?:www\\.)?invidious\\.nerdvpn\\.de|(?:www\\.)?invidious\\.weblibre\\.org|(?:www\\.)?inv\\.odyssey346\\.dev|(?:www\\.)?invidious\\.dhusch\\.de|(?:www\\.)?iv\\.melmac\\.space|(?:www\\.)?watch\\.thekitty\\.zone|(?:www\\.)?invidious\\.privacydev\\.net|(?:www\\.)?ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid\\.onion|(?:www\\.)?invidious\\.drivet\\.xyz|(?:www\\.)?vid\\.priv\\.au|(?:www\\.)?euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd\\.onion|(?:www\\.)?inv\\.vern\\.cc|(?:www\\.)?invidious\\.esmailelbob\\.xyz|(?:www\\.)?invidious\\.sethforprivacy\\.com|(?:www\\.)?yt\\.oelrichsgarcia\\.de|(?:www\\.)?yt\\.artemislena\\.eu|(?:www\\.)?invidious\\.flokinet\\.to|(?:www\\.)?invidious\\.baczek\\.me|(?:www\\.)?y\\.com\\.sb|(?:www\\.)?invidious\\.epicsite\\.xyz|(?:www\\.)?invidious\\.lidarshield\\.cloud|(?:www\\.)?yt\\.funami\\.tech|(?:www\\.)?invidious\\.3o7z6yfxhbw7n3za4rss6l434kmv55cgw2vuziwuigpwegswvwzqipyd\\.onion|(?:www\\.)?osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd\\.onion|(?:www\\.)?u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad\\.onion|(?:(?:www|no)\\.)?invidiou\\.sh|(?:(?:www|fi)\\.)?invidious\\.snopyta\\.org|(?:www\\.)?invidious\\.kabi\\.tk|(?:www\\.)?invidious\\.mastodon\\.host|(?:www\\.)?invidious\\.zapashcanon\\.fr|(?:www\\.)?(?:invidious(?:-us)?|piped)\\.kavin\\.rocks|(?:www\\.)?invidious\\.tinfoil-hat\\.net|(?:www\\.)?invidious\\.himiko\\.cloud|(?:www\\.)?invidious\\.reallyancient\\.tech|(?:www\\.)?invidious\\.tube|(?:www\\.)?invidiou\\.site|(?:www\\.)?invidious\\.site|(?:www\\.)?invidious\\.xyz|(?:www\\.)?invidious\\.nixnet\\.xyz|(?:www\\.)?invidious\\.048596\\.xyz|(?:www\\.)?invidious\\.drycat\\.fr|(?:www\\.)?inv\\.skyn3t\\.in|(?:www\\.)?tube\\.poal\\.co|(?:www\\.)?tube\\.connect\\.cafe|(?:www\\.)?vid\\.wxzm\\.sx|(?:www\\.)?vid\\.mint\\.lgbt|(?:www\\.)?vid\\.puffyan\\.us|(?:www\\.)?yewtu\\.be|(?:www\\.)?yt\\.elukerio\\.org|(?:www\\.)?yt\\.lelux\\.fi|(?:www\\.)?invidious\\.ggc-project\\.de|(?:www\\.)?yt\\.maisputain\\.ovh|(?:www\\.)?ytprivate\\.com|(?:www\\.)?invidious\\.13ad\\.de|(?:www\\.)?invidious\\.toot\\.koeln|(?:www\\.)?invidious\\.fdn\\.fr|(?:www\\.)?watch\\.nettohikari\\.com|(?:www\\.)?invidious\\.namazso\\.eu|(?:www\\.)?invidious\\.silkky\\.cloud|(?:www\\.)?invidious\\.exonip\\.de|(?:www\\.)?invidious\\.riverside\\.rocks|(?:www\\.)?invidious\\.blamefran\\.net|(?:www\\.)?invidious\\.moomoo\\.de|(?:www\\.)?ytb\\.trom\\.tf|(?:www\\.)?yt\\.cyberhost\\.uk|(?:www\\.)?kgg2m7yk5aybusll\\.onion|(?:www\\.)?qklhadlycap4cnod\\.onion|(?:www\\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\\.onion|(?:www\\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\\.onion|(?:www\\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\\.onion|(?:www\\.)?invidious\\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\\.onion|(?:www\\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\\.b32\\.i2p|(?:www\\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\\.onion|(?:www\\.)?w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd\\.onion|(?:www\\.)?kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad\\.onion|(?:www\\.)?grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad\\.onion|(?:www\\.)?hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid\\.onion|(?:www\\.)?piped\\.kavin\\.rocks|(?:www\\.)?piped\\.tokhmi\\.xyz|(?:www\\.)?piped\\.syncpundit\\.io|(?:www\\.)?piped\\.mha\\.fi|(?:www\\.)?watch\\.whatever\\.social|(?:www\\.)?piped\\.garudalinux\\.org|(?:www\\.)?piped\\.rivo\\.lol|(?:www\\.)?piped-libre\\.kavin\\.rocks|(?:www\\.)?yt\\.jae\\.fi|(?:www\\.)?piped\\.mint\\.lgbt|(?:www\\.)?il\\.ax|(?:www\\.)?piped\\.esmailelbob\\.xyz|(?:www\\.)?piped\\.projectsegfau\\.lt|(?:www\\.)?piped\\.privacydev\\.net|(?:www\\.)?piped\\.palveluntarjoaja\\.eu|(?:www\\.)?piped\\.smnz\\.de|(?:www\\.)?piped\\.adminforge\\.de|(?:www\\.)?watch\\.whatevertinfoil\\.de|(?:www\\.)?piped\\.qdi\\.fi|(?:(?:www|cf)\\.)?piped\\.video|(?:www\\.)?piped\\.aeong\\.one|(?:www\\.)?piped\\.moomoo\\.me|(?:www\\.)?piped\\.chauvet\\.pro|(?:www\\.)?watch\\.leptons\\.xyz|(?:www\\.)?pd\\.vern\\.cc|(?:www\\.)?piped\\.hostux\\.net|(?:www\\.)?piped\\.lunar\\.icu|(?:www\\.)?hyperpipe\\.surge\\.sh|(?:www\\.)?hyperpipe\\.esmailelbob\\.xyz|(?:www\\.)?listen\\.whatever\\.social|(?:www\\.)?music\\.adminforge\\.de|\n youtube\\.googleapis\\.com)/ # the various hostnames, with wildcard subdomains\n (?:.*?\\#/)? # handle anchor (#/) redirect urls\n (?: # the various things that can precede the ID:\n (?:(?:v|embed|e|shorts|live)/(?!videoseries|live_stream)) # v/ or embed/ or e/ or shorts/\n |(?: # or the v= param in all its forms\n (?:(?:watch|movie)(?:_popup)?(?:\\.php)?/?)? # preceding watch(_popup|.php) or nothing (like /?v=xxxx)\n (?:\\?|\\#!?) # the params delimiter ? or # or #!\n (?:.*?[&;])?? # any other preceding param (like /?s=tuff&v=xxxx or ?s=tuff&amp;v=V36LpHqtcDY)\n v=\n )\n ))\n |(?:\n youtu\\.be| # just youtu.be/xxxx\n vid\\.plus| # or vid.plus/xxxx\n zwearz\\.com/watch| # or zwearz.com/watch/xxxx\n (?:www\\.)?redirect\\.invidious\\.io|(?:(?:www|dev)\\.)?invidio\\.us|(?:www\\.)?invidious\\.pussthecat\\.org|(?:www\\.)?invidious\\.zee\\.li|(?:www\\.)?invidious\\.ethibox\\.fr|(?:www\\.)?iv\\.ggtyler\\.dev|(?:www\\.)?inv\\.vern\\.i2p|(?:www\\.)?am74vkcrjp2d5v36lcdqgsj2m6x36tbrkhsruoegwfcizzabnfgf5zyd\\.onion|(?:www\\.)?inv\\.riverside\\.rocks|(?:www\\.)?invidious\\.silur\\.me|(?:www\\.)?inv\\.bp\\.projectsegfau\\.lt|(?:www\\.)?invidious\\.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid\\.onion|(?:www\\.)?invidious\\.slipfox\\.xyz|(?:www\\.)?invidious\\.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd\\.onion|(?:www\\.)?inv\\.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad\\.onion|(?:www\\.)?invidious\\.tiekoetter\\.com|(?:www\\.)?iv\\.odysfvr23q5wgt7i456o5t3trw2cw5dgn56vbjfbq2m7xsc5vqbqpcyd\\.onion|(?:www\\.)?invidious\\.nerdvpn\\.de|(?:www\\.)?invidious\\.weblibre\\.org|(?:www\\.)?inv\\.odyssey346\\.dev|(?:www\\.)?invidious\\.dhusch\\.de|(?:www\\.)?iv\\.melmac\\.space|(?:www\\.)?watch\\.thekitty\\.zone|(?:www\\.)?invidious\\.privacydev\\.net|(?:www\\.)?ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid\\.onion|(?:www\\.)?invidious\\.drivet\\.xyz|(?:www\\.)?vid\\.priv\\.au|(?:www\\.)?euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd\\.onion|(?:www\\.)?inv\\.vern\\.cc|(?:www\\.)?invidious\\.esmailelbob\\.xyz|(?:www\\.)?invidious\\.sethforprivacy\\.com|(?:www\\.)?yt\\.oelrichsgarcia\\.de|(?:www\\.)?yt\\.artemislena\\.eu|(?:www\\.)?invidious\\.flokinet\\.to|(?:www\\.)?invidious\\.baczek\\.me|(?:www\\.)?y\\.com\\.sb|(?:www\\.)?invidious\\.epicsite\\.xyz|(?:www\\.)?invidious\\.lidarshield\\.cloud|(?:www\\.)?yt\\.funami\\.tech|(?:www\\.)?invidious\\.3o7z6yfxhbw7n3za4rss6l434kmv55cgw2vuziwuigpwegswvwzqipyd\\.onion|(?:www\\.)?osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd\\.onion|(?:www\\.)?u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad\\.onion|(?:(?:www|no)\\.)?invidiou\\.sh|(?:(?:www|fi)\\.)?invidious\\.snopyta\\.org|(?:www\\.)?invidious\\.kabi\\.tk|(?:www\\.)?invidious\\.mastodon\\.host|(?:www\\.)?invidious\\.zapashcanon\\.fr|(?:www\\.)?(?:invidious(?:-us)?|piped)\\.kavin\\.rocks|(?:www\\.)?invidious\\.tinfoil-hat\\.net|(?:www\\.)?invidious\\.himiko\\.cloud|(?:www\\.)?invidious\\.reallyancient\\.tech|(?:www\\.)?invidious\\.tube|(?:www\\.)?invidiou\\.site|(?:www\\.)?invidious\\.site|(?:www\\.)?invidious\\.xyz|(?:www\\.)?invidious\\.nixnet\\.xyz|(?:www\\.)?invidious\\.048596\\.xyz|(?:www\\.)?invidious\\.drycat\\.fr|(?:www\\.)?inv\\.skyn3t\\.in|(?:www\\.)?tube\\.poal\\.co|(?:www\\.)?tube\\.connect\\.cafe|(?:www\\.)?vid\\.wxzm\\.sx|(?:www\\.)?vid\\.mint\\.lgbt|(?:www\\.)?vid\\.puffyan\\.us|(?:www\\.)?yewtu\\.be|(?:www\\.)?yt\\.elukerio\\.org|(?:www\\.)?yt\\.lelux\\.fi|(?:www\\.)?invidious\\.ggc-project\\.de|(?:www\\.)?yt\\.maisputain\\.ovh|(?:www\\.)?ytprivate\\.com|(?:www\\.)?invidious\\.13ad\\.de|(?:www\\.)?invidious\\.toot\\.koeln|(?:www\\.)?invidious\\.fdn\\.fr|(?:www\\.)?watch\\.nettohikari\\.com|(?:www\\.)?invidious\\.namazso\\.eu|(?:www\\.)?invidious\\.silkky\\.cloud|(?:www\\.)?invidious\\.exonip\\.de|(?:www\\.)?invidious\\.riverside\\.rocks|(?:www\\.)?invidious\\.blamefran\\.net|(?:www\\.)?invidious\\.moomoo\\.de|(?:www\\.)?ytb\\.trom\\.tf|(?:www\\.)?yt\\.cyberhost\\.uk|(?:www\\.)?kgg2m7yk5aybusll\\.onion|(?:www\\.)?qklhadlycap4cnod\\.onion|(?:www\\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\\.onion|(?:www\\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\\.onion|(?:www\\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\\.onion|(?:www\\.)?invidious\\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\\.onion|(?:www\\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\\.b32\\.i2p|(?:www\\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\\.onion|(?:www\\.)?w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd\\.onion|(?:www\\.)?kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad\\.onion|(?:www\\.)?grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad\\.onion|(?:www\\.)?hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid\\.onion|(?:www\\.)?piped\\.kavin\\.rocks|(?:www\\.)?piped\\.tokhmi\\.xyz|(?:www\\.)?piped\\.syncpundit\\.io|(?:www\\.)?piped\\.mha\\.fi|(?:www\\.)?watch\\.whatever\\.social|(?:www\\.)?piped\\.garudalinux\\.org|(?:www\\.)?piped\\.rivo\\.lol|(?:www\\.)?piped-libre\\.kavin\\.rocks|(?:www\\.)?yt\\.jae\\.fi|(?:www\\.)?piped\\.mint\\.lgbt|(?:www\\.)?il\\.ax|(?:www\\.)?piped\\.esmailelbob\\.xyz|(?:www\\.)?piped\\.projectsegfau\\.lt|(?:www\\.)?piped\\.privacydev\\.net|(?:www\\.)?piped\\.palveluntarjoaja\\.eu|(?:www\\.)?piped\\.smnz\\.de|(?:www\\.)?piped\\.adminforge\\.de|(?:www\\.)?watch\\.whatevertinfoil\\.de|(?:www\\.)?piped\\.qdi\\.fi|(?:(?:www|cf)\\.)?piped\\.video|(?:www\\.)?piped\\.aeong\\.one|(?:www\\.)?piped\\.moomoo\\.me|(?:www\\.)?piped\\.chauvet\\.pro|(?:www\\.)?watch\\.leptons\\.xyz|(?:www\\.)?pd\\.vern\\.cc|(?:www\\.)?piped\\.hostux\\.net|(?:www\\.)?piped\\.lunar\\.icu|(?:www\\.)?hyperpipe\\.surge\\.sh|(?:www\\.)?hyperpipe\\.esmailelbob\\.xyz|(?:www\\.)?listen\\.whatever\\.social|(?:www\\.)?music\\.adminforge\\.de\n )/\n |(?:www\\.)?cleanvideosearch\\.com/media/action/yt/watch\\?videoId=\n )\n )? # all until now is optional -> you can pass the naked ID\n (?P<id>[0-9A-Za-z_-]{11}) # here is it! the YouTube video ID\n (?(1).+)? # if we found the ID, everything can follow\n (?:\\#|$)'
  120. IE_DESC = 'YouTube'
  121. _NETRC_MACHINE = 'youtube'
  122. age_limit = 18
  123. _RETURN_TYPE = 'video'
  124. @classmethod
  125. def suitable(cls, url):
  126. from ..utils import parse_qs
  127. qs = parse_qs(url)
  128. if qs.get('list', [None])[0]:
  129. return False
  130. return super().suitable(url)
  131. class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor):
  132. _module = 'yt_dlp.extractor.youtube'
  133. IE_NAME = 'YoutubeTabBaseInfoExtract'
  134. _NETRC_MACHINE = 'youtube'
  135. class YoutubeClipIE(YoutubeTabBaseInfoExtractor):
  136. _module = 'yt_dlp.extractor.youtube'
  137. IE_NAME = 'youtube:clip'
  138. _VALID_URL = 'https?://(?:www\\.)?youtube\\.com/clip/(?P<id>[^/?#]+)'
  139. _NETRC_MACHINE = 'youtube'
  140. _RETURN_TYPE = 'video'
  141. class YoutubeFavouritesIE(YoutubeBaseInfoExtractor):
  142. _module = 'yt_dlp.extractor.youtube'
  143. IE_NAME = 'youtube:favorites'
  144. _VALID_URL = ':ytfav(?:ou?rite)?s?'
  145. IE_DESC = 'YouTube liked videos; ":ytfav" keyword (requires cookies)'
  146. _NETRC_MACHINE = 'youtube'
  147. class YoutubeNotificationsIE(YoutubeTabBaseInfoExtractor):
  148. _module = 'yt_dlp.extractor.youtube'
  149. IE_NAME = 'youtube:notif'
  150. _VALID_URL = ':ytnotif(?:ication)?s?'
  151. IE_DESC = 'YouTube notifications; ":ytnotif" keyword (requires cookies)'
  152. _NETRC_MACHINE = 'youtube'
  153. class YoutubeFeedsInfoExtractor(YoutubeBaseInfoExtractor):
  154. _module = 'yt_dlp.extractor.youtube'
  155. IE_NAME = 'youtube:feeds'
  156. _NETRC_MACHINE = 'youtube'
  157. class YoutubeHistoryIE(YoutubeFeedsInfoExtractor):
  158. _module = 'yt_dlp.extractor.youtube'
  159. IE_NAME = 'youtube:history'
  160. _VALID_URL = ':ythis(?:tory)?'
  161. IE_DESC = 'Youtube watch history; ":ythis" keyword (requires cookies)'
  162. _NETRC_MACHINE = 'youtube'
  163. class YoutubeTabIE(YoutubeTabBaseInfoExtractor):
  164. _module = 'yt_dlp.extractor.youtube'
  165. IE_NAME = 'youtube:tab'
  166. _VALID_URL = '(?x:\n https?://\n (?!consent\\.)(?:\\w+\\.)?\n (?:\n youtube(?:kids)?\\.com|\n (?:www\\.)?redirect\\.invidious\\.io|(?:(?:www|dev)\\.)?invidio\\.us|(?:www\\.)?invidious\\.pussthecat\\.org|(?:www\\.)?invidious\\.zee\\.li|(?:www\\.)?invidious\\.ethibox\\.fr|(?:www\\.)?iv\\.ggtyler\\.dev|(?:www\\.)?inv\\.vern\\.i2p|(?:www\\.)?am74vkcrjp2d5v36lcdqgsj2m6x36tbrkhsruoegwfcizzabnfgf5zyd\\.onion|(?:www\\.)?inv\\.riverside\\.rocks|(?:www\\.)?invidious\\.silur\\.me|(?:www\\.)?inv\\.bp\\.projectsegfau\\.lt|(?:www\\.)?invidious\\.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid\\.onion|(?:www\\.)?invidious\\.slipfox\\.xyz|(?:www\\.)?invidious\\.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd\\.onion|(?:www\\.)?inv\\.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad\\.onion|(?:www\\.)?invidious\\.tiekoetter\\.com|(?:www\\.)?iv\\.odysfvr23q5wgt7i456o5t3trw2cw5dgn56vbjfbq2m7xsc5vqbqpcyd\\.onion|(?:www\\.)?invidious\\.nerdvpn\\.de|(?:www\\.)?invidious\\.weblibre\\.org|(?:www\\.)?inv\\.odyssey346\\.dev|(?:www\\.)?invidious\\.dhusch\\.de|(?:www\\.)?iv\\.melmac\\.space|(?:www\\.)?watch\\.thekitty\\.zone|(?:www\\.)?invidious\\.privacydev\\.net|(?:www\\.)?ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid\\.onion|(?:www\\.)?invidious\\.drivet\\.xyz|(?:www\\.)?vid\\.priv\\.au|(?:www\\.)?euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd\\.onion|(?:www\\.)?inv\\.vern\\.cc|(?:www\\.)?invidious\\.esmailelbob\\.xyz|(?:www\\.)?invidious\\.sethforprivacy\\.com|(?:www\\.)?yt\\.oelrichsgarcia\\.de|(?:www\\.)?yt\\.artemislena\\.eu|(?:www\\.)?invidious\\.flokinet\\.to|(?:www\\.)?invidious\\.baczek\\.me|(?:www\\.)?y\\.com\\.sb|(?:www\\.)?invidious\\.epicsite\\.xyz|(?:www\\.)?invidious\\.lidarshield\\.cloud|(?:www\\.)?yt\\.funami\\.tech|(?:www\\.)?invidious\\.3o7z6yfxhbw7n3za4rss6l434kmv55cgw2vuziwuigpwegswvwzqipyd\\.onion|(?:www\\.)?osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd\\.onion|(?:www\\.)?u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad\\.onion|(?:(?:www|no)\\.)?invidiou\\.sh|(?:(?:www|fi)\\.)?invidious\\.snopyta\\.org|(?:www\\.)?invidious\\.kabi\\.tk|(?:www\\.)?invidious\\.mastodon\\.host|(?:www\\.)?invidious\\.zapashcanon\\.fr|(?:www\\.)?(?:invidious(?:-us)?|piped)\\.kavin\\.rocks|(?:www\\.)?invidious\\.tinfoil-hat\\.net|(?:www\\.)?invidious\\.himiko\\.cloud|(?:www\\.)?invidious\\.reallyancient\\.tech|(?:www\\.)?invidious\\.tube|(?:www\\.)?invidiou\\.site|(?:www\\.)?invidious\\.site|(?:www\\.)?invidious\\.xyz|(?:www\\.)?invidious\\.nixnet\\.xyz|(?:www\\.)?invidious\\.048596\\.xyz|(?:www\\.)?invidious\\.drycat\\.fr|(?:www\\.)?inv\\.skyn3t\\.in|(?:www\\.)?tube\\.poal\\.co|(?:www\\.)?tube\\.connect\\.cafe|(?:www\\.)?vid\\.wxzm\\.sx|(?:www\\.)?vid\\.mint\\.lgbt|(?:www\\.)?vid\\.puffyan\\.us|(?:www\\.)?yewtu\\.be|(?:www\\.)?yt\\.elukerio\\.org|(?:www\\.)?yt\\.lelux\\.fi|(?:www\\.)?invidious\\.ggc-project\\.de|(?:www\\.)?yt\\.maisputain\\.ovh|(?:www\\.)?ytprivate\\.com|(?:www\\.)?invidious\\.13ad\\.de|(?:www\\.)?invidious\\.toot\\.koeln|(?:www\\.)?invidious\\.fdn\\.fr|(?:www\\.)?watch\\.nettohikari\\.com|(?:www\\.)?invidious\\.namazso\\.eu|(?:www\\.)?invidious\\.silkky\\.cloud|(?:www\\.)?invidious\\.exonip\\.de|(?:www\\.)?invidious\\.riverside\\.rocks|(?:www\\.)?invidious\\.blamefran\\.net|(?:www\\.)?invidious\\.moomoo\\.de|(?:www\\.)?ytb\\.trom\\.tf|(?:www\\.)?yt\\.cyberhost\\.uk|(?:www\\.)?kgg2m7yk5aybusll\\.onion|(?:www\\.)?qklhadlycap4cnod\\.onion|(?:www\\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\\.onion|(?:www\\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\\.onion|(?:www\\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\\.onion|(?:www\\.)?invidious\\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\\.onion|(?:www\\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\\.b32\\.i2p|(?:www\\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\\.onion|(?:www\\.)?w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd\\.onion|(?:www\\.)?kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad\\.onion|(?:www\\.)?grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad\\.onion|(?:www\\.)?hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid\\.onion|(?:www\\.)?piped\\.kavin\\.rocks|(?:www\\.)?piped\\.tokhmi\\.xyz|(?:www\\.)?piped\\.syncpundit\\.io|(?:www\\.)?piped\\.mha\\.fi|(?:www\\.)?watch\\.whatever\\.social|(?:www\\.)?piped\\.garudalinux\\.org|(?:www\\.)?piped\\.rivo\\.lol|(?:www\\.)?piped-libre\\.kavin\\.rocks|(?:www\\.)?yt\\.jae\\.fi|(?:www\\.)?piped\\.mint\\.lgbt|(?:www\\.)?il\\.ax|(?:www\\.)?piped\\.esmailelbob\\.xyz|(?:www\\.)?piped\\.projectsegfau\\.lt|(?:www\\.)?piped\\.privacydev\\.net|(?:www\\.)?piped\\.palveluntarjoaja\\.eu|(?:www\\.)?piped\\.smnz\\.de|(?:www\\.)?piped\\.adminforge\\.de|(?:www\\.)?watch\\.whatevertinfoil\\.de|(?:www\\.)?piped\\.qdi\\.fi|(?:(?:www|cf)\\.)?piped\\.video|(?:www\\.)?piped\\.aeong\\.one|(?:www\\.)?piped\\.moomoo\\.me|(?:www\\.)?piped\\.chauvet\\.pro|(?:www\\.)?watch\\.leptons\\.xyz|(?:www\\.)?pd\\.vern\\.cc|(?:www\\.)?piped\\.hostux\\.net|(?:www\\.)?piped\\.lunar\\.icu|(?:www\\.)?hyperpipe\\.surge\\.sh|(?:www\\.)?hyperpipe\\.esmailelbob\\.xyz|(?:www\\.)?listen\\.whatever\\.social|(?:www\\.)?music\\.adminforge\\.de\n )/\n (?:\n (?P<channel_type>channel|c|user|browse)/|\n (?P<not_channel>\n feed/|hashtag/|\n (?:playlist|watch)\\?.*?\\blist=\n )|\n (?!(?:channel|c|user|playlist|watch|w|v|embed|e|live|watch_popup|clip|shorts|movies|results|search|shared|hashtag|trending|explore|feed|feeds|browse|oembed|get_video_info|iframe_api|s/player|source|storefront|oops|index|account|t/terms|about|upload|signin|logout)\\b) # Direct URLs\n )\n (?P<id>[^/?\\#&]+)\n )'
  167. IE_DESC = 'YouTube Tabs'
  168. _NETRC_MACHINE = 'youtube'
  169. _RETURN_TYPE = 'any'
  170. @classmethod
  171. def suitable(cls, url):
  172. return False if YoutubeIE.suitable(url) else super().suitable(url)
  173. class YoutubeLivestreamEmbedIE(YoutubeBaseInfoExtractor):
  174. _module = 'yt_dlp.extractor.youtube'
  175. IE_NAME = 'YoutubeLivestreamEmbed'
  176. _VALID_URL = 'https?://(?:\\w+\\.)?youtube\\.com/embed/live_stream/?\\?(?:[^#]+&)?channel=(?P<id>[^&#]+)'
  177. IE_DESC = 'YouTube livestream embeds'
  178. _NETRC_MACHINE = 'youtube'
  179. class YoutubePlaylistIE(YoutubeBaseInfoExtractor):
  180. _module = 'yt_dlp.extractor.youtube'
  181. IE_NAME = 'youtube:playlist'
  182. _VALID_URL = '(?x)(?:\n (?:https?://)?\n (?:\\w+\\.)?\n (?:\n (?:\n youtube(?:kids)?\\.com|\n (?:www\\.)?redirect\\.invidious\\.io|(?:(?:www|dev)\\.)?invidio\\.us|(?:www\\.)?invidious\\.pussthecat\\.org|(?:www\\.)?invidious\\.zee\\.li|(?:www\\.)?invidious\\.ethibox\\.fr|(?:www\\.)?iv\\.ggtyler\\.dev|(?:www\\.)?inv\\.vern\\.i2p|(?:www\\.)?am74vkcrjp2d5v36lcdqgsj2m6x36tbrkhsruoegwfcizzabnfgf5zyd\\.onion|(?:www\\.)?inv\\.riverside\\.rocks|(?:www\\.)?invidious\\.silur\\.me|(?:www\\.)?inv\\.bp\\.projectsegfau\\.lt|(?:www\\.)?invidious\\.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid\\.onion|(?:www\\.)?invidious\\.slipfox\\.xyz|(?:www\\.)?invidious\\.esmail5pdn24shtvieloeedh7ehz3nrwcdivnfhfcedl7gf4kwddhkqd\\.onion|(?:www\\.)?inv\\.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad\\.onion|(?:www\\.)?invidious\\.tiekoetter\\.com|(?:www\\.)?iv\\.odysfvr23q5wgt7i456o5t3trw2cw5dgn56vbjfbq2m7xsc5vqbqpcyd\\.onion|(?:www\\.)?invidious\\.nerdvpn\\.de|(?:www\\.)?invidious\\.weblibre\\.org|(?:www\\.)?inv\\.odyssey346\\.dev|(?:www\\.)?invidious\\.dhusch\\.de|(?:www\\.)?iv\\.melmac\\.space|(?:www\\.)?watch\\.thekitty\\.zone|(?:www\\.)?invidious\\.privacydev\\.net|(?:www\\.)?ng27owmagn5amdm7l5s3rsqxwscl5ynppnis5dqcasogkyxcfqn7psid\\.onion|(?:www\\.)?invidious\\.drivet\\.xyz|(?:www\\.)?vid\\.priv\\.au|(?:www\\.)?euxxcnhsynwmfidvhjf6uzptsmh4dipkmgdmcmxxuo7tunp3ad2jrwyd\\.onion|(?:www\\.)?inv\\.vern\\.cc|(?:www\\.)?invidious\\.esmailelbob\\.xyz|(?:www\\.)?invidious\\.sethforprivacy\\.com|(?:www\\.)?yt\\.oelrichsgarcia\\.de|(?:www\\.)?yt\\.artemislena\\.eu|(?:www\\.)?invidious\\.flokinet\\.to|(?:www\\.)?invidious\\.baczek\\.me|(?:www\\.)?y\\.com\\.sb|(?:www\\.)?invidious\\.epicsite\\.xyz|(?:www\\.)?invidious\\.lidarshield\\.cloud|(?:www\\.)?yt\\.funami\\.tech|(?:www\\.)?invidious\\.3o7z6yfxhbw7n3za4rss6l434kmv55cgw2vuziwuigpwegswvwzqipyd\\.onion|(?:www\\.)?osbivz6guyeahrwp2lnwyjk2xos342h4ocsxyqrlaopqjuhwn2djiiyd\\.onion|(?:www\\.)?u2cvlit75owumwpy4dj2hsmvkq7nvrclkpht7xgyye2pyoxhpmclkrad\\.onion|(?:(?:www|no)\\.)?invidiou\\.sh|(?:(?:www|fi)\\.)?invidious\\.snopyta\\.org|(?:www\\.)?invidious\\.kabi\\.tk|(?:www\\.)?invidious\\.mastodon\\.host|(?:www\\.)?invidious\\.zapashcanon\\.fr|(?:www\\.)?(?:invidious(?:-us)?|piped)\\.kavin\\.rocks|(?:www\\.)?invidious\\.tinfoil-hat\\.net|(?:www\\.)?invidious\\.himiko\\.cloud|(?:www\\.)?invidious\\.reallyancient\\.tech|(?:www\\.)?invidious\\.tube|(?:www\\.)?invidiou\\.site|(?:www\\.)?invidious\\.site|(?:www\\.)?invidious\\.xyz|(?:www\\.)?invidious\\.nixnet\\.xyz|(?:www\\.)?invidious\\.048596\\.xyz|(?:www\\.)?invidious\\.drycat\\.fr|(?:www\\.)?inv\\.skyn3t\\.in|(?:www\\.)?tube\\.poal\\.co|(?:www\\.)?tube\\.connect\\.cafe|(?:www\\.)?vid\\.wxzm\\.sx|(?:www\\.)?vid\\.mint\\.lgbt|(?:www\\.)?vid\\.puffyan\\.us|(?:www\\.)?yewtu\\.be|(?:www\\.)?yt\\.elukerio\\.org|(?:www\\.)?yt\\.lelux\\.fi|(?:www\\.)?invidious\\.ggc-project\\.de|(?:www\\.)?yt\\.maisputain\\.ovh|(?:www\\.)?ytprivate\\.com|(?:www\\.)?invidious\\.13ad\\.de|(?:www\\.)?invidious\\.toot\\.koeln|(?:www\\.)?invidious\\.fdn\\.fr|(?:www\\.)?watch\\.nettohikari\\.com|(?:www\\.)?invidious\\.namazso\\.eu|(?:www\\.)?invidious\\.silkky\\.cloud|(?:www\\.)?invidious\\.exonip\\.de|(?:www\\.)?invidious\\.riverside\\.rocks|(?:www\\.)?invidious\\.blamefran\\.net|(?:www\\.)?invidious\\.moomoo\\.de|(?:www\\.)?ytb\\.trom\\.tf|(?:www\\.)?yt\\.cyberhost\\.uk|(?:www\\.)?kgg2m7yk5aybusll\\.onion|(?:www\\.)?qklhadlycap4cnod\\.onion|(?:www\\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\\.onion|(?:www\\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\\.onion|(?:www\\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\\.onion|(?:www\\.)?invidious\\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\\.onion|(?:www\\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\\.b32\\.i2p|(?:www\\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\\.onion|(?:www\\.)?w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd\\.onion|(?:www\\.)?kbjggqkzv65ivcqj6bumvp337z6264huv5kpkwuv6gu5yjiskvan7fad\\.onion|(?:www\\.)?grwp24hodrefzvjjuccrkw3mjq4tzhaaq32amf33dzpmuxe7ilepcmad\\.onion|(?:www\\.)?hpniueoejy4opn7bc4ftgazyqjoeqwlvh2uiku2xqku6zpoa4bf5ruid\\.onion|(?:www\\.)?piped\\.kavin\\.rocks|(?:www\\.)?piped\\.tokhmi\\.xyz|(?:www\\.)?piped\\.syncpundit\\.io|(?:www\\.)?piped\\.mha\\.fi|(?:www\\.)?watch\\.whatever\\.social|(?:www\\.)?piped\\.garudalinux\\.org|(?:www\\.)?piped\\.rivo\\.lol|(?:www\\.)?piped-libre\\.kavin\\.rocks|(?:www\\.)?yt\\.jae\\.fi|(?:www\\.)?piped\\.mint\\.lgbt|(?:www\\.)?il\\.ax|(?:www\\.)?piped\\.esmailelbob\\.xyz|(?:www\\.)?piped\\.projectsegfau\\.lt|(?:www\\.)?piped\\.privacydev\\.net|(?:www\\.)?piped\\.palveluntarjoaja\\.eu|(?:www\\.)?piped\\.smnz\\.de|(?:www\\.)?piped\\.adminforge\\.de|(?:www\\.)?watch\\.whatevertinfoil\\.de|(?:www\\.)?piped\\.qdi\\.fi|(?:(?:www|cf)\\.)?piped\\.video|(?:www\\.)?piped\\.aeong\\.one|(?:www\\.)?piped\\.moomoo\\.me|(?:www\\.)?piped\\.chauvet\\.pro|(?:www\\.)?watch\\.leptons\\.xyz|(?:www\\.)?pd\\.vern\\.cc|(?:www\\.)?piped\\.hostux\\.net|(?:www\\.)?piped\\.lunar\\.icu|(?:www\\.)?hyperpipe\\.surge\\.sh|(?:www\\.)?hyperpipe\\.esmailelbob\\.xyz|(?:www\\.)?listen\\.whatever\\.social|(?:www\\.)?music\\.adminforge\\.de\n )\n /.*?\\?.*?\\blist=\n )?\n (?P<id>(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM|WL|LL|LM))\n )'
  183. IE_DESC = 'YouTube playlists'
  184. _NETRC_MACHINE = 'youtube'
  185. _RETURN_TYPE = 'playlist'
  186. @classmethod
  187. def suitable(cls, url):
  188. if YoutubeTabIE.suitable(url):
  189. return False
  190. from ..utils import parse_qs
  191. qs = parse_qs(url)
  192. if qs.get('v', [None])[0]:
  193. return False
  194. return super().suitable(url)
  195. class YoutubeRecommendedIE(YoutubeFeedsInfoExtractor):
  196. _module = 'yt_dlp.extractor.youtube'
  197. IE_NAME = 'youtube:recommended'
  198. _VALID_URL = 'https?://(?:www\\.)?youtube\\.com/?(?:[?#]|$)|:ytrec(?:ommended)?'
  199. IE_DESC = 'YouTube recommended videos; ":ytrec" keyword'
  200. _NETRC_MACHINE = 'youtube'
  201. class YoutubeSearchDateIE(YoutubeTabBaseInfoExtractor, LazyLoadSearchExtractor):
  202. _module = 'yt_dlp.extractor.youtube'
  203. IE_NAME = 'youtube:search:date'
  204. _VALID_URL = 'ytsearchdate(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  205. IE_DESC = 'YouTube search, newest videos first'
  206. _NETRC_MACHINE = 'youtube'
  207. SEARCH_KEY = 'ytsearchdate'
  208. _RETURN_TYPE = 'playlist'
  209. class YoutubeSearchIE(YoutubeTabBaseInfoExtractor, LazyLoadSearchExtractor):
  210. _module = 'yt_dlp.extractor.youtube'
  211. IE_NAME = 'youtube:search'
  212. _VALID_URL = 'ytsearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  213. IE_DESC = 'YouTube search'
  214. _NETRC_MACHINE = 'youtube'
  215. SEARCH_KEY = 'ytsearch'
  216. _RETURN_TYPE = 'playlist'
  217. class YoutubeSearchURLIE(YoutubeTabBaseInfoExtractor):
  218. _module = 'yt_dlp.extractor.youtube'
  219. IE_NAME = 'youtube:search_url'
  220. _VALID_URL = 'https?://(?:www\\.)?youtube\\.com/(?:results|search)\\?([^#]+&)?(?:search_query|q)=(?:[^&]+)(?:[&#]|$)'
  221. IE_DESC = 'YouTube search URLs with sorting and filter support'
  222. _NETRC_MACHINE = 'youtube'
  223. _RETURN_TYPE = 'playlist'
  224. class YoutubeMusicSearchURLIE(YoutubeTabBaseInfoExtractor):
  225. _module = 'yt_dlp.extractor.youtube'
  226. IE_NAME = 'youtube:music:search_url'
  227. _VALID_URL = 'https?://music\\.youtube\\.com/search\\?([^#]+&)?(?:search_query|q)=(?:[^&]+)(?:[&#]|$)'
  228. IE_DESC = 'YouTube music search URLs with selectable sections, e.g. #songs'
  229. _NETRC_MACHINE = 'youtube'
  230. _RETURN_TYPE = 'playlist'
  231. class YoutubeSubscriptionsIE(YoutubeFeedsInfoExtractor):
  232. _module = 'yt_dlp.extractor.youtube'
  233. IE_NAME = 'youtube:subscriptions'
  234. _VALID_URL = ':ytsub(?:scription)?s?'
  235. IE_DESC = 'YouTube subscriptions feed; ":ytsubs" keyword (requires cookies)'
  236. _NETRC_MACHINE = 'youtube'
  237. class YoutubeTruncatedIDIE(YoutubeBaseInfoExtractor):
  238. _module = 'yt_dlp.extractor.youtube'
  239. IE_NAME = 'youtube:truncated_id'
  240. _VALID_URL = 'https?://(?:www\\.)?youtube\\.com/watch\\?v=(?P<id>[0-9A-Za-z_-]{1,10})$'
  241. IE_DESC = False
  242. _NETRC_MACHINE = 'youtube'
  243. class YoutubeTruncatedURLIE(YoutubeBaseInfoExtractor):
  244. _module = 'yt_dlp.extractor.youtube'
  245. IE_NAME = 'youtube:truncated_url'
  246. _VALID_URL = '(?x)\n (?:https?://)?\n (?:\\w+\\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie)?\\.com/\n (?:watch\\?(?:\n feature=[a-z_]+|\n annotation_id=annotation_[^&]+|\n x-yt-cl=[0-9]+|\n hl=[^&]*|\n t=[0-9]+\n )?\n |\n attribution_link\\?a=[^&]+\n )\n $\n '
  247. IE_DESC = False
  248. _NETRC_MACHINE = 'youtube'
  249. class YoutubeYtBeIE(YoutubeBaseInfoExtractor):
  250. _module = 'yt_dlp.extractor.youtube'
  251. IE_NAME = 'YoutubeYtBe'
  252. _VALID_URL = 'https?://youtu\\.be/(?P<id>[0-9A-Za-z_-]{11})/*?.*?\\blist=(?P<playlist_id>(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM|WL|LL|LM))'
  253. IE_DESC = 'youtu.be'
  254. _NETRC_MACHINE = 'youtube'
  255. _RETURN_TYPE = 'video'
  256. class YoutubeYtUserIE(YoutubeBaseInfoExtractor):
  257. _module = 'yt_dlp.extractor.youtube'
  258. IE_NAME = 'youtube:user'
  259. _VALID_URL = 'ytuser:(?P<id>.+)'
  260. IE_DESC = 'YouTube user videos; "ytuser:" prefix'
  261. _NETRC_MACHINE = 'youtube'
  262. class YoutubeWatchLaterIE(YoutubeBaseInfoExtractor):
  263. _module = 'yt_dlp.extractor.youtube'
  264. IE_NAME = 'youtube:watchlater'
  265. _VALID_URL = ':ytwatchlater'
  266. IE_DESC = 'Youtube watch later list; ":ytwatchlater" keyword (requires cookies)'
  267. _NETRC_MACHINE = 'youtube'
  268. class YoutubeShortsAudioPivotIE(YoutubeBaseInfoExtractor):
  269. _module = 'yt_dlp.extractor.youtube'
  270. IE_NAME = 'youtube:shorts:pivot:audio'
  271. _VALID_URL = 'https?://(?:www\\.)?youtube\\.com/source/(?P<id>[\\w-]{11})/shorts'
  272. IE_DESC = 'YouTube Shorts audio pivot (Shorts using audio of a given video)'
  273. _NETRC_MACHINE = 'youtube'
  274. class YoutubeConsentRedirectIE(YoutubeBaseInfoExtractor):
  275. _module = 'yt_dlp.extractor.youtube'
  276. IE_NAME = 'youtube:consent'
  277. _VALID_URL = 'https?://consent\\.youtube\\.com/m\\?'
  278. IE_DESC = False
  279. _NETRC_MACHINE = 'youtube'
  280. _RETURN_TYPE = 'video'
  281. class ABCIE(LazyLoadExtractor):
  282. _module = 'yt_dlp.extractor.abc'
  283. IE_NAME = 'abc.net.au'
  284. _VALID_URL = 'https?://(?:www\\.)?abc\\.net\\.au/(?:news|btn)/(?:[^/]+/){1,4}(?P<id>\\d{5,})'
  285. _RETURN_TYPE = 'video'
  286. class ABCIViewIE(LazyLoadExtractor):
  287. _module = 'yt_dlp.extractor.abc'
  288. IE_NAME = 'abc.net.au:iview'
  289. _VALID_URL = 'https?://iview\\.abc\\.net\\.au/(?:[^/]+/)*video/(?P<id>[^/?#]+)'
  290. _RETURN_TYPE = 'video'
  291. class ABCIViewShowSeriesIE(LazyLoadExtractor):
  292. _module = 'yt_dlp.extractor.abc'
  293. IE_NAME = 'abc.net.au:iview:showseries'
  294. _VALID_URL = 'https?://iview\\.abc\\.net\\.au/show/(?P<id>[^/]+)(?:/series/\\d+)?$'
  295. _RETURN_TYPE = 'any'
  296. class AbcNewsIE(LazyLoadExtractor):
  297. _module = 'yt_dlp.extractor.abcnews'
  298. IE_NAME = 'abcnews'
  299. _VALID_URL = 'https?://abcnews\\.go\\.com/(?:[^/]+/)+(?P<display_id>[0-9a-z-]+)/story\\?id=(?P<id>\\d+)'
  300. _RETURN_TYPE = 'any'
  301. class AMPIE(LazyLoadExtractor):
  302. _module = 'yt_dlp.extractor.amp'
  303. IE_NAME = 'AMP'
  304. class AbcNewsVideoIE(AMPIE):
  305. _module = 'yt_dlp.extractor.abcnews'
  306. IE_NAME = 'abcnews:video'
  307. _VALID_URL = '(?x)\n https?://\n (?:\n abcnews\\.go\\.com/\n (?:\n (?:[^/]+/)*video/(?P<display_id>[0-9a-z-]+)-|\n video/(?:embed|itemfeed)\\?.*?\\bid=\n )|\n fivethirtyeight\\.abcnews\\.go\\.com/video/embed/\\d+/\n )\n (?P<id>\\d+)\n '
  308. _RETURN_TYPE = 'video'
  309. class ABCOTVSIE(LazyLoadExtractor):
  310. _module = 'yt_dlp.extractor.abcotvs'
  311. IE_NAME = 'abcotvs'
  312. _VALID_URL = 'https?://(?P<site>abc(?:7(?:news|ny|chicago)?|11|13|30)|6abc)\\.com(?:(?:/[^/]+)*/(?P<display_id>[^/]+))?/(?P<id>\\d+)'
  313. IE_DESC = 'ABC Owned Television Stations'
  314. _RETURN_TYPE = 'video'
  315. class ABCOTVSClipsIE(LazyLoadExtractor):
  316. _module = 'yt_dlp.extractor.abcotvs'
  317. IE_NAME = 'abcotvs:clips'
  318. _VALID_URL = 'https?://clips\\.abcotvs\\.com/(?:[^/]+/)*video/(?P<id>\\d+)'
  319. _RETURN_TYPE = 'video'
  320. class AbemaTVBaseIE(LazyLoadExtractor):
  321. _module = 'yt_dlp.extractor.abematv'
  322. IE_NAME = 'AbemaTVBase'
  323. _NETRC_MACHINE = 'abematv'
  324. class AbemaTVIE(AbemaTVBaseIE):
  325. _module = 'yt_dlp.extractor.abematv'
  326. IE_NAME = 'AbemaTV'
  327. _VALID_URL = 'https?://abema\\.tv/(?P<type>now-on-air|video/episode|channels/.+?/slots)/(?P<id>[^?/]+)'
  328. _NETRC_MACHINE = 'abematv'
  329. _RETURN_TYPE = 'video'
  330. class AbemaTVTitleIE(AbemaTVBaseIE):
  331. _module = 'yt_dlp.extractor.abematv'
  332. IE_NAME = 'AbemaTVTitle'
  333. _VALID_URL = 'https?://abema\\.tv/video/title/(?P<id>[^?/]+)'
  334. _NETRC_MACHINE = 'abematv'
  335. _RETURN_TYPE = 'playlist'
  336. class AcademicEarthCourseIE(LazyLoadExtractor):
  337. _module = 'yt_dlp.extractor.academicearth'
  338. IE_NAME = 'AcademicEarth:Course'
  339. _VALID_URL = 'https?://(?:www\\.)?academicearth\\.org/playlists/(?P<id>[^?#/]+)'
  340. _RETURN_TYPE = 'playlist'
  341. class ACastBaseIE(LazyLoadExtractor):
  342. _module = 'yt_dlp.extractor.acast'
  343. IE_NAME = 'ACastBase'
  344. class ACastChannelIE(ACastBaseIE):
  345. _module = 'yt_dlp.extractor.acast'
  346. IE_NAME = 'acast:channel'
  347. _VALID_URL = '(?x)\n https?://\n (?:\n (?:www\\.)?acast\\.com/|\n play\\.acast\\.com/s/\n )\n (?P<id>[^/#?]+)\n '
  348. _RETURN_TYPE = 'playlist'
  349. @classmethod
  350. def suitable(cls, url):
  351. return False if ACastIE.suitable(url) else super().suitable(url)
  352. class ACastIE(ACastBaseIE):
  353. _module = 'yt_dlp.extractor.acast'
  354. IE_NAME = 'acast'
  355. _VALID_URL = '(?x:\n https?://\n (?:\n (?:(?:embed|www)\\.)?acast\\.com/|\n play\\.acast\\.com/s/\n )\n (?P<channel>[^/]+)/(?P<id>[^/#?"]+)\n )'
  356. _RETURN_TYPE = 'video'
  357. class AcFunVideoBaseIE(LazyLoadExtractor):
  358. _module = 'yt_dlp.extractor.acfun'
  359. IE_NAME = 'AcFunVideoBase'
  360. class AcFunBangumiIE(AcFunVideoBaseIE):
  361. _module = 'yt_dlp.extractor.acfun'
  362. IE_NAME = 'AcFunBangumi'
  363. _VALID_URL = 'https?://www\\.acfun\\.cn/bangumi/(?P<id>aa[_\\d]+)'
  364. _RETURN_TYPE = 'video'
  365. class AcFunVideoIE(AcFunVideoBaseIE):
  366. _module = 'yt_dlp.extractor.acfun'
  367. IE_NAME = 'AcFunVideo'
  368. _VALID_URL = 'https?://www\\.acfun\\.cn/v/ac(?P<id>[_\\d]+)'
  369. _RETURN_TYPE = 'video'
  370. class ADNBaseIE(LazyLoadExtractor):
  371. _module = 'yt_dlp.extractor.adn'
  372. IE_NAME = 'ADNBase'
  373. IE_DESC = 'Animation Digital Network'
  374. _NETRC_MACHINE = 'animationdigitalnetwork'
  375. class ADNIE(ADNBaseIE):
  376. _module = 'yt_dlp.extractor.adn'
  377. IE_NAME = 'ADN'
  378. _VALID_URL = 'https?://(?:www\\.)?animationdigitalnetwork\\.com/(?:(?P<lang>de)/)?video/[^/?#]+/(?P<id>\\d+)'
  379. IE_DESC = 'Animation Digital Network'
  380. _NETRC_MACHINE = 'animationdigitalnetwork'
  381. _RETURN_TYPE = 'video'
  382. class ADNSeasonIE(ADNBaseIE):
  383. _module = 'yt_dlp.extractor.adn'
  384. IE_NAME = 'ADNSeason'
  385. _VALID_URL = 'https?://(?:www\\.)?animationdigitalnetwork\\.com/(?:(?P<lang>de)/)?video/(?P<id>\\d+)[^/?#]*/?(?:$|[#?])'
  386. IE_DESC = 'Animation Digital Network'
  387. _NETRC_MACHINE = 'animationdigitalnetwork'
  388. _RETURN_TYPE = 'playlist'
  389. class AdobeConnectIE(LazyLoadExtractor):
  390. _module = 'yt_dlp.extractor.adobeconnect'
  391. IE_NAME = 'AdobeConnect'
  392. _VALID_URL = 'https?://\\w+\\.adobeconnect\\.com/(?P<id>[\\w-]+)'
  393. class AdobeTVBaseIE(LazyLoadExtractor):
  394. _module = 'yt_dlp.extractor.adobetv'
  395. IE_NAME = 'AdobeTVBase'
  396. class AdobeTVPlaylistBaseIE(AdobeTVBaseIE):
  397. _module = 'yt_dlp.extractor.adobetv'
  398. IE_NAME = 'AdobeTVPlaylistBase'
  399. class AdobeTVChannelIE(AdobeTVPlaylistBaseIE):
  400. _module = 'yt_dlp.extractor.adobetv'
  401. IE_NAME = 'adobetv:channel'
  402. _VALID_URL = 'https?://tv\\.adobe\\.com/(?:(?P<language>fr|de|es|jp)/)?channel/(?P<id>[^/]+)(?:/(?P<category_urlname>[^/]+))?'
  403. _RETURN_TYPE = 'playlist'
  404. class AdobeTVEmbedIE(AdobeTVBaseIE):
  405. _module = 'yt_dlp.extractor.adobetv'
  406. IE_NAME = 'adobetv:embed'
  407. _VALID_URL = 'https?://tv\\.adobe\\.com/embed/\\d+/(?P<id>\\d+)'
  408. _RETURN_TYPE = 'video'
  409. class AdobeTVIE(AdobeTVBaseIE):
  410. _module = 'yt_dlp.extractor.adobetv'
  411. IE_NAME = 'adobetv'
  412. _VALID_URL = 'https?://tv\\.adobe\\.com/(?:(?P<language>fr|de|es|jp)/)?watch/(?P<show_urlname>[^/]+)/(?P<id>[^/]+)'
  413. _RETURN_TYPE = 'video'
  414. class AdobeTVShowIE(AdobeTVPlaylistBaseIE):
  415. _module = 'yt_dlp.extractor.adobetv'
  416. IE_NAME = 'adobetv:show'
  417. _VALID_URL = 'https?://tv\\.adobe\\.com/(?:(?P<language>fr|de|es|jp)/)?show/(?P<id>[^/]+)'
  418. _RETURN_TYPE = 'playlist'
  419. class AdobeTVVideoIE(AdobeTVBaseIE):
  420. _module = 'yt_dlp.extractor.adobetv'
  421. IE_NAME = 'adobetv:video'
  422. _VALID_URL = 'https?://video\\.tv\\.adobe\\.com/v/(?P<id>\\d+)'
  423. _RETURN_TYPE = 'video'
  424. class AdobePassIE(LazyLoadExtractor):
  425. _module = 'yt_dlp.extractor.adobepass'
  426. IE_NAME = 'AdobePass'
  427. class TurnerBaseIE(AdobePassIE):
  428. _module = 'yt_dlp.extractor.turner'
  429. IE_NAME = 'TurnerBase'
  430. class AdultSwimIE(TurnerBaseIE):
  431. _module = 'yt_dlp.extractor.adultswim'
  432. IE_NAME = 'AdultSwim'
  433. _VALID_URL = 'https?://(?:www\\.)?adultswim\\.com/videos/(?P<show_path>[^/?#]+)(?:/(?P<episode_path>[^/?#]+))?'
  434. _RETURN_TYPE = 'any'
  435. class AeonCoIE(LazyLoadExtractor):
  436. _module = 'yt_dlp.extractor.aeonco'
  437. IE_NAME = 'AeonCo'
  438. _VALID_URL = 'https?://(?:www\\.)?aeon\\.co/videos/(?P<id>[^/?]+)'
  439. _RETURN_TYPE = 'video'
  440. class AfreecaTVBaseIE(LazyLoadExtractor):
  441. _module = 'yt_dlp.extractor.afreecatv'
  442. IE_NAME = 'AfreecaTVBase'
  443. _NETRC_MACHINE = 'afreecatv'
  444. class AfreecaTVCatchStoryIE(AfreecaTVBaseIE):
  445. _module = 'yt_dlp.extractor.afreecatv'
  446. IE_NAME = 'soop:catchstory'
  447. _VALID_URL = 'https?://vod\\.(?:sooplive\\.co\\.kr|afreecatv\\.com)/player/(?P<id>\\d+)/catchstory'
  448. IE_DESC = 'sooplive.co.kr catch story'
  449. _NETRC_MACHINE = 'afreecatv'
  450. _RETURN_TYPE = 'playlist'
  451. class AfreecaTVIE(AfreecaTVBaseIE):
  452. _module = 'yt_dlp.extractor.afreecatv'
  453. IE_NAME = 'soop'
  454. _VALID_URL = 'https?://vod\\.(?:sooplive\\.co\\.kr|afreecatv\\.com)/(?:PLAYER/STATION|player)/(?P<id>\\d+)/?(?:$|[?#&])'
  455. IE_DESC = 'sooplive.co.kr'
  456. _NETRC_MACHINE = 'afreecatv'
  457. _RETURN_TYPE = 'video'
  458. class AfreecaTVLiveIE(AfreecaTVBaseIE):
  459. _module = 'yt_dlp.extractor.afreecatv'
  460. IE_NAME = 'soop:live'
  461. _VALID_URL = 'https?://play\\.(?:sooplive\\.co\\.kr|afreecatv\\.com)/(?P<id>[^/?#]+)(?:/(?P<bno>\\d+))?'
  462. IE_DESC = 'sooplive.co.kr livestreams'
  463. _NETRC_MACHINE = 'afreecatv'
  464. _RETURN_TYPE = 'video'
  465. class AfreecaTVUserIE(AfreecaTVBaseIE):
  466. _module = 'yt_dlp.extractor.afreecatv'
  467. IE_NAME = 'soop:user'
  468. _VALID_URL = 'https?://ch\\.(?:sooplive\\.co\\.kr|afreecatv\\.com)/(?P<id>[^/?#]+)/vods/?(?P<slug_type>[^/?#]+)?'
  469. _NETRC_MACHINE = 'afreecatv'
  470. _RETURN_TYPE = 'playlist'
  471. class TokFMAuditionIE(LazyLoadExtractor):
  472. _module = 'yt_dlp.extractor.agora'
  473. IE_NAME = 'tokfm:audition'
  474. _VALID_URL = '(?:https?://audycje\\.tokfm\\.pl/audycja/|tokfm:audition:)(?P<id>\\d+),?'
  475. _RETURN_TYPE = 'playlist'
  476. class TokFMPodcastIE(LazyLoadExtractor):
  477. _module = 'yt_dlp.extractor.agora'
  478. IE_NAME = 'tokfm:podcast'
  479. _VALID_URL = '(?:https?://audycje\\.tokfm\\.pl/podcast/|tokfm:podcast:)(?P<id>\\d+),?'
  480. _RETURN_TYPE = 'video'
  481. class WyborczaPodcastIE(LazyLoadExtractor):
  482. _module = 'yt_dlp.extractor.agora'
  483. IE_NAME = 'WyborczaPodcast'
  484. _VALID_URL = '(?x)\n https?://(?:www\\.)?(?:\n wyborcza\\.pl/podcast(?:/0,172673\\.html)?|\n wysokieobcasy\\.pl/wysokie-obcasy/0,176631\\.html\n )(?:\\?(?:[^&#]+?&)*podcast=(?P<id>\\d+))?\n '
  485. _RETURN_TYPE = 'any'
  486. class WyborczaVideoIE(LazyLoadExtractor):
  487. _module = 'yt_dlp.extractor.agora'
  488. IE_NAME = 'wyborcza:video'
  489. _VALID_URL = '(?:wyborcza:video:|https?://wyborcza\\.pl/(?:api-)?video/)(?P<id>\\d+)'
  490. _RETURN_TYPE = 'video'
  491. class AirTVIE(LazyLoadExtractor):
  492. _module = 'yt_dlp.extractor.airtv'
  493. IE_NAME = 'AirTV'
  494. _VALID_URL = 'https?://www\\.air\\.tv/watch\\?v=(?P<id>\\w+)'
  495. _RETURN_TYPE = 'video'
  496. class AitubeKZVideoIE(LazyLoadExtractor):
  497. _module = 'yt_dlp.extractor.aitube'
  498. IE_NAME = 'AitubeKZVideo'
  499. _VALID_URL = 'https?://aitube\\.kz/(?:video|embed/)\\?(?:[^\\?]+)?id=(?P<id>[\\w-]+)'
  500. _RETURN_TYPE = 'video'
  501. class AliExpressLiveIE(LazyLoadExtractor):
  502. _module = 'yt_dlp.extractor.aliexpress'
  503. IE_NAME = 'AliExpressLive'
  504. _VALID_URL = 'https?://live\\.aliexpress\\.com/live/(?P<id>\\d+)'
  505. _RETURN_TYPE = 'video'
  506. class AlJazeeraIE(LazyLoadExtractor):
  507. _module = 'yt_dlp.extractor.aljazeera'
  508. IE_NAME = 'AlJazeera'
  509. _VALID_URL = 'https?://(?P<base>\\w+\\.aljazeera\\.\\w+)/(?P<type>programs?/[^/]+|(?:feature|video|new)s)?/\\d{4}/\\d{1,2}/\\d{1,2}/(?P<id>[^/?&#]+)'
  510. _RETURN_TYPE = 'video'
  511. class AllocineIE(LazyLoadExtractor):
  512. _module = 'yt_dlp.extractor.allocine'
  513. IE_NAME = 'Allocine'
  514. _VALID_URL = 'https?://(?:www\\.)?allocine\\.fr/(?:article|video|film)/(?:fichearticle_gen_carticle=|player_gen_cmedia=|fichefilm_gen_cfilm=|video-)(?P<id>[0-9]+)(?:\\.html)?'
  515. _RETURN_TYPE = 'video'
  516. class AllstarBaseIE(LazyLoadExtractor):
  517. _module = 'yt_dlp.extractor.allstar'
  518. IE_NAME = 'AllstarBase'
  519. class AllstarIE(AllstarBaseIE):
  520. _module = 'yt_dlp.extractor.allstar'
  521. IE_NAME = 'Allstar'
  522. _VALID_URL = 'https?://(?:www\\.)?allstar\\.gg/(?P<type>(?:clip|montage))\\?(?P=type)=(?P<id>[^/?#&]+)'
  523. _RETURN_TYPE = 'video'
  524. class AllstarProfileIE(AllstarBaseIE):
  525. _module = 'yt_dlp.extractor.allstar'
  526. IE_NAME = 'AllstarProfile'
  527. _VALID_URL = 'https?://(?:www\\.)?allstar\\.gg/(?:profile\\?user=|u/)(?P<id>[^/?#&]+)'
  528. _RETURN_TYPE = 'playlist'
  529. class AlphaPornoIE(LazyLoadExtractor):
  530. _module = 'yt_dlp.extractor.alphaporno'
  531. IE_NAME = 'AlphaPorno'
  532. _VALID_URL = 'https?://(?:www\\.)?alphaporno\\.com/videos/(?P<id>[^/]+)'
  533. age_limit = 18
  534. _RETURN_TYPE = 'video'
  535. class Alsace20TVBaseIE(LazyLoadExtractor):
  536. _module = 'yt_dlp.extractor.alsace20tv'
  537. IE_NAME = 'Alsace20TVBase'
  538. class Alsace20TVEmbedIE(Alsace20TVBaseIE):
  539. _module = 'yt_dlp.extractor.alsace20tv'
  540. IE_NAME = 'Alsace20TVEmbed'
  541. _VALID_URL = 'https?://(?:www\\.)?alsace20\\.tv/emb/(?P<id>[\\w]+)'
  542. _RETURN_TYPE = 'video'
  543. class Alsace20TVIE(Alsace20TVBaseIE):
  544. _module = 'yt_dlp.extractor.alsace20tv'
  545. IE_NAME = 'Alsace20TV'
  546. _VALID_URL = 'https?://(?:www\\.)?alsace20\\.tv/(?:[\\w-]+/)+[\\w-]+-(?P<id>[\\w]+)'
  547. _RETURN_TYPE = 'video'
  548. class AltCensoredChannelIE(LazyLoadExtractor):
  549. _module = 'yt_dlp.extractor.altcensored'
  550. IE_NAME = 'altcensored:channel'
  551. _VALID_URL = 'https?://(?:www\\.)?altcensored\\.com/channel/(?!page|table)(?P<id>[^/?#]+)'
  552. _RETURN_TYPE = 'playlist'
  553. class AltCensoredIE(LazyLoadExtractor):
  554. _module = 'yt_dlp.extractor.altcensored'
  555. IE_NAME = 'altcensored'
  556. _VALID_URL = 'https?://(?:www\\.)?altcensored\\.com/(?:watch\\?v=|embed/)(?P<id>[^/?#]+)'
  557. _RETURN_TYPE = 'video'
  558. class AluraIE(LazyLoadExtractor):
  559. _module = 'yt_dlp.extractor.alura'
  560. IE_NAME = 'Alura'
  561. _VALID_URL = 'https?://(?:cursos\\.)?alura\\.com\\.br/course/(?P<course_name>[^/]+)/task/(?P<id>\\d+)'
  562. _NETRC_MACHINE = 'alura'
  563. _RETURN_TYPE = 'video'
  564. class AluraCourseIE(AluraIE):
  565. _module = 'yt_dlp.extractor.alura'
  566. IE_NAME = 'AluraCourse'
  567. _VALID_URL = 'https?://(?:cursos\\.)?alura\\.com\\.br/course/(?P<id>[^/]+)'
  568. _NETRC_MACHINE = 'aluracourse'
  569. @classmethod
  570. def suitable(cls, url):
  571. return False if AluraIE.suitable(url) else super().suitable(url)
  572. class AmadeusTVIE(LazyLoadExtractor):
  573. _module = 'yt_dlp.extractor.amadeustv'
  574. IE_NAME = 'AmadeusTV'
  575. _VALID_URL = 'https?://(?:www\\.)?amadeus\\.tv/library/(?P<id>[\\da-f]+)'
  576. _RETURN_TYPE = 'video'
  577. class AmaraIE(LazyLoadExtractor):
  578. _module = 'yt_dlp.extractor.amara'
  579. IE_NAME = 'Amara'
  580. _VALID_URL = 'https?://(?:www\\.)?amara\\.org/(?:\\w+/)?videos/(?P<id>\\w+)'
  581. _RETURN_TYPE = 'video'
  582. class AmazonReviewsIE(LazyLoadExtractor):
  583. _module = 'yt_dlp.extractor.amazon'
  584. IE_NAME = 'AmazonReviews'
  585. _VALID_URL = 'https?://(?:www\\.)?amazon\\.(?:[a-z]{2,3})(?:\\.[a-z]{2})?/gp/customer-reviews/(?P<id>[^/&#$?]+)'
  586. _RETURN_TYPE = 'video'
  587. class AmazonStoreIE(LazyLoadExtractor):
  588. _module = 'yt_dlp.extractor.amazon'
  589. IE_NAME = 'AmazonStore'
  590. _VALID_URL = 'https?://(?:www\\.)?amazon\\.(?:[a-z]{2,3})(?:\\.[a-z]{2})?/(?:[^/]+/)?(?:dp|gp/product)/(?P<id>[^/&#$?]+)'
  591. _RETURN_TYPE = 'playlist'
  592. class AmazonMiniTVBaseIE(LazyLoadExtractor):
  593. _module = 'yt_dlp.extractor.amazonminitv'
  594. IE_NAME = 'AmazonMiniTVBase'
  595. class AmazonMiniTVIE(AmazonMiniTVBaseIE):
  596. _module = 'yt_dlp.extractor.amazonminitv'
  597. IE_NAME = 'AmazonMiniTV'
  598. _VALID_URL = '(?:https?://(?:www\\.)?amazon\\.in/minitv/tp/|amazonminitv:(?:amzn1\\.dv\\.gti\\.)?)(?P<id>[a-f0-9-]+)'
  599. _RETURN_TYPE = 'video'
  600. class AmazonMiniTVSeasonIE(AmazonMiniTVBaseIE):
  601. _module = 'yt_dlp.extractor.amazonminitv'
  602. IE_NAME = 'amazonminitv:season'
  603. _VALID_URL = 'amazonminitv:season:(?:amzn1\\.dv\\.gti\\.)?(?P<id>[a-f0-9-]+)'
  604. IE_DESC = 'Amazon MiniTV Season, "minitv:season:" prefix'
  605. _RETURN_TYPE = 'playlist'
  606. class AmazonMiniTVSeriesIE(AmazonMiniTVBaseIE):
  607. _module = 'yt_dlp.extractor.amazonminitv'
  608. IE_NAME = 'amazonminitv:series'
  609. _VALID_URL = 'amazonminitv:series:(?:amzn1\\.dv\\.gti\\.)?(?P<id>[a-f0-9-]+)'
  610. IE_DESC = 'Amazon MiniTV Series, "minitv:series:" prefix'
  611. _RETURN_TYPE = 'playlist'
  612. class AmericasTestKitchenIE(LazyLoadExtractor):
  613. _module = 'yt_dlp.extractor.americastestkitchen'
  614. IE_NAME = 'AmericasTestKitchen'
  615. _VALID_URL = 'https?://(?:www\\.)?(?:americastestkitchen|cooks(?:country|illustrated))\\.com/(?:cooks(?:country|illustrated)/)?(?P<resource_type>episode|videos)/(?P<id>\\d+)'
  616. _RETURN_TYPE = 'video'
  617. class AmericasTestKitchenSeasonIE(LazyLoadExtractor):
  618. _module = 'yt_dlp.extractor.americastestkitchen'
  619. IE_NAME = 'AmericasTestKitchenSeason'
  620. _VALID_URL = 'https?://(?:www\\.)?(?P<show>americastestkitchen|(?P<cooks>cooks(?:country|illustrated)))\\.com(?:(?:/(?P<show2>cooks(?:country|illustrated)))?(?:/?$|(?<!ated)(?<!ated\\.com)/episodes/browse/season_(?P<season>\\d+)))'
  621. _RETURN_TYPE = 'playlist'
  622. class AnchorFMEpisodeIE(LazyLoadExtractor):
  623. _module = 'yt_dlp.extractor.anchorfm'
  624. IE_NAME = 'AnchorFMEpisode'
  625. _VALID_URL = 'https?://anchor\\.fm/(?P<channel_name>\\w+)/(?:embed/)?episodes/[\\w-]+-(?P<episode_id>\\w+)'
  626. _RETURN_TYPE = 'video'
  627. class AngelIE(LazyLoadExtractor):
  628. _module = 'yt_dlp.extractor.angel'
  629. IE_NAME = 'Angel'
  630. _VALID_URL = 'https?://(?:www\\.)?angel\\.com/watch/(?P<series>[^/?#]+)/episode/(?P<id>[\\w-]+)/season-(?P<season_number>\\d+)/episode-(?P<episode_number>\\d+)/(?P<title>[^/?#]+)'
  631. _RETURN_TYPE = 'video'
  632. class AntennaBaseIE(LazyLoadExtractor):
  633. _module = 'yt_dlp.extractor.antenna'
  634. IE_NAME = 'AntennaBase'
  635. class Ant1NewsGrArticleIE(AntennaBaseIE):
  636. _module = 'yt_dlp.extractor.antenna'
  637. IE_NAME = 'ant1newsgr:article'
  638. _VALID_URL = 'https?://(?:www\\.)?ant1news\\.gr/[^/]+/article/(?P<id>\\d+)/'
  639. IE_DESC = 'ant1news.gr articles'
  640. _RETURN_TYPE = 'any'
  641. class Ant1NewsGrEmbedIE(AntennaBaseIE):
  642. _module = 'yt_dlp.extractor.antenna'
  643. IE_NAME = 'ant1newsgr:embed'
  644. _VALID_URL = '(?:https?:)?//(?:[a-zA-Z0-9\\-]+\\.)?(?:antenna|ant1news)\\.gr/templates/pages/player\\?([^#]+&)?cid=(?P<id>[^#&]+)'
  645. IE_DESC = 'ant1news.gr embedded videos'
  646. _RETURN_TYPE = 'video'
  647. class AntennaGrWatchIE(AntennaBaseIE):
  648. _module = 'yt_dlp.extractor.antenna'
  649. IE_NAME = 'antenna:watch'
  650. _VALID_URL = 'https?://(?P<netloc>(?:www\\.)?(?:antenna|ant1news)\\.gr)/watch/(?P<id>\\d+)/'
  651. IE_DESC = 'antenna.gr and ant1news.gr videos'
  652. _RETURN_TYPE = 'video'
  653. class AnvatoIE(LazyLoadExtractor):
  654. _module = 'yt_dlp.extractor.anvato'
  655. IE_NAME = 'Anvato'
  656. _VALID_URL = 'anvato:(?P<access_key_or_mcp>[^:]+):(?P<id>\\d+)'
  657. _RETURN_TYPE = 'video'
  658. class APAIE(LazyLoadExtractor):
  659. _module = 'yt_dlp.extractor.apa'
  660. IE_NAME = 'APA'
  661. _VALID_URL = '(?P<base_url>https?://[^/]+\\.apa\\.at)/embed/(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  662. _RETURN_TYPE = 'video'
  663. class AparatIE(LazyLoadExtractor):
  664. _module = 'yt_dlp.extractor.aparat'
  665. IE_NAME = 'Aparat'
  666. _VALID_URL = 'https?://(?:www\\.)?aparat\\.com/(?:v/|video/video/embed/videohash/)(?P<id>[a-zA-Z0-9]+)'
  667. _RETURN_TYPE = 'video'
  668. class AppleConnectIE(LazyLoadExtractor):
  669. _module = 'yt_dlp.extractor.appleconnect'
  670. IE_NAME = 'AppleConnect'
  671. _VALID_URL = 'https?://itunes\\.apple\\.com/\\w{0,2}/?post/(?:id)?sa\\.(?P<id>[\\w-]+)'
  672. _RETURN_TYPE = 'video'
  673. class ApplePodcastsIE(LazyLoadExtractor):
  674. _module = 'yt_dlp.extractor.applepodcasts'
  675. IE_NAME = 'ApplePodcasts'
  676. _VALID_URL = 'https?://podcasts\\.apple\\.com/(?:[^/]+/)?podcast(?:/[^/]+){1,2}.*?\\bi=(?P<id>\\d+)'
  677. _RETURN_TYPE = 'video'
  678. class AppleTrailersIE(LazyLoadExtractor):
  679. _module = 'yt_dlp.extractor.appletrailers'
  680. IE_NAME = 'appletrailers'
  681. _VALID_URL = 'https?://(?:www\\.|movie)?trailers\\.apple\\.com/(?:trailers|ca)/(?P<company>[^/]+)/(?P<movie>[^/]+)'
  682. _RETURN_TYPE = 'playlist'
  683. class AppleTrailersSectionIE(LazyLoadExtractor):
  684. _module = 'yt_dlp.extractor.appletrailers'
  685. IE_NAME = 'appletrailers:section'
  686. _VALID_URL = 'https?://(?:www\\.)?trailers\\.apple\\.com/#section=(?P<id>justadded|exclusive|justhd|mostpopular|moviestudios)'
  687. _RETURN_TYPE = 'playlist'
  688. class ArchiveOrgIE(LazyLoadExtractor):
  689. _module = 'yt_dlp.extractor.archiveorg'
  690. IE_NAME = 'archive.org'
  691. _VALID_URL = 'https?://(?:www\\.)?archive\\.org/(?:details|embed)/(?P<id>[^?#]+)(?:[?].*)?$'
  692. IE_DESC = 'archive.org video and audio'
  693. _RETURN_TYPE = 'any'
  694. class YoutubeWebArchiveIE(LazyLoadExtractor):
  695. _module = 'yt_dlp.extractor.archiveorg'
  696. IE_NAME = 'web.archive:youtube'
  697. _VALID_URL = '(?x)(?:(?P<prefix>ytarchive:)|\n (?:https?://)?web\\.archive\\.org/\n (?:web/)?(?:(?P<date>[0-9]{14})?[0-9A-Za-z_*]*/)? # /web and the version index is optional\n (?:https?(?::|%3[Aa])//)?(?:\n (?:\\w+\\.)?youtube\\.com(?::(?:80|443))?/watch(?:\\.php)?(?:\\?|%3[fF])(?:[^\\#]+(?:&|%26))?v(?:=|%3[dD]) # Youtube URL\n |(?:wayback-fakeurl\\.archive\\.org/yt/) # Or the internal fake url\n )\n )(?P<id>[0-9A-Za-z_-]{11})\n (?(prefix)\n (?::(?P<date2>[0-9]{14}))?$|\n (?:%26|[#&]|$)\n )'
  698. IE_DESC = 'web.archive.org saved youtube videos, "ytarchive:" prefix'
  699. _RETURN_TYPE = 'video'
  700. class ArcPublishingIE(LazyLoadExtractor):
  701. _module = 'yt_dlp.extractor.arcpublishing'
  702. IE_NAME = 'ArcPublishing'
  703. _VALID_URL = 'arcpublishing:(?P<org>[a-z]+):(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})'
  704. class ARDIE(LazyLoadExtractor):
  705. _module = 'yt_dlp.extractor.ard'
  706. IE_NAME = 'ARD'
  707. _VALID_URL = '(?P<mainurl>https?://(?:www\\.)?daserste\\.de/(?:[^/?#&]+/)+(?P<id>[^/?#&]+))\\.html'
  708. _RETURN_TYPE = 'video'
  709. class ARDBetaMediathekIE(LazyLoadExtractor):
  710. _module = 'yt_dlp.extractor.ard'
  711. IE_NAME = 'ARDMediathek'
  712. _VALID_URL = '(?x)https?://\n (?:(?:beta|www)\\.)?ardmediathek\\.de/\n (?:[^/]+/)?\n (?:player|live|video)/\n (?:[^?#]+/)?\n (?P<id>[a-zA-Z0-9]+)\n /?(?:[?#]|$)'
  713. _RETURN_TYPE = 'video'
  714. class ARDMediathekCollectionIE(LazyLoadExtractor):
  715. _module = 'yt_dlp.extractor.ard'
  716. IE_NAME = 'ARDMediathekCollection'
  717. _VALID_URL = '(?x)https?://\n (?:(?:beta|www)\\.)?ardmediathek\\.de/\n (?:[^/?#]+/)?\n (?P<playlist>sendung|serie|sammlung)/\n (?:(?P<display_id>[^?#]+?)/)?\n (?P<id>[a-zA-Z0-9]+)\n (?:/(?P<season>\\d+)(?:/(?P<version>OV|AD))?)?/?(?:[?#]|$)'
  718. _RETURN_TYPE = 'playlist'
  719. class ArkenaIE(LazyLoadExtractor):
  720. _module = 'yt_dlp.extractor.arkena'
  721. IE_NAME = 'Arkena'
  722. _VALID_URL = '(?x)\n https?://\n (?:\n video\\.(?:arkena|qbrick)\\.com/play2/embed/player\\?|\n play\\.arkena\\.com/(?:config|embed)/avp/v\\d/player/media/(?P<id>[^/]+)/[^/]+/(?P<account_id>\\d+)\n )\n '
  723. _RETURN_TYPE = 'video'
  724. class ArnesIE(LazyLoadExtractor):
  725. _module = 'yt_dlp.extractor.arnes'
  726. IE_NAME = 'video.arnes.si'
  727. _VALID_URL = 'https?://video\\.arnes\\.si/(?:[a-z]{2}/)?(?:watch|embed|api/(?:asset|public/video))/(?P<id>[0-9a-zA-Z]{12})'
  728. IE_DESC = 'Arnes Video'
  729. _RETURN_TYPE = 'video'
  730. class Art19IE(LazyLoadExtractor):
  731. _module = 'yt_dlp.extractor.art19'
  732. IE_NAME = 'Art19'
  733. _VALID_URL = ['https?://(?:www\\.)?art19\\.com/shows/[^/#?]+/episodes/(?P<id>[\\da-f]{8}-?[\\da-f]{4}-?[\\da-f]{4}-?[\\da-f]{4}-?[\\da-f]{12})', 'https?://rss\\.art19\\.com/episodes/(?P<id>[\\da-f]{8}-?[\\da-f]{4}-?[\\da-f]{4}-?[\\da-f]{4}-?[\\da-f]{12})\\.mp3']
  734. _RETURN_TYPE = 'video'
  735. class Art19ShowIE(LazyLoadExtractor):
  736. _module = 'yt_dlp.extractor.art19'
  737. IE_NAME = 'Art19Show'
  738. _VALID_URL = ['https?://(?:www\\.)?art19\\.com/shows/(?P<id>[\\w-]+)(?:/embed)?/?(?:$|[#?])', 'https?://rss\\.art19\\.com/(?P<id>[\\w-]+)/?(?:$|[#?])']
  739. _RETURN_TYPE = 'playlist'
  740. class ArteTVBaseIE(LazyLoadExtractor):
  741. _module = 'yt_dlp.extractor.arte'
  742. IE_NAME = 'ArteTVBase'
  743. class ArteTVCategoryIE(ArteTVBaseIE):
  744. _module = 'yt_dlp.extractor.arte'
  745. IE_NAME = 'ArteTVCategory'
  746. _VALID_URL = 'https?://(?:www\\.)?arte\\.tv/(?P<lang>fr|de|en|es|it|pl)/videos/(?P<id>[\\w-]+(?:/[\\w-]+)*)/?\\s*$'
  747. _RETURN_TYPE = 'playlist'
  748. @classmethod
  749. def suitable(cls, url):
  750. return (
  751. not any(ie.suitable(url) for ie in (ArteTVIE, ArteTVPlaylistIE))
  752. and super().suitable(url))
  753. class ArteTVEmbedIE(LazyLoadExtractor):
  754. _module = 'yt_dlp.extractor.arte'
  755. IE_NAME = 'ArteTVEmbed'
  756. _VALID_URL = 'https?://(?:www\\.)?arte\\.tv/player/v\\d+/index\\.php\\?.*?\\bjson_url=.+'
  757. _RETURN_TYPE = 'video'
  758. class ArteTVIE(ArteTVBaseIE):
  759. _module = 'yt_dlp.extractor.arte'
  760. IE_NAME = 'ArteTV'
  761. _VALID_URL = '(?x)\n (?:https?://\n (?:\n (?:www\\.)?arte\\.tv/(?P<lang>fr|de|en|es|it|pl)/videos|\n api\\.arte\\.tv/api/player/v\\d+/config/(?P<lang_2>fr|de|en|es|it|pl)\n )\n |arte://program)\n /(?P<id>\\d{6}-\\d{3}-[AF]|LIVE)\n '
  762. _RETURN_TYPE = 'video'
  763. class ArteTVPlaylistIE(ArteTVBaseIE):
  764. _module = 'yt_dlp.extractor.arte'
  765. IE_NAME = 'ArteTVPlaylist'
  766. _VALID_URL = 'https?://(?:www\\.)?arte\\.tv/(?P<lang>fr|de|en|es|it|pl)/videos/(?P<id>RC-\\d{6})'
  767. _RETURN_TYPE = 'playlist'
  768. class AsobiChannelBaseIE(LazyLoadExtractor):
  769. _module = 'yt_dlp.extractor.asobichannel'
  770. IE_NAME = 'AsobiChannelBase'
  771. class AsobiChannelIE(AsobiChannelBaseIE):
  772. _module = 'yt_dlp.extractor.asobichannel'
  773. IE_NAME = 'asobichannel'
  774. _VALID_URL = 'https?://asobichannel\\.asobistore\\.jp/watch/(?P<id>[\\w-]+)'
  775. IE_DESC = 'ASOBI CHANNEL'
  776. _RETURN_TYPE = 'video'
  777. class AsobiChannelTagURLIE(AsobiChannelBaseIE):
  778. _module = 'yt_dlp.extractor.asobichannel'
  779. IE_NAME = 'asobichannel:tag'
  780. _VALID_URL = 'https?://asobichannel\\.asobistore\\.jp/tag/(?P<id>[a-z0-9-_]+)'
  781. IE_DESC = 'ASOBI CHANNEL'
  782. _RETURN_TYPE = 'playlist'
  783. class AsobiStageIE(LazyLoadExtractor):
  784. _module = 'yt_dlp.extractor.asobistage'
  785. IE_NAME = 'AsobiStage'
  786. _VALID_URL = 'https?://asobistage\\.asobistore\\.jp/event/(?P<id>(?P<event>\\w+)/(?P<type>archive|player)/(?P<slug>\\w+))(?:[?#]|$)'
  787. IE_DESC = 'ASOBISTAGE (アソビステージ)'
  788. _RETURN_TYPE = 'playlist'
  789. class AtresPlayerIE(LazyLoadExtractor):
  790. _module = 'yt_dlp.extractor.atresplayer'
  791. IE_NAME = 'AtresPlayer'
  792. _VALID_URL = 'https?://(?:www\\.)?atresplayer\\.com/[^/]+/[^/]+/[^/]+/[^/]+/(?P<display_id>.+?)_(?P<id>[0-9a-f]{24})'
  793. _NETRC_MACHINE = 'atresplayer'
  794. _RETURN_TYPE = 'video'
  795. class AtScaleConfEventIE(LazyLoadExtractor):
  796. _module = 'yt_dlp.extractor.atscaleconf'
  797. IE_NAME = 'AtScaleConfEvent'
  798. _VALID_URL = 'https?://(?:www\\.)?atscaleconference\\.com/events/(?P<id>[^/&$?]+)'
  799. _RETURN_TYPE = 'playlist'
  800. class ATVAtIE(LazyLoadExtractor):
  801. _module = 'yt_dlp.extractor.atvat'
  802. IE_NAME = 'ATVAt'
  803. _VALID_URL = 'https?://(?:www\\.)?atv\\.at/tv/(?:[^/]+/){2,3}(?P<id>.*)'
  804. _RETURN_TYPE = 'video'
  805. class AudiMediaIE(LazyLoadExtractor):
  806. _module = 'yt_dlp.extractor.audimedia'
  807. IE_NAME = 'AudiMedia'
  808. _VALID_URL = 'https?://(?:www\\.)?audi-mediacenter\\.com/(?:en|de)/audimediatv/(?:video/)?(?P<id>[^/?#]+)'
  809. _RETURN_TYPE = 'video'
  810. class AudioBoomIE(LazyLoadExtractor):
  811. _module = 'yt_dlp.extractor.audioboom'
  812. IE_NAME = 'AudioBoom'
  813. _VALID_URL = 'https?://(?:www\\.)?audioboom\\.com/(?:boos|posts)/(?P<id>[0-9]+)'
  814. _RETURN_TYPE = 'video'
  815. class AudiodraftBaseIE(LazyLoadExtractor):
  816. _module = 'yt_dlp.extractor.audiodraft'
  817. IE_NAME = 'AudiodraftBase'
  818. class AudiodraftCustomIE(AudiodraftBaseIE):
  819. _module = 'yt_dlp.extractor.audiodraft'
  820. IE_NAME = 'Audiodraft:custom'
  821. _VALID_URL = 'https?://(?:[-\\w]+)\\.audiodraft\\.com/entry/(?P<id>\\d+)'
  822. _RETURN_TYPE = 'video'
  823. class AudiodraftGenericIE(AudiodraftBaseIE):
  824. _module = 'yt_dlp.extractor.audiodraft'
  825. IE_NAME = 'Audiodraft:generic'
  826. _VALID_URL = 'https?://www\\.audiodraft\\.com/contests/[^/#]+#entries&eid=(?P<id>\\d+)'
  827. _RETURN_TYPE = 'video'
  828. class AudiomackAlbumIE(LazyLoadExtractor):
  829. _module = 'yt_dlp.extractor.audiomack'
  830. IE_NAME = 'audiomack:album'
  831. _VALID_URL = 'https?://(?:www\\.)?audiomack\\.com/(?:album/|(?=.+/album/))(?P<id>[\\w/-]+)'
  832. _RETURN_TYPE = 'playlist'
  833. class AudiomackIE(LazyLoadExtractor):
  834. _module = 'yt_dlp.extractor.audiomack'
  835. IE_NAME = 'audiomack'
  836. _VALID_URL = 'https?://(?:www\\.)?audiomack\\.com/(?:song/|(?=.+/song/))(?P<id>[\\w/-]+)'
  837. _RETURN_TYPE = 'video'
  838. class AudiusBaseIE(LazyLoadExtractor):
  839. _module = 'yt_dlp.extractor.audius'
  840. IE_NAME = 'AudiusBase'
  841. class AudiusIE(AudiusBaseIE):
  842. _module = 'yt_dlp.extractor.audius'
  843. IE_NAME = 'Audius'
  844. _VALID_URL = '(?x)https?://(?:www\\.)?(?:audius\\.co/(?P<uploader>[\\w\\d-]+)(?!/album|/playlist)/(?P<title>\\S+))'
  845. IE_DESC = 'Audius.co'
  846. _RETURN_TYPE = 'video'
  847. class AudiusPlaylistIE(AudiusBaseIE):
  848. _module = 'yt_dlp.extractor.audius'
  849. IE_NAME = 'audius:playlist'
  850. _VALID_URL = 'https?://(?:www\\.)?audius\\.co/(?P<uploader>[\\w\\d-]+)/(?:album|playlist)/(?P<title>\\S+)'
  851. IE_DESC = 'Audius.co playlists'
  852. _RETURN_TYPE = 'playlist'
  853. class AudiusProfileIE(AudiusPlaylistIE):
  854. _module = 'yt_dlp.extractor.audius'
  855. IE_NAME = 'audius:artist'
  856. _VALID_URL = 'https?://(?:www)?audius\\.co/(?P<id>[^\\/]+)/?(?:[?#]|$)'
  857. IE_DESC = 'Audius.co profile/artist pages'
  858. _RETURN_TYPE = 'playlist'
  859. class AudiusTrackIE(AudiusIE):
  860. _module = 'yt_dlp.extractor.audius'
  861. IE_NAME = 'audius:track'
  862. _VALID_URL = '(?x)(?:audius:)(?:https?://(?:www\\.)?.+/v1/tracks/)?(?P<track_id>\\w+)'
  863. IE_DESC = 'Audius track ID or API link. Prepend with "audius:"'
  864. class AWAANIE(LazyLoadExtractor):
  865. _module = 'yt_dlp.extractor.awaan'
  866. IE_NAME = 'AWAAN'
  867. _VALID_URL = 'https?://(?:www\\.)?(?:awaan|dcndigital)\\.ae/(?:#/)?show/(?P<show_id>\\d+)/[^/]+(?:/(?P<id>\\d+)/(?P<season_id>\\d+))?'
  868. class AWAANBaseIE(LazyLoadExtractor):
  869. _module = 'yt_dlp.extractor.awaan'
  870. IE_NAME = 'AWAANBase'
  871. class AWAANLiveIE(AWAANBaseIE):
  872. _module = 'yt_dlp.extractor.awaan'
  873. IE_NAME = 'awaan:live'
  874. _VALID_URL = 'https?://(?:www\\.)?(?:awaan|dcndigital)\\.ae/(?:#/)?live/(?P<id>\\d+)'
  875. _RETURN_TYPE = 'video'
  876. class AWAANSeasonIE(LazyLoadExtractor):
  877. _module = 'yt_dlp.extractor.awaan'
  878. IE_NAME = 'awaan:season'
  879. _VALID_URL = 'https?://(?:www\\.)?(?:awaan|dcndigital)\\.ae/(?:#/)?program/(?:(?P<show_id>\\d+)|season/(?P<season_id>\\d+))'
  880. _RETURN_TYPE = 'playlist'
  881. class AWAANVideoIE(AWAANBaseIE):
  882. _module = 'yt_dlp.extractor.awaan'
  883. IE_NAME = 'awaan:video'
  884. _VALID_URL = 'https?://(?:www\\.)?(?:awaan|dcndigital)\\.ae/(?:#/)?(?:video(?:/[^/]+)?|media|catchup/[^/]+/[^/]+)/(?P<id>\\d+)'
  885. _RETURN_TYPE = 'video'
  886. class AxsIE(LazyLoadExtractor):
  887. _module = 'yt_dlp.extractor.axs'
  888. IE_NAME = 'axs.tv'
  889. _VALID_URL = 'https?://(?:www\\.)?axs\\.tv/(?:channel/(?:[^/?#]+/)+)?video/(?P<id>[^/?#]+)'
  890. _RETURN_TYPE = 'video'
  891. class AZMedienIE(LazyLoadExtractor):
  892. _module = 'yt_dlp.extractor.azmedien'
  893. IE_NAME = 'AZMedien'
  894. _VALID_URL = '(?x)\n https?://\n (?:www\\.|tv\\.)?\n (?P<host>\n telezueri\\.ch|\n telebaern\\.tv|\n telem1\\.ch|\n tvo-online\\.ch\n )/\n [^/]+/\n (?P<id>\n [^/]+-(?P<article_id>\\d+)\n )\n (?:\n \\#video=\n (?P<kaltura_id>\n [_0-9a-z]+\n )\n )?\n '
  895. IE_DESC = 'AZ Medien videos'
  896. _RETURN_TYPE = 'video'
  897. class BaiduVideoIE(LazyLoadExtractor):
  898. _module = 'yt_dlp.extractor.baidu'
  899. IE_NAME = 'BaiduVideo'
  900. _VALID_URL = 'https?://v\\.baidu\\.com/(?P<type>[a-z]+)/(?P<id>\\d+)\\.htm'
  901. IE_DESC = '百度视频'
  902. _RETURN_TYPE = 'playlist'
  903. class BanByeBaseIE(LazyLoadExtractor):
  904. _module = 'yt_dlp.extractor.banbye'
  905. IE_NAME = 'BanByeBase'
  906. class BanByeChannelIE(BanByeBaseIE):
  907. _module = 'yt_dlp.extractor.banbye'
  908. IE_NAME = 'BanByeChannel'
  909. _VALID_URL = 'https?://(?:www\\.)?banbye\\.com/(?:en/)?channel/(?P<id>\\w+)'
  910. _RETURN_TYPE = 'playlist'
  911. class BanByeIE(BanByeBaseIE):
  912. _module = 'yt_dlp.extractor.banbye'
  913. IE_NAME = 'BanBye'
  914. _VALID_URL = 'https?://(?:www\\.)?banbye\\.com/(?:en/)?watch/(?P<id>[\\w-]+)'
  915. _RETURN_TYPE = 'any'
  916. class BrightcoveNewBaseIE(AdobePassIE):
  917. _module = 'yt_dlp.extractor.brightcove'
  918. IE_NAME = 'BrightcoveNewBase'
  919. class BandaiChannelIE(BrightcoveNewBaseIE):
  920. _module = 'yt_dlp.extractor.bandaichannel'
  921. IE_NAME = 'bandaichannel'
  922. _VALID_URL = 'https?://(?:www\\.)?b-ch\\.com/titles/(?P<id>\\d+/\\d+)'
  923. _RETURN_TYPE = 'video'
  924. class BandcampIE(LazyLoadExtractor):
  925. _module = 'yt_dlp.extractor.bandcamp'
  926. IE_NAME = 'Bandcamp'
  927. _VALID_URL = 'https?://(?P<uploader>[^/]+)\\.bandcamp\\.com/track/(?P<id>[^/?#&]+)'
  928. _RETURN_TYPE = 'video'
  929. class BandcampAlbumIE(BandcampIE):
  930. _module = 'yt_dlp.extractor.bandcamp'
  931. IE_NAME = 'Bandcamp:album'
  932. _VALID_URL = 'https?://(?:(?P<subdomain>[^.]+)\\.)?bandcamp\\.com/album/(?P<id>[^/?#&]+)'
  933. _RETURN_TYPE = 'playlist'
  934. @classmethod
  935. def suitable(cls, url):
  936. return (False
  937. if BandcampWeeklyIE.suitable(url) or BandcampIE.suitable(url)
  938. else super().suitable(url))
  939. class BandcampUserIE(LazyLoadExtractor):
  940. _module = 'yt_dlp.extractor.bandcamp'
  941. IE_NAME = 'Bandcamp:user'
  942. _VALID_URL = 'https?://(?!www\\.)(?P<id>[^.]+)\\.bandcamp\\.com(?:/music)?/?(?:[#?]|$)'
  943. _RETURN_TYPE = 'playlist'
  944. class BandcampWeeklyIE(BandcampIE):
  945. _module = 'yt_dlp.extractor.bandcamp'
  946. IE_NAME = 'Bandcamp:weekly'
  947. _VALID_URL = 'https?://(?:www\\.)?bandcamp\\.com/?\\?(?:.*?&)?show=(?P<id>\\d+)'
  948. _RETURN_TYPE = 'video'
  949. class BandlabBaseIE(LazyLoadExtractor):
  950. _module = 'yt_dlp.extractor.bandlab'
  951. IE_NAME = 'BandlabBase'
  952. class BandlabIE(BandlabBaseIE):
  953. _module = 'yt_dlp.extractor.bandlab'
  954. IE_NAME = 'Bandlab'
  955. _VALID_URL = ['https?://(?:www\\.)?bandlab.com/(?P<url_type>track|post|revision)/(?P<id>[\\da-f_-]+)', 'https?://(?:www\\.)?bandlab.com/(?P<url_type>embed)/\\?(?:[^#]*&)?id=(?P<id>[\\da-f-]+)']
  956. _RETURN_TYPE = 'video'
  957. class BandlabPlaylistIE(BandlabBaseIE):
  958. _module = 'yt_dlp.extractor.bandlab'
  959. IE_NAME = 'BandlabPlaylist'
  960. _VALID_URL = ['https?://(?:www\\.)?bandlab.com/(?:[\\w]+/)?(?P<type>albums|collections)/(?P<id>[\\da-f-]+)', 'https?://(?:www\\.)?bandlab.com/(?P<type>embed)/collection/\\?(?:[^#]*&)?id=(?P<id>[\\da-f-]+)']
  961. _RETURN_TYPE = 'playlist'
  962. class BannedVideoIE(LazyLoadExtractor):
  963. _module = 'yt_dlp.extractor.bannedvideo'
  964. IE_NAME = 'BannedVideo'
  965. _VALID_URL = 'https?://(?:www\\.)?banned\\.video/watch\\?id=(?P<id>[0-f]{24})'
  966. _RETURN_TYPE = 'video'
  967. class BBCCoUkArticleIE(LazyLoadExtractor):
  968. _module = 'yt_dlp.extractor.bbc'
  969. IE_NAME = 'bbc.co.uk:article'
  970. _VALID_URL = 'https?://(?:www\\.)?bbc\\.co\\.uk/programmes/articles/(?P<id>[a-zA-Z0-9]+)'
  971. IE_DESC = 'BBC articles'
  972. _RETURN_TYPE = 'playlist'
  973. class BBCCoUkIE(LazyLoadExtractor):
  974. _module = 'yt_dlp.extractor.bbc'
  975. IE_NAME = 'bbc.co.uk'
  976. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?bbc\\.co\\.uk/\n (?:\n programmes/(?!articles/)|\n iplayer(?:/[^/]+)?/(?:episode/|playlist/)|\n music/(?:clips|audiovideo/popular)[/#]|\n radio/player/|\n events/[^/]+/play/[^/]+/\n )\n (?P<id>(?:[pbml][\\da-z]{7}|w[\\da-z]{7,14}))(?!/(?:episodes|broadcasts|clips))\n '
  977. IE_DESC = 'BBC iPlayer'
  978. _NETRC_MACHINE = 'bbc'
  979. _RETURN_TYPE = 'video'
  980. class BBCIE(BBCCoUkIE):
  981. _module = 'yt_dlp.extractor.bbc'
  982. IE_NAME = 'bbc'
  983. _VALID_URL = '(?x)\n https?://(?:www\\.)?(?:\n bbc\\.(?:com|co\\.uk)|\n bbcnewsd73hkzno2ini43t4gblxvycyac5aw4gnv7t2rccijh7745uqd\\.onion|\n bbcweb3hytmzhn5d532owbu6oqadra5z3ar726vq5kgwwn6aucdccrad\\.onion\n )/(?:[^/]+/)+(?P<id>[^/#?]+)'
  984. IE_DESC = 'BBC'
  985. _NETRC_MACHINE = 'bbc'
  986. _RETURN_TYPE = 'any'
  987. @classmethod
  988. def suitable(cls, url):
  989. EXCLUDE_IE = (BBCCoUkIE, BBCCoUkArticleIE, BBCCoUkIPlayerEpisodesIE, BBCCoUkIPlayerGroupIE, BBCCoUkPlaylistIE)
  990. return (False if any(ie.suitable(url) for ie in EXCLUDE_IE)
  991. else super().suitable(url))
  992. class BBCCoUkIPlayerPlaylistBaseIE(LazyLoadExtractor):
  993. _module = 'yt_dlp.extractor.bbc'
  994. IE_NAME = 'BBCCoUkIPlayerPlaylistBase'
  995. class BBCCoUkIPlayerEpisodesIE(BBCCoUkIPlayerPlaylistBaseIE):
  996. _module = 'yt_dlp.extractor.bbc'
  997. IE_NAME = 'bbc.co.uk:iplayer:episodes'
  998. _VALID_URL = 'https?://(?:www\\.)?bbc\\.co\\.uk/iplayer/episodes/(?P<id>(?:[pbml][\\da-z]{7}|w[\\da-z]{7,14}))'
  999. _RETURN_TYPE = 'playlist'
  1000. class BBCCoUkIPlayerGroupIE(BBCCoUkIPlayerPlaylistBaseIE):
  1001. _module = 'yt_dlp.extractor.bbc'
  1002. IE_NAME = 'bbc.co.uk:iplayer:group'
  1003. _VALID_URL = 'https?://(?:www\\.)?bbc\\.co\\.uk/iplayer/group/(?P<id>(?:[pbml][\\da-z]{7}|w[\\da-z]{7,14}))'
  1004. _RETURN_TYPE = 'playlist'
  1005. class BBCCoUkPlaylistBaseIE(LazyLoadExtractor):
  1006. _module = 'yt_dlp.extractor.bbc'
  1007. IE_NAME = 'BBCCoUkPlaylistBase'
  1008. class BBCCoUkPlaylistIE(BBCCoUkPlaylistBaseIE):
  1009. _module = 'yt_dlp.extractor.bbc'
  1010. IE_NAME = 'bbc.co.uk:playlist'
  1011. _VALID_URL = 'https?://(?:www\\.)?bbc\\.co\\.uk/programmes/(?P<id>(?:[pbml][\\da-z]{7}|w[\\da-z]{7,14}))/(?:episodes|broadcasts|clips)'
  1012. _RETURN_TYPE = 'playlist'
  1013. class BeaconTvIE(LazyLoadExtractor):
  1014. _module = 'yt_dlp.extractor.beacon'
  1015. IE_NAME = 'BeaconTv'
  1016. _VALID_URL = 'https?://(?:www\\.)?beacon\\.tv/content/(?P<id>[\\w-]+)'
  1017. _RETURN_TYPE = 'video'
  1018. class BeatBumpPlaylistIE(LazyLoadExtractor):
  1019. _module = 'yt_dlp.extractor.beatbump'
  1020. IE_NAME = 'BeatBumpPlaylist'
  1021. _VALID_URL = 'https?://beatbump\\.(?:ml|io)/(?:release\\?id=|artist/|playlist/)(?P<id>[\\w-]+)'
  1022. _RETURN_TYPE = 'playlist'
  1023. class BeatBumpVideoIE(LazyLoadExtractor):
  1024. _module = 'yt_dlp.extractor.beatbump'
  1025. IE_NAME = 'BeatBumpVideo'
  1026. _VALID_URL = 'https?://beatbump\\.(?:ml|io)/listen\\?id=(?P<id>[\\w-]+)'
  1027. _RETURN_TYPE = 'video'
  1028. class BeatportIE(LazyLoadExtractor):
  1029. _module = 'yt_dlp.extractor.beatport'
  1030. IE_NAME = 'Beatport'
  1031. _VALID_URL = 'https?://(?:www\\.|pro\\.)?beatport\\.com/track/(?P<display_id>[^/]+)/(?P<id>[0-9]+)'
  1032. _RETURN_TYPE = 'video'
  1033. class BeegIE(LazyLoadExtractor):
  1034. _module = 'yt_dlp.extractor.beeg'
  1035. IE_NAME = 'Beeg'
  1036. _VALID_URL = 'https?://(?:www\\.)?beeg\\.(?:com(?:/video)?)/-?(?P<id>\\d+)'
  1037. age_limit = 18
  1038. _RETURN_TYPE = 'video'
  1039. class BehindKinkIE(LazyLoadExtractor):
  1040. _module = 'yt_dlp.extractor.behindkink'
  1041. IE_NAME = 'BehindKink'
  1042. _VALID_URL = 'https?://(?:www\\.)?behindkink\\.com/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/(?P<id>[^/#?_]+)'
  1043. _WORKING = False
  1044. age_limit = 18
  1045. _RETURN_TYPE = 'video'
  1046. class BellMediaIE(LazyLoadExtractor):
  1047. _module = 'yt_dlp.extractor.bellmedia'
  1048. IE_NAME = 'BellMedia'
  1049. _VALID_URL = '(?x)https?://(?:www\\.)?\n (?P<domain>\n (?:\n ctv|\n tsn|\n bnn(?:bloomberg)?|\n thecomedynetwork|\n discovery|\n discoveryvelocity|\n sciencechannel|\n investigationdiscovery|\n animalplanet|\n bravo|\n mtv|\n space|\n etalk|\n marilyn\n )\\.ca|\n (?:much|cp24)\\.com\n )/.*?(?:\\b(?:vid(?:eoid)?|clipId)=|-vid|~|%7E|/(?:episode)?)(?P<id>[0-9]{6,})'
  1050. _RETURN_TYPE = 'video'
  1051. class BerufeTVIE(LazyLoadExtractor):
  1052. _module = 'yt_dlp.extractor.berufetv'
  1053. IE_NAME = 'BerufeTV'
  1054. _VALID_URL = 'https?://(?:www\\.)?web\\.arbeitsagentur\\.de/berufetv/[^?#]+/film;filmId=(?P<id>[\\w-]+)'
  1055. _RETURN_TYPE = 'video'
  1056. class MTVServicesInfoExtractor(LazyLoadExtractor):
  1057. _module = 'yt_dlp.extractor.mtv'
  1058. IE_NAME = 'MTVServicesInfoExtract'
  1059. class BetIE(MTVServicesInfoExtractor):
  1060. _module = 'yt_dlp.extractor.bet'
  1061. IE_NAME = 'Bet'
  1062. _VALID_URL = 'https?://(?:www\\.)?bet\\.com/(?:[^/]+/)+(?P<id>.+?)\\.html'
  1063. _WORKING = False
  1064. _RETURN_TYPE = 'video'
  1065. class BFIPlayerIE(LazyLoadExtractor):
  1066. _module = 'yt_dlp.extractor.bfi'
  1067. IE_NAME = 'bfi:player'
  1068. _VALID_URL = 'https?://player\\.bfi\\.org\\.uk/[^/]+/film/watch-(?P<id>[\\w-]+)-online'
  1069. _WORKING = False
  1070. _RETURN_TYPE = 'video'
  1071. class BFMTVBaseIE(LazyLoadExtractor):
  1072. _module = 'yt_dlp.extractor.bfmtv'
  1073. IE_NAME = 'BFMTVBase'
  1074. class BFMTVIE(BFMTVBaseIE):
  1075. _module = 'yt_dlp.extractor.bfmtv'
  1076. IE_NAME = 'bfmtv'
  1077. _VALID_URL = 'https?://(?:www\\.|rmc\\.)?bfmtv\\.com/(?:[^/]+/)*[^/?&#]+_V[A-Z]-(?P<id>\\d{12})\\.html'
  1078. _RETURN_TYPE = 'video'
  1079. class BFMTVArticleIE(BFMTVBaseIE):
  1080. _module = 'yt_dlp.extractor.bfmtv'
  1081. IE_NAME = 'bfmtv:article'
  1082. _VALID_URL = 'https?://(?:www\\.|rmc\\.)?bfmtv\\.com/(?:[^/]+/)*[^/?&#]+_A[A-Z]-(?P<id>\\d{12})\\.html'
  1083. _RETURN_TYPE = 'any'
  1084. class BFMTVLiveIE(BFMTVBaseIE):
  1085. _module = 'yt_dlp.extractor.bfmtv'
  1086. IE_NAME = 'bfmtv:live'
  1087. _VALID_URL = 'https?://(?:www\\.|rmc\\.)?bfmtv\\.com/(?P<id>(?:[^/]+/)?en-direct)'
  1088. _RETURN_TYPE = 'video'
  1089. class BibelTVBaseIE(LazyLoadExtractor):
  1090. _module = 'yt_dlp.extractor.bibeltv'
  1091. IE_NAME = 'BibelTVBase'
  1092. class BibelTVLiveIE(BibelTVBaseIE):
  1093. _module = 'yt_dlp.extractor.bibeltv'
  1094. IE_NAME = 'bibeltv:live'
  1095. _VALID_URL = 'https?://(?:www\\.)?bibeltv\\.de/livestreams/(?P<id>[\\w-]+)'
  1096. IE_DESC = 'BibelTV live program'
  1097. _RETURN_TYPE = 'video'
  1098. class BibelTVSeriesIE(BibelTVBaseIE):
  1099. _module = 'yt_dlp.extractor.bibeltv'
  1100. IE_NAME = 'bibeltv:series'
  1101. _VALID_URL = 'https?://(?:www\\.)?bibeltv\\.de/mediathek/serien/(?P<id>\\d+)[\\w-]+'
  1102. IE_DESC = 'BibelTV series playlist'
  1103. _RETURN_TYPE = 'playlist'
  1104. class BibelTVVideoIE(BibelTVBaseIE):
  1105. _module = 'yt_dlp.extractor.bibeltv'
  1106. IE_NAME = 'bibeltv:video'
  1107. _VALID_URL = 'https?://(?:www\\.)?bibeltv\\.de/mediathek/videos/(?P<id>\\d+)[\\w-]+'
  1108. IE_DESC = 'BibelTV single video'
  1109. _RETURN_TYPE = 'video'
  1110. class BigflixIE(LazyLoadExtractor):
  1111. _module = 'yt_dlp.extractor.bigflix'
  1112. IE_NAME = 'Bigflix'
  1113. _VALID_URL = 'https?://(?:www\\.)?bigflix\\.com/.+/(?P<id>[0-9]+)'
  1114. _RETURN_TYPE = 'video'
  1115. class BigoIE(LazyLoadExtractor):
  1116. _module = 'yt_dlp.extractor.bigo'
  1117. IE_NAME = 'Bigo'
  1118. _VALID_URL = 'https?://(?:www\\.)?bigo\\.tv/(?:[a-z]{2,}/)?(?P<id>[^/]+)'
  1119. _RETURN_TYPE = 'video'
  1120. class BildIE(LazyLoadExtractor):
  1121. _module = 'yt_dlp.extractor.bild'
  1122. IE_NAME = 'Bild'
  1123. _VALID_URL = 'https?://(?:www\\.)?bild\\.de/(?:[^/]+/)+(?P<display_id>[^/]+)-(?P<id>\\d+)(?:,auto=true)?\\.bild\\.html'
  1124. IE_DESC = 'Bild.de'
  1125. _RETURN_TYPE = 'video'
  1126. class BilibiliAudioBaseIE(LazyLoadExtractor):
  1127. _module = 'yt_dlp.extractor.bilibili'
  1128. IE_NAME = 'BilibiliAudioBase'
  1129. class BilibiliAudioAlbumIE(BilibiliAudioBaseIE):
  1130. _module = 'yt_dlp.extractor.bilibili'
  1131. IE_NAME = 'BilibiliAudioAlbum'
  1132. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/audio/am(?P<id>\\d+)'
  1133. _RETURN_TYPE = 'playlist'
  1134. class BilibiliAudioIE(BilibiliAudioBaseIE):
  1135. _module = 'yt_dlp.extractor.bilibili'
  1136. IE_NAME = 'BilibiliAudio'
  1137. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/audio/au(?P<id>\\d+)'
  1138. _RETURN_TYPE = 'video'
  1139. class BilibiliBaseIE(LazyLoadExtractor):
  1140. _module = 'yt_dlp.extractor.bilibili'
  1141. IE_NAME = 'BilibiliBase'
  1142. class BiliBiliBangumiIE(BilibiliBaseIE):
  1143. _module = 'yt_dlp.extractor.bilibili'
  1144. IE_NAME = 'BiliBiliBangumi'
  1145. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/bangumi/play/ep(?P<id>\\d+)'
  1146. _RETURN_TYPE = 'video'
  1147. class BiliBiliBangumiMediaIE(BilibiliBaseIE):
  1148. _module = 'yt_dlp.extractor.bilibili'
  1149. IE_NAME = 'BiliBiliBangumiMedia'
  1150. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/bangumi/media/md(?P<id>\\d+)'
  1151. _RETURN_TYPE = 'playlist'
  1152. class BiliBiliBangumiSeasonIE(BilibiliBaseIE):
  1153. _module = 'yt_dlp.extractor.bilibili'
  1154. IE_NAME = 'BiliBiliBangumiSeason'
  1155. _VALID_URL = '(?x)https?://(?:www\\.)?bilibili\\.com/bangumi/play/ss(?P<id>\\d+)'
  1156. _RETURN_TYPE = 'playlist'
  1157. class BilibiliCategoryIE(LazyLoadExtractor):
  1158. _module = 'yt_dlp.extractor.bilibili'
  1159. IE_NAME = 'Bilibili category extractor'
  1160. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/v/[a-zA-Z]+\\/[a-zA-Z]+'
  1161. _RETURN_TYPE = 'playlist'
  1162. class BilibiliCheeseBaseIE(BilibiliBaseIE):
  1163. _module = 'yt_dlp.extractor.bilibili'
  1164. IE_NAME = 'BilibiliCheeseBase'
  1165. class BilibiliCheeseIE(BilibiliCheeseBaseIE):
  1166. _module = 'yt_dlp.extractor.bilibili'
  1167. IE_NAME = 'BilibiliCheese'
  1168. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/cheese/play/ep(?P<id>\\d+)'
  1169. _RETURN_TYPE = 'video'
  1170. class BilibiliCheeseSeasonIE(BilibiliCheeseBaseIE):
  1171. _module = 'yt_dlp.extractor.bilibili'
  1172. IE_NAME = 'BilibiliCheeseSeason'
  1173. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/cheese/play/ss(?P<id>\\d+)'
  1174. _RETURN_TYPE = 'playlist'
  1175. class BilibiliSpaceBaseIE(BilibiliBaseIE):
  1176. _module = 'yt_dlp.extractor.bilibili'
  1177. IE_NAME = 'BilibiliSpaceBase'
  1178. class BilibiliSpaceListBaseIE(BilibiliSpaceBaseIE):
  1179. _module = 'yt_dlp.extractor.bilibili'
  1180. IE_NAME = 'BilibiliSpaceListBase'
  1181. class BilibiliCollectionListIE(BilibiliSpaceListBaseIE):
  1182. _module = 'yt_dlp.extractor.bilibili'
  1183. IE_NAME = 'BilibiliCollectionList'
  1184. _VALID_URL = 'https?://space\\.bilibili\\.com/(?P<mid>\\d+)/channel/collectiondetail/?\\?sid=(?P<sid>\\d+)'
  1185. _RETURN_TYPE = 'playlist'
  1186. class BilibiliFavoritesListIE(BilibiliSpaceListBaseIE):
  1187. _module = 'yt_dlp.extractor.bilibili'
  1188. IE_NAME = 'BilibiliFavoritesList'
  1189. _VALID_URL = 'https?://(?:space\\.bilibili\\.com/\\d+/favlist/?\\?fid=|(?:www\\.)?bilibili\\.com/medialist/detail/ml)(?P<id>\\d+)'
  1190. _RETURN_TYPE = 'playlist'
  1191. class BiliBiliIE(BilibiliBaseIE):
  1192. _module = 'yt_dlp.extractor.bilibili'
  1193. IE_NAME = 'BiliBili'
  1194. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/(?:video/|festival/[^/?#]+\\?(?:[^#]*&)?bvid=)[aAbB][vV](?P<id>[^/?#&]+)'
  1195. _RETURN_TYPE = 'any'
  1196. class BiliBiliPlayerIE(LazyLoadExtractor):
  1197. _module = 'yt_dlp.extractor.bilibili'
  1198. IE_NAME = 'BiliBiliPlayer'
  1199. _VALID_URL = 'https?://player\\.bilibili\\.com/player\\.html\\?.*?\\baid=(?P<id>\\d+)'
  1200. class BilibiliPlaylistIE(BilibiliSpaceListBaseIE):
  1201. _module = 'yt_dlp.extractor.bilibili'
  1202. IE_NAME = 'BilibiliPlaylist'
  1203. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/(?:medialist/play|list)/(?P<id>\\w+)'
  1204. _RETURN_TYPE = 'any'
  1205. class BiliBiliSearchIE(LazyLoadSearchExtractor):
  1206. _module = 'yt_dlp.extractor.bilibili'
  1207. IE_NAME = 'BiliBiliSearch'
  1208. _VALID_URL = 'bilisearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  1209. IE_DESC = 'Bilibili video search'
  1210. SEARCH_KEY = 'bilisearch'
  1211. _RETURN_TYPE = 'playlist'
  1212. class BilibiliSeriesListIE(BilibiliSpaceListBaseIE):
  1213. _module = 'yt_dlp.extractor.bilibili'
  1214. IE_NAME = 'BilibiliSeriesList'
  1215. _VALID_URL = 'https?://space\\.bilibili\\.com/(?P<mid>\\d+)/channel/seriesdetail/?\\?\\bsid=(?P<sid>\\d+)'
  1216. _RETURN_TYPE = 'playlist'
  1217. class BilibiliSpaceAudioIE(BilibiliSpaceBaseIE):
  1218. _module = 'yt_dlp.extractor.bilibili'
  1219. IE_NAME = 'BilibiliSpaceAudio'
  1220. _VALID_URL = 'https?://space\\.bilibili\\.com/(?P<id>\\d+)/audio'
  1221. _RETURN_TYPE = 'playlist'
  1222. class BilibiliSpaceVideoIE(BilibiliSpaceBaseIE):
  1223. _module = 'yt_dlp.extractor.bilibili'
  1224. IE_NAME = 'BilibiliSpaceVideo'
  1225. _VALID_URL = 'https?://space\\.bilibili\\.com/(?P<id>\\d+)(?P<video>/video)?/?(?:[?#]|$)'
  1226. _RETURN_TYPE = 'playlist'
  1227. class BilibiliWatchlaterIE(BilibiliSpaceListBaseIE):
  1228. _module = 'yt_dlp.extractor.bilibili'
  1229. IE_NAME = 'BilibiliWatchlater'
  1230. _VALID_URL = 'https?://(?:www\\.)?bilibili\\.com/watchlater/?(?:[?#]|$)'
  1231. _RETURN_TYPE = 'playlist'
  1232. class BiliIntlBaseIE(LazyLoadExtractor):
  1233. _module = 'yt_dlp.extractor.bilibili'
  1234. IE_NAME = 'BiliIntlBase'
  1235. _NETRC_MACHINE = 'biliintl'
  1236. class BiliIntlIE(BiliIntlBaseIE):
  1237. _module = 'yt_dlp.extractor.bilibili'
  1238. IE_NAME = 'BiliIntl'
  1239. _VALID_URL = 'https?://(?:www\\.)?bili(?:bili\\.tv|intl\\.com)/(?:[a-zA-Z]{2}/)?(play/(?P<season_id>\\d+)/(?P<ep_id>\\d+)|video/(?P<aid>\\d+))'
  1240. _NETRC_MACHINE = 'biliintl'
  1241. _RETURN_TYPE = 'video'
  1242. class BiliIntlSeriesIE(BiliIntlBaseIE):
  1243. _module = 'yt_dlp.extractor.bilibili'
  1244. IE_NAME = 'biliIntl:series'
  1245. _VALID_URL = 'https?://(?:www\\.)?bili(?:bili\\.tv|intl\\.com)/(?:[a-zA-Z]{2}/)?(?:play|media)/(?P<id>\\d+)/?(?:[?#]|$)'
  1246. _NETRC_MACHINE = 'biliintl'
  1247. _RETURN_TYPE = 'playlist'
  1248. class BiliLiveIE(LazyLoadExtractor):
  1249. _module = 'yt_dlp.extractor.bilibili'
  1250. IE_NAME = 'BiliLive'
  1251. _VALID_URL = 'https?://live\\.bilibili\\.com/(?:blanc/)?(?P<id>\\d+)'
  1252. _RETURN_TYPE = 'video'
  1253. class BioBioChileTVIE(LazyLoadExtractor):
  1254. _module = 'yt_dlp.extractor.biobiochiletv'
  1255. IE_NAME = 'BioBioChileTV'
  1256. _VALID_URL = 'https?://(?:tv|www)\\.biobiochile\\.cl/(?:notas|noticias)/(?:[^/]+/)+(?P<id>[^/]+)\\.shtml'
  1257. _RETURN_TYPE = 'video'
  1258. class BitChuteChannelIE(LazyLoadExtractor):
  1259. _module = 'yt_dlp.extractor.bitchute'
  1260. IE_NAME = 'BitChuteChannel'
  1261. _VALID_URL = 'https?://(?:(?:www|old)\\.)?bitchute\\.com/(?P<type>channel|playlist)/(?P<id>[^/?#&]+)'
  1262. _RETURN_TYPE = 'playlist'
  1263. class BitChuteIE(LazyLoadExtractor):
  1264. _module = 'yt_dlp.extractor.bitchute'
  1265. IE_NAME = 'BitChute'
  1266. _VALID_URL = 'https?://(?:(?:www|old)\\.)?bitchute\\.com/(?:video|embed|torrent/[^/]+)/(?P<id>[^/?#&]+)'
  1267. _RETURN_TYPE = 'video'
  1268. class BlackboardCollaborateIE(LazyLoadExtractor):
  1269. _module = 'yt_dlp.extractor.blackboardcollaborate'
  1270. IE_NAME = 'BlackboardCollaborate'
  1271. _VALID_URL = '(?x)\n https?://\n (?P<region>[a-z-]+)\\.bbcollab\\.com/\n (?:\n collab/ui/session/playback/load|\n recording\n )/\n (?P<id>[^/]+)'
  1272. _RETURN_TYPE = 'video'
  1273. class BleacherReportCMSIE(AMPIE):
  1274. _module = 'yt_dlp.extractor.bleacherreport'
  1275. IE_NAME = 'BleacherReportCMS'
  1276. _VALID_URL = 'https?://(?:www\\.)?bleacherreport\\.com/video_embed\\?id=(?P<id>[0-9a-f-]{36}|\\d{5})'
  1277. _WORKING = False
  1278. _RETURN_TYPE = 'video'
  1279. class BleacherReportIE(LazyLoadExtractor):
  1280. _module = 'yt_dlp.extractor.bleacherreport'
  1281. IE_NAME = 'BleacherReport'
  1282. _VALID_URL = 'https?://(?:www\\.)?bleacherreport\\.com/articles/(?P<id>\\d+)'
  1283. _WORKING = False
  1284. _RETURN_TYPE = 'video'
  1285. class BlerpIE(LazyLoadExtractor):
  1286. _module = 'yt_dlp.extractor.blerp'
  1287. IE_NAME = 'blerp'
  1288. _VALID_URL = 'https?://(?:www\\.)?blerp\\.com/soundbites/(?P<id>[0-9a-zA-Z]+)'
  1289. _RETURN_TYPE = 'video'
  1290. class BloggerIE(LazyLoadExtractor):
  1291. _module = 'yt_dlp.extractor.blogger'
  1292. IE_NAME = 'blogger.com'
  1293. _VALID_URL = 'https?://(?:www\\.)?blogger\\.com/video\\.g\\?token=(?P<id>.+)'
  1294. _RETURN_TYPE = 'video'
  1295. class BloombergIE(LazyLoadExtractor):
  1296. _module = 'yt_dlp.extractor.bloomberg'
  1297. IE_NAME = 'Bloomberg'
  1298. _VALID_URL = 'https?://(?:www\\.)?bloomberg\\.com/(?:[^/]+/)*(?P<id>[^/?#]+)'
  1299. _RETURN_TYPE = 'video'
  1300. class BlueskyIE(LazyLoadExtractor):
  1301. _module = 'yt_dlp.extractor.bluesky'
  1302. IE_NAME = 'Bluesky'
  1303. _VALID_URL = ['https?://(?:www\\.)?(?:bsky\\.app|main\\.bsky\\.dev)/profile/(?P<handle>[\\w.:%-]+)/post/(?P<id>\\w+)', 'at://(?P<handle>[\\w.:%-]+)/app\\.bsky\\.feed\\.post/(?P<id>\\w+)']
  1304. age_limit = 18
  1305. _RETURN_TYPE = 'any'
  1306. class BokeCCBaseIE(LazyLoadExtractor):
  1307. _module = 'yt_dlp.extractor.bokecc'
  1308. IE_NAME = 'BokeCCBase'
  1309. class BokeCCIE(BokeCCBaseIE):
  1310. _module = 'yt_dlp.extractor.bokecc'
  1311. IE_NAME = 'BokeCC'
  1312. _VALID_URL = 'https?://union\\.bokecc\\.com/playvideo\\.bo\\?(?P<query>.*)'
  1313. _RETURN_TYPE = 'video'
  1314. class BongaCamsIE(LazyLoadExtractor):
  1315. _module = 'yt_dlp.extractor.bongacams'
  1316. IE_NAME = 'BongaCams'
  1317. _VALID_URL = 'https?://(?P<host>(?:[^/]+\\.)?bongacams\\d*\\.(?:com|net))/(?P<id>[^/?&#]+)'
  1318. age_limit = 18
  1319. _RETURN_TYPE = 'video'
  1320. class BoostyIE(LazyLoadExtractor):
  1321. _module = 'yt_dlp.extractor.boosty'
  1322. IE_NAME = 'Boosty'
  1323. _VALID_URL = 'https?://(?:www\\.)?boosty\\.to/(?P<user>[^/#?]+)/posts/(?P<post_id>[^/#?]+)'
  1324. _RETURN_TYPE = 'any'
  1325. class BostonGlobeIE(LazyLoadExtractor):
  1326. _module = 'yt_dlp.extractor.bostonglobe'
  1327. IE_NAME = 'BostonGlobe'
  1328. _VALID_URL = '(?i)https?://(?:www\\.)?bostonglobe\\.com/.*/(?P<id>[^/]+)/\\w+(?:\\.html)?'
  1329. _RETURN_TYPE = 'video'
  1330. class BoxIE(LazyLoadExtractor):
  1331. _module = 'yt_dlp.extractor.box'
  1332. IE_NAME = 'Box'
  1333. _VALID_URL = 'https?://(?:[^.]+\\.)?(?P<service>app|ent)\\.box\\.com/s/(?P<shared_name>[^/?#]+)(?:/file/(?P<id>\\d+))?'
  1334. _RETURN_TYPE = 'video'
  1335. class BoxCastVideoIE(LazyLoadExtractor):
  1336. _module = 'yt_dlp.extractor.boxcast'
  1337. IE_NAME = 'BoxCastVideo'
  1338. _VALID_URL = '(?x)\n https?://boxcast\\.tv/(?:\n view-embed/|\n channel/\\w+\\?(?:[^#]+&)?b=|\n video-portal/(?:\\w+/){2}\n )(?P<id>[\\w-]+)'
  1339. _RETURN_TYPE = 'video'
  1340. class BpbIE(LazyLoadExtractor):
  1341. _module = 'yt_dlp.extractor.bpb'
  1342. IE_NAME = 'Bpb'
  1343. _VALID_URL = 'https?://(?:www\\.|m\\.)?bpb\\.de/(?:[^/?#]+/)*(?P<id>\\d+)(?:[/?#]|$)'
  1344. IE_DESC = 'Bundeszentrale für politische Bildung'
  1345. _RETURN_TYPE = 'video'
  1346. class BRIE(LazyLoadExtractor):
  1347. _module = 'yt_dlp.extractor.br'
  1348. IE_NAME = 'BR'
  1349. _VALID_URL = '(?P<base_url>https?://(?:www\\.)?br(?:-klassik)?\\.de)/(?:[a-z0-9\\-_]+/)+(?P<id>[a-z0-9\\-_]+)\\.html'
  1350. _WORKING = False
  1351. IE_DESC = 'Bayerischer Rundfunk'
  1352. _RETURN_TYPE = 'video'
  1353. class BrainPOPBaseIE(LazyLoadExtractor):
  1354. _module = 'yt_dlp.extractor.brainpop'
  1355. IE_NAME = 'BrainPOPBase'
  1356. _VALID_URL = '/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1357. _NETRC_MACHINE = 'brainpop'
  1358. class BrainPOPLegacyBaseIE(BrainPOPBaseIE):
  1359. _module = 'yt_dlp.extractor.brainpop'
  1360. IE_NAME = 'BrainPOPLegacyBase'
  1361. _VALID_URL = '/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1362. _NETRC_MACHINE = 'brainpop'
  1363. class BrainPOPELLIE(BrainPOPLegacyBaseIE):
  1364. _module = 'yt_dlp.extractor.brainpop'
  1365. IE_NAME = 'BrainPOPELL'
  1366. _VALID_URL = 'https?://ell\\.brainpop\\.com/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1367. _NETRC_MACHINE = 'brainpop'
  1368. _RETURN_TYPE = 'video'
  1369. class BrainPOPEspIE(BrainPOPLegacyBaseIE):
  1370. _module = 'yt_dlp.extractor.brainpop'
  1371. IE_NAME = 'BrainPOPEsp'
  1372. _VALID_URL = 'https?://esp\\.brainpop\\.com/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1373. IE_DESC = 'BrainPOP Español'
  1374. _NETRC_MACHINE = 'brainpop'
  1375. _RETURN_TYPE = 'video'
  1376. class BrainPOPFrIE(BrainPOPLegacyBaseIE):
  1377. _module = 'yt_dlp.extractor.brainpop'
  1378. IE_NAME = 'BrainPOPFr'
  1379. _VALID_URL = 'https?://fr\\.brainpop\\.com/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1380. IE_DESC = 'BrainPOP Français'
  1381. _NETRC_MACHINE = 'brainpop'
  1382. _RETURN_TYPE = 'video'
  1383. class BrainPOPIE(BrainPOPBaseIE):
  1384. _module = 'yt_dlp.extractor.brainpop'
  1385. IE_NAME = 'BrainPOP'
  1386. _VALID_URL = 'https?://(?:www\\.)?brainpop\\.com/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1387. _NETRC_MACHINE = 'brainpop'
  1388. _RETURN_TYPE = 'video'
  1389. class BrainPOPIlIE(BrainPOPLegacyBaseIE):
  1390. _module = 'yt_dlp.extractor.brainpop'
  1391. IE_NAME = 'BrainPOPIl'
  1392. _VALID_URL = 'https?://il\\.brainpop\\.com/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1393. IE_DESC = 'BrainPOP Hebrew'
  1394. _NETRC_MACHINE = 'brainpop'
  1395. _RETURN_TYPE = 'video'
  1396. class BrainPOPJrIE(BrainPOPLegacyBaseIE):
  1397. _module = 'yt_dlp.extractor.brainpop'
  1398. IE_NAME = 'BrainPOPJr'
  1399. _VALID_URL = 'https?://jr\\.brainpop\\.com/(?P<slug>[^/]+/[^/]+/(?P<id>[^/?#&]+))'
  1400. _NETRC_MACHINE = 'brainpop'
  1401. _RETURN_TYPE = 'video'
  1402. class BravoTVIE(AdobePassIE):
  1403. _module = 'yt_dlp.extractor.bravotv'
  1404. IE_NAME = 'BravoTV'
  1405. _VALID_URL = 'https?://(?:www\\.)?(?P<site>bravotv|oxygen)\\.com/(?:[^/]+/)+(?P<id>[^/?#]+)'
  1406. age_limit = 14
  1407. _RETURN_TYPE = 'video'
  1408. class BreitBartIE(LazyLoadExtractor):
  1409. _module = 'yt_dlp.extractor.breitbart'
  1410. IE_NAME = 'BreitBart'
  1411. _VALID_URL = 'https?://(?:www\\.)?breitbart\\.com/videos/v/(?P<id>[^/?#]+)'
  1412. _RETURN_TYPE = 'video'
  1413. class BrightcoveLegacyIE(LazyLoadExtractor):
  1414. _module = 'yt_dlp.extractor.brightcove'
  1415. IE_NAME = 'brightcove:legacy'
  1416. _VALID_URL = '(?:https?://.*brightcove\\.com/(services|viewer).*?\\?|brightcove:)(?P<query>.*)'
  1417. _RETURN_TYPE = 'any'
  1418. class BrightcoveNewIE(BrightcoveNewBaseIE):
  1419. _module = 'yt_dlp.extractor.brightcove'
  1420. IE_NAME = 'brightcove:new'
  1421. _VALID_URL = 'https?://players\\.brightcove\\.net/(?P<account_id>\\d+)/(?P<player_id>[^/]+)_(?P<embed>[^/]+)/index\\.html\\?.*(?P<content_type>video|playlist)Id=(?P<video_id>\\d+|ref:[^&]+)'
  1422. _RETURN_TYPE = 'any'
  1423. class BrilliantpalaBaseIE(LazyLoadExtractor):
  1424. _module = 'yt_dlp.extractor.brilliantpala'
  1425. IE_NAME = 'BrilliantpalaBase'
  1426. _NETRC_MACHINE = 'brilliantpala'
  1427. class BrilliantpalaClassesIE(BrilliantpalaBaseIE):
  1428. _module = 'yt_dlp.extractor.brilliantpala'
  1429. IE_NAME = 'Brilliantpala:Classes'
  1430. _VALID_URL = 'https?://classes\\.brilliantpala\\.org/courses/(?P<course_id>\\d+)/contents/(?P<content_id>\\d+)/?'
  1431. IE_DESC = 'VoD on classes.brilliantpala.org'
  1432. _NETRC_MACHINE = 'brilliantpala'
  1433. _RETURN_TYPE = 'video'
  1434. class BrilliantpalaElearnIE(BrilliantpalaBaseIE):
  1435. _module = 'yt_dlp.extractor.brilliantpala'
  1436. IE_NAME = 'Brilliantpala:Elearn'
  1437. _VALID_URL = 'https?://elearn\\.brilliantpala\\.org/courses/(?P<course_id>\\d+)/contents/(?P<content_id>\\d+)/?'
  1438. IE_DESC = 'VoD on elearn.brilliantpala.org'
  1439. _NETRC_MACHINE = 'brilliantpala'
  1440. _RETURN_TYPE = 'video'
  1441. class BundesligaIE(LazyLoadExtractor):
  1442. _module = 'yt_dlp.extractor.bundesliga'
  1443. IE_NAME = 'Bundesliga'
  1444. _VALID_URL = 'https?://(?:www\\.)?bundesliga\\.com/[a-z]{2}/bundesliga/videos(?:/[^?]+)?\\?vid=(?P<id>[a-zA-Z0-9]{8})'
  1445. _RETURN_TYPE = 'video'
  1446. class BundestagIE(LazyLoadExtractor):
  1447. _module = 'yt_dlp.extractor.bundestag'
  1448. IE_NAME = 'Bundestag'
  1449. _VALID_URL = ['https?://dbtg\\.tv/[cf]vid/(?P<id>\\d+)', 'https?://www\\.bundestag\\.de/mediathek/?\\?(?:[^#]+&)?videoid=(?P<id>\\d+)']
  1450. _RETURN_TYPE = 'video'
  1451. class BusinessInsiderIE(LazyLoadExtractor):
  1452. _module = 'yt_dlp.extractor.businessinsider'
  1453. IE_NAME = 'BusinessInsider'
  1454. _VALID_URL = 'https?://(?:[^/]+\\.)?businessinsider\\.(?:com|nl)/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  1455. _RETURN_TYPE = 'video'
  1456. class BuzzFeedIE(LazyLoadExtractor):
  1457. _module = 'yt_dlp.extractor.buzzfeed'
  1458. IE_NAME = 'BuzzFeed'
  1459. _VALID_URL = 'https?://(?:www\\.)?buzzfeed\\.com/[^?#]*?/(?P<id>[^?#]+)'
  1460. _RETURN_TYPE = 'playlist'
  1461. class BYUtvIE(LazyLoadExtractor):
  1462. _module = 'yt_dlp.extractor.byutv'
  1463. IE_NAME = 'BYUtv'
  1464. _VALID_URL = 'https?://(?:www\\.)?byutv\\.org/(?:watch|player)/(?!event/)(?P<id>[0-9a-f-]+)(?:/(?P<display_id>[^/?#&]+))?'
  1465. _WORKING = False
  1466. _RETURN_TYPE = 'video'
  1467. class C56IE(LazyLoadExtractor):
  1468. _module = 'yt_dlp.extractor.c56'
  1469. IE_NAME = '56.com'
  1470. _VALID_URL = 'https?://(?:(?:www|player)\\.)?56\\.com/(?:.+?/)?(?:v_|(?:play_album.+-))(?P<textid>.+?)\\.(?:html|swf)'
  1471. _RETURN_TYPE = 'any'
  1472. class CaffeineTVIE(LazyLoadExtractor):
  1473. _module = 'yt_dlp.extractor.caffeinetv'
  1474. IE_NAME = 'CaffeineTV'
  1475. _VALID_URL = 'https?://(?:www\\.)?caffeine\\.tv/[^/?#]+/video/(?P<id>[\\da-f-]+)'
  1476. age_limit = 17
  1477. _RETURN_TYPE = 'video'
  1478. class CallinIE(LazyLoadExtractor):
  1479. _module = 'yt_dlp.extractor.callin'
  1480. IE_NAME = 'Callin'
  1481. _VALID_URL = 'https?://(?:www\\.)?callin\\.com/episode/(?P<id>[-a-zA-Z]+)'
  1482. _RETURN_TYPE = 'video'
  1483. class CaltransIE(LazyLoadExtractor):
  1484. _module = 'yt_dlp.extractor.caltrans'
  1485. IE_NAME = 'Caltrans'
  1486. _VALID_URL = 'https?://(?:[^/]+\\.)?ca\\.gov/vm/loc/[^/]+/(?P<id>[a-z0-9_]+)\\.htm'
  1487. _RETURN_TYPE = 'video'
  1488. class CAM4IE(LazyLoadExtractor):
  1489. _module = 'yt_dlp.extractor.cam4'
  1490. IE_NAME = 'CAM4'
  1491. _VALID_URL = 'https?://(?:[^/]+\\.)?cam4\\.com/(?P<id>[a-z0-9_]+)'
  1492. age_limit = 18
  1493. _RETURN_TYPE = 'video'
  1494. class CamdemyFolderIE(LazyLoadExtractor):
  1495. _module = 'yt_dlp.extractor.camdemy'
  1496. IE_NAME = 'CamdemyFolder'
  1497. _VALID_URL = 'https?://(?:www\\.)?camdemy\\.com/folder/(?P<id>\\d+)'
  1498. _RETURN_TYPE = 'playlist'
  1499. class CamdemyIE(LazyLoadExtractor):
  1500. _module = 'yt_dlp.extractor.camdemy'
  1501. IE_NAME = 'Camdemy'
  1502. _VALID_URL = 'https?://(?:www\\.)?camdemy\\.com/media/(?P<id>\\d+)'
  1503. _RETURN_TYPE = 'video'
  1504. class CamFMEpisodeIE(LazyLoadExtractor):
  1505. _module = 'yt_dlp.extractor.camfm'
  1506. IE_NAME = 'CamFMEpisode'
  1507. _VALID_URL = 'https?://(?:www\\.)?camfm\\.co\\.uk/player/(?P<id>[^/]+)'
  1508. _RETURN_TYPE = 'video'
  1509. class CamFMShowIE(LazyLoadExtractor):
  1510. _module = 'yt_dlp.extractor.camfm'
  1511. IE_NAME = 'CamFMShow'
  1512. _VALID_URL = 'https?://(?:www\\.)?camfm\\.co\\.uk/shows/(?P<id>[^/]+)'
  1513. _RETURN_TYPE = 'playlist'
  1514. class CamModelsIE(LazyLoadExtractor):
  1515. _module = 'yt_dlp.extractor.cammodels'
  1516. IE_NAME = 'CamModels'
  1517. _VALID_URL = 'https?://(?:www\\.)?cammodels\\.com/cam/(?P<id>[^/?#&]+)'
  1518. class CamsodaIE(LazyLoadExtractor):
  1519. _module = 'yt_dlp.extractor.camsoda'
  1520. IE_NAME = 'Camsoda'
  1521. _VALID_URL = 'https?://www\\.camsoda\\.com/(?P<id>[\\w-]+)'
  1522. age_limit = 18
  1523. _RETURN_TYPE = 'video'
  1524. class CamtasiaEmbedIE(LazyLoadExtractor):
  1525. _module = 'yt_dlp.extractor.camtasia'
  1526. IE_NAME = 'CamtasiaEmbed'
  1527. _VALID_URL = False
  1528. class Canal1IE(LazyLoadExtractor):
  1529. _module = 'yt_dlp.extractor.canal1'
  1530. IE_NAME = 'Canal1'
  1531. _VALID_URL = 'https?://(?:www\\.|noticias\\.)?canal1\\.com\\.co/(?:[^?#&])+/(?P<id>[\\w-]+)'
  1532. _RETURN_TYPE = 'video'
  1533. class CanalAlphaIE(LazyLoadExtractor):
  1534. _module = 'yt_dlp.extractor.canalalpha'
  1535. IE_NAME = 'CanalAlpha'
  1536. _VALID_URL = 'https?://(?:www\\.)?canalalpha\\.ch/play/[^/]+/[^/]+/(?P<id>\\d+)/?.*'
  1537. _RETURN_TYPE = 'video'
  1538. class Canalc2IE(LazyLoadExtractor):
  1539. _module = 'yt_dlp.extractor.canalc2'
  1540. IE_NAME = 'canalc2.tv'
  1541. _VALID_URL = 'https?://(?:(?:www\\.)?canalc2\\.tv/video/|archives-canalc2\\.u-strasbg\\.fr/video\\.asp\\?.*\\bidVideo=)(?P<id>\\d+)'
  1542. _RETURN_TYPE = 'video'
  1543. class CanalplusIE(LazyLoadExtractor):
  1544. _module = 'yt_dlp.extractor.canalplus'
  1545. IE_NAME = 'Canalplus'
  1546. _VALID_URL = 'https?://(?:www\\.)?(?P<site>mycanal|piwiplus)\\.fr/(?:[^/]+/)*(?P<display_id>[^?/]+)(?:\\.html\\?.*\\bvid=|/p/)(?P<id>\\d+)'
  1547. IE_DESC = 'mycanal.fr and piwiplus.fr'
  1548. _RETURN_TYPE = 'video'
  1549. class CaracolTvPlayIE(LazyLoadExtractor):
  1550. _module = 'yt_dlp.extractor.caracoltv'
  1551. IE_NAME = 'CaracolTvPlay'
  1552. _VALID_URL = 'https?://play\\.caracoltv\\.com/videoDetails/(?P<id>[^/?#]+)'
  1553. _NETRC_MACHINE = 'caracoltv-play'
  1554. _RETURN_TYPE = 'playlist'
  1555. class CartoonNetworkIE(TurnerBaseIE):
  1556. _module = 'yt_dlp.extractor.cartoonnetwork'
  1557. IE_NAME = 'CartoonNetwork'
  1558. _VALID_URL = 'https?://(?:www\\.)?cartoonnetwork\\.com/video/(?:[^/]+/)+(?P<id>[^/?#]+)-(?:clip|episode)\\.html'
  1559. _RETURN_TYPE = 'video'
  1560. class CBCIE(LazyLoadExtractor):
  1561. _module = 'yt_dlp.extractor.cbc'
  1562. IE_NAME = 'cbc.ca'
  1563. _VALID_URL = 'https?://(?:www\\.)?cbc\\.ca/(?!player/)(?:[^/]+/)+(?P<id>[^/?#]+)'
  1564. _RETURN_TYPE = 'any'
  1565. @classmethod
  1566. def suitable(cls, url):
  1567. return False if CBCPlayerIE.suitable(url) else super().suitable(url)
  1568. class CBCGemIE(LazyLoadExtractor):
  1569. _module = 'yt_dlp.extractor.cbc'
  1570. IE_NAME = 'gem.cbc.ca'
  1571. _VALID_URL = 'https?://gem\\.cbc\\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s[0-9]+[a-z][0-9]+)'
  1572. _NETRC_MACHINE = 'cbcgem'
  1573. _RETURN_TYPE = 'video'
  1574. class CBCGemLiveIE(LazyLoadExtractor):
  1575. _module = 'yt_dlp.extractor.cbc'
  1576. IE_NAME = 'gem.cbc.ca:live'
  1577. _VALID_URL = 'https?://gem\\.cbc\\.ca/live(?:-event)?/(?P<id>\\d+)'
  1578. _RETURN_TYPE = 'video'
  1579. class CBCGemPlaylistIE(LazyLoadExtractor):
  1580. _module = 'yt_dlp.extractor.cbc'
  1581. IE_NAME = 'gem.cbc.ca:playlist'
  1582. _VALID_URL = 'https?://gem\\.cbc\\.ca/(?:media/)?(?P<id>(?P<show>[0-9a-z-]+)/s(?P<season>[0-9]+))/?(?:[?#]|$)'
  1583. _RETURN_TYPE = 'playlist'
  1584. class CBCPlayerIE(LazyLoadExtractor):
  1585. _module = 'yt_dlp.extractor.cbc'
  1586. IE_NAME = 'cbc.ca:player'
  1587. _VALID_URL = '(?:cbcplayer:|https?://(?:www\\.)?cbc\\.ca/(?:player/play/(?:video/)?|i/caffeine/syndicate/\\?mediaId=))(?P<id>(?:\\d\\.)?\\d+)'
  1588. _RETURN_TYPE = 'video'
  1589. class CBCPlayerPlaylistIE(LazyLoadExtractor):
  1590. _module = 'yt_dlp.extractor.cbc'
  1591. IE_NAME = 'cbc.ca:player:playlist'
  1592. _VALID_URL = 'https?://(?:www\\.)?cbc\\.ca/(?:player/)(?!play/)(?P<id>[^?#]+)'
  1593. _RETURN_TYPE = 'playlist'
  1594. class ParamountPressExpressIE(LazyLoadExtractor):
  1595. _module = 'yt_dlp.extractor.cbs'
  1596. IE_NAME = 'ParamountPressExpress'
  1597. _VALID_URL = 'https?://(?:www\\.)?paramountpressexpress\\.com(?:/[\\w-]+)+/(?P<yt>yt-)?video/?\\?watch=(?P<id>[\\w-]+)'
  1598. _RETURN_TYPE = 'video'
  1599. class CBSNewsBaseIE(LazyLoadExtractor):
  1600. _module = 'yt_dlp.extractor.cbsnews'
  1601. IE_NAME = 'CBSNewsBase'
  1602. class CBSLocalBaseIE(CBSNewsBaseIE):
  1603. _module = 'yt_dlp.extractor.cbsnews'
  1604. IE_NAME = 'CBSLocalBase'
  1605. class CBSLocalArticleIE(CBSLocalBaseIE):
  1606. _module = 'yt_dlp.extractor.cbsnews'
  1607. IE_NAME = 'CBSLocalArticle'
  1608. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/(?:atlanta|baltimore|boston|chicago|colorado|detroit|losangeles|miami|minnesota|newyork|philadelphia|pittsburgh|sacramento|sanfrancisco|texas)/news/(?P<id>[\\w-]+)'
  1609. _RETURN_TYPE = 'any'
  1610. class CBSLocalIE(CBSLocalBaseIE):
  1611. _module = 'yt_dlp.extractor.cbsnews'
  1612. IE_NAME = 'CBSLocal'
  1613. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/(?:atlanta|baltimore|boston|chicago|colorado|detroit|losangeles|miami|minnesota|newyork|philadelphia|pittsburgh|sacramento|sanfrancisco|texas)/(?:live/)?video/(?P<id>[\\w-]+)'
  1614. _RETURN_TYPE = 'video'
  1615. class CBSNewsLiveBaseIE(CBSNewsBaseIE):
  1616. _module = 'yt_dlp.extractor.cbsnews'
  1617. IE_NAME = 'CBSNewsLiveBase'
  1618. class CBSLocalLiveIE(CBSNewsLiveBaseIE):
  1619. _module = 'yt_dlp.extractor.cbsnews'
  1620. IE_NAME = 'CBSLocalLive'
  1621. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/(?P<id>atlanta|baltimore|boston|chicago|colorado|detroit|losangeles|miami|minnesota|newyork|philadelphia|pittsburgh|sacramento|sanfrancisco|texas)/live/?(?:[?#]|$)'
  1622. _RETURN_TYPE = 'video'
  1623. class CBSNewsEmbedIE(CBSNewsBaseIE):
  1624. _module = 'yt_dlp.extractor.cbsnews'
  1625. IE_NAME = 'cbsnews:embed'
  1626. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/embed/video[^#]*#(?P<id>.+)'
  1627. _RETURN_TYPE = 'video'
  1628. class CBSNewsIE(CBSNewsBaseIE):
  1629. _module = 'yt_dlp.extractor.cbsnews'
  1630. IE_NAME = 'cbsnews'
  1631. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/(?:news|video)/(?P<id>[\\w-]+)'
  1632. IE_DESC = 'CBS News'
  1633. _RETURN_TYPE = 'any'
  1634. class CBSNewsLiveIE(CBSNewsLiveBaseIE):
  1635. _module = 'yt_dlp.extractor.cbsnews'
  1636. IE_NAME = 'cbsnews:live'
  1637. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/live/?(?:[?#]|$)'
  1638. IE_DESC = 'CBS News Livestream'
  1639. _RETURN_TYPE = 'video'
  1640. class CBSNewsLiveVideoIE(LazyLoadExtractor):
  1641. _module = 'yt_dlp.extractor.cbsnews'
  1642. IE_NAME = 'cbsnews:livevideo'
  1643. _VALID_URL = 'https?://(?:www\\.)?cbsnews\\.com/live/video/(?P<id>[^/?#]+)'
  1644. IE_DESC = 'CBS News Live Videos'
  1645. _RETURN_TYPE = 'video'
  1646. class CBSSportsEmbedIE(LazyLoadExtractor):
  1647. _module = 'yt_dlp.extractor.cbssports'
  1648. IE_NAME = 'cbssports:embed'
  1649. _VALID_URL = '(?ix)https?://(?:(?:www\\.)?cbs|embed\\.247)sports\\.com/player/embed.+?\n (?:\n ids%3D(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})|\n pcid%3D(?P<pcid>\\d+)\n )'
  1650. _WORKING = False
  1651. class CBSSportsBaseIE(LazyLoadExtractor):
  1652. _module = 'yt_dlp.extractor.cbssports'
  1653. IE_NAME = 'CBSSportsBase'
  1654. class CBSSportsIE(CBSSportsBaseIE):
  1655. _module = 'yt_dlp.extractor.cbssports'
  1656. IE_NAME = 'cbssports'
  1657. _VALID_URL = 'https?://(?:www\\.)?cbssports\\.com/[^/]+/video/(?P<id>[^/?#&]+)'
  1658. _WORKING = False
  1659. _RETURN_TYPE = 'video'
  1660. class TwentyFourSevenSportsIE(CBSSportsBaseIE):
  1661. _module = 'yt_dlp.extractor.cbssports'
  1662. IE_NAME = '247sports'
  1663. _VALID_URL = 'https?://(?:www\\.)?247sports\\.com/Video/(?:[^/?#&]+-)?(?P<id>\\d+)'
  1664. _WORKING = False
  1665. _RETURN_TYPE = 'video'
  1666. class CCCIE(LazyLoadExtractor):
  1667. _module = 'yt_dlp.extractor.ccc'
  1668. IE_NAME = 'media.ccc.de'
  1669. _VALID_URL = 'https?://(?:www\\.)?media\\.ccc\\.de/v/(?P<id>[^/?#&]+)'
  1670. _RETURN_TYPE = 'video'
  1671. class CCCPlaylistIE(LazyLoadExtractor):
  1672. _module = 'yt_dlp.extractor.ccc'
  1673. IE_NAME = 'media.ccc.de:lists'
  1674. _VALID_URL = 'https?://(?:www\\.)?media\\.ccc\\.de/c/(?P<id>[^/?#&]+)'
  1675. _RETURN_TYPE = 'playlist'
  1676. class CCMAIE(LazyLoadExtractor):
  1677. _module = 'yt_dlp.extractor.ccma'
  1678. IE_NAME = 'CCMA'
  1679. _VALID_URL = 'https?://(?:www\\.)?3cat\\.cat/(?:3cat|tv3/sx3)/[^/?#]+/(?P<type>video|audio)/(?P<id>\\d+)'
  1680. IE_DESC = '3Cat, TV3 and Catalunya Ràdio'
  1681. age_limit = 13
  1682. _RETURN_TYPE = 'video'
  1683. class CCTVIE(LazyLoadExtractor):
  1684. _module = 'yt_dlp.extractor.cctv'
  1685. IE_NAME = 'CCTV'
  1686. _VALID_URL = 'https?://(?:(?:[^/]+)\\.(?:cntv|cctv)\\.(?:com|cn)|(?:www\\.)?ncpa-classic\\.com)/(?:[^/]+/)*?(?P<id>[^/?#&]+?)(?:/index)?(?:\\.s?html|[?#&]|$)'
  1687. IE_DESC = '央视网'
  1688. _RETURN_TYPE = 'video'
  1689. class CDAIE(LazyLoadExtractor):
  1690. _module = 'yt_dlp.extractor.cda'
  1691. IE_NAME = 'CDA'
  1692. _VALID_URL = 'https?://(?:(?:www\\.)?cda\\.pl/video|ebd\\.cda\\.pl/[0-9]+x[0-9]+)/(?P<id>[0-9a-z]+)'
  1693. _NETRC_MACHINE = 'cdapl'
  1694. age_limit = 18
  1695. _RETURN_TYPE = 'video'
  1696. class CDAFolderIE(LazyLoadExtractor):
  1697. _module = 'yt_dlp.extractor.cda'
  1698. IE_NAME = 'CDAFolder'
  1699. _VALID_URL = 'https?://(?:www\\.)?cda\\.pl/(?P<channel>\\w+)/folder/(?P<id>\\d+)'
  1700. _RETURN_TYPE = 'playlist'
  1701. class VidyardBaseIE(LazyLoadExtractor):
  1702. _module = 'yt_dlp.extractor.vidyard'
  1703. IE_NAME = 'VidyardBase'
  1704. class CellebriteIE(VidyardBaseIE):
  1705. _module = 'yt_dlp.extractor.cellebrite'
  1706. IE_NAME = 'Cellebrite'
  1707. _VALID_URL = 'https?://cellebrite\\.com/(?:\\w+)?/(?P<id>[\\w-]+)'
  1708. _RETURN_TYPE = 'video'
  1709. class CeskaTelevizeIE(LazyLoadExtractor):
  1710. _module = 'yt_dlp.extractor.ceskatelevize'
  1711. IE_NAME = 'CeskaTelevize'
  1712. _VALID_URL = 'https?://(?:www\\.)?ceskatelevize\\.cz/(?:ivysilani|porady|zive)/(?:[^/?#&]+/)*(?P<id>[^/#?]+)'
  1713. _RETURN_TYPE = 'any'
  1714. class CGTNIE(LazyLoadExtractor):
  1715. _module = 'yt_dlp.extractor.cgtn'
  1716. IE_NAME = 'CGTN'
  1717. _VALID_URL = 'https?://news\\.cgtn\\.com/news/[0-9]{4}-[0-9]{2}-[0-9]{2}/[a-zA-Z0-9-]+-(?P<id>[a-zA-Z0-9-]+)/index\\.html'
  1718. _RETURN_TYPE = 'video'
  1719. class CharlieRoseIE(LazyLoadExtractor):
  1720. _module = 'yt_dlp.extractor.charlierose'
  1721. IE_NAME = 'CharlieRose'
  1722. _VALID_URL = 'https?://(?:www\\.)?charlierose\\.com/(?:video|episode)(?:s|/player)/(?P<id>\\d+)'
  1723. _RETURN_TYPE = 'video'
  1724. class ChaturbateIE(LazyLoadExtractor):
  1725. _module = 'yt_dlp.extractor.chaturbate'
  1726. IE_NAME = 'Chaturbate'
  1727. _VALID_URL = 'https?://(?:[^/]+\\.)?chaturbate\\.(?P<tld>com|eu|global)/(?:fullvideo/?\\?.*?\\bb=)?(?P<id>[^/?&#]+)'
  1728. age_limit = 18
  1729. _RETURN_TYPE = 'video'
  1730. class ChilloutzoneIE(LazyLoadExtractor):
  1731. _module = 'yt_dlp.extractor.chilloutzone'
  1732. IE_NAME = 'Chilloutzone'
  1733. _VALID_URL = 'https?://(?:www\\.)?chilloutzone\\.net/video/(?P<id>[\\w-]+)\\.html'
  1734. _RETURN_TYPE = 'video'
  1735. class CHZZKLiveIE(LazyLoadExtractor):
  1736. _module = 'yt_dlp.extractor.chzzk'
  1737. IE_NAME = 'chzzk:live'
  1738. _VALID_URL = 'https?://chzzk\\.naver\\.com/live/(?P<id>[\\da-f]+)'
  1739. _RETURN_TYPE = 'video'
  1740. class CHZZKVideoIE(LazyLoadExtractor):
  1741. _module = 'yt_dlp.extractor.chzzk'
  1742. IE_NAME = 'chzzk:video'
  1743. _VALID_URL = 'https?://chzzk\\.naver\\.com/video/(?P<id>\\d+)'
  1744. _RETURN_TYPE = 'video'
  1745. class HBOBaseIE(LazyLoadExtractor):
  1746. _module = 'yt_dlp.extractor.hbo'
  1747. IE_NAME = 'HBOBase'
  1748. class CinemaxIE(HBOBaseIE):
  1749. _module = 'yt_dlp.extractor.cinemax'
  1750. IE_NAME = 'Cinemax'
  1751. _VALID_URL = 'https?://(?:www\\.)?cinemax\\.com/(?P<path>[^/]+/video/[0-9a-z-]+-(?P<id>\\d+))'
  1752. _WORKING = False
  1753. _RETURN_TYPE = 'video'
  1754. class CinetecaMilanoIE(LazyLoadExtractor):
  1755. _module = 'yt_dlp.extractor.cinetecamilano'
  1756. IE_NAME = 'CinetecaMilano'
  1757. _VALID_URL = 'https?://(?:www\\.)?cinetecamilano\\.it/film/(?P<id>\\d+)'
  1758. _RETURN_TYPE = 'video'
  1759. class CineverseBaseIE(LazyLoadExtractor):
  1760. _module = 'yt_dlp.extractor.cineverse'
  1761. IE_NAME = 'CineverseBase'
  1762. class CineverseDetailsIE(CineverseBaseIE):
  1763. _module = 'yt_dlp.extractor.cineverse'
  1764. IE_NAME = 'CineverseDetails'
  1765. _VALID_URL = 'https?://www\\.(?P<host>cineverse\\.com|asiancrush\\.com|dovechannel\\.com|screambox\\.com|midnightpulp\\.com|fandor\\.com|retrocrush\\.tv)/details/(?P<id>[A-Z0-9]+)'
  1766. _RETURN_TYPE = 'any'
  1767. class CineverseIE(CineverseBaseIE):
  1768. _module = 'yt_dlp.extractor.cineverse'
  1769. IE_NAME = 'Cineverse'
  1770. _VALID_URL = 'https?://www\\.(?P<host>cineverse\\.com|asiancrush\\.com|dovechannel\\.com|screambox\\.com|midnightpulp\\.com|fandor\\.com|retrocrush\\.tv)/watch/(?P<id>[A-Z0-9]+)'
  1771. age_limit = 13
  1772. _RETURN_TYPE = 'video'
  1773. class CiscoLiveBaseIE(LazyLoadExtractor):
  1774. _module = 'yt_dlp.extractor.ciscolive'
  1775. IE_NAME = 'CiscoLiveBase'
  1776. class CiscoLiveSearchIE(CiscoLiveBaseIE):
  1777. _module = 'yt_dlp.extractor.ciscolive'
  1778. IE_NAME = 'CiscoLiveSearch'
  1779. _VALID_URL = 'https?://(?:www\\.)?ciscolive(?:\\.cisco)?\\.com/(?:global/)?on-demand-library(?:\\.html|/)'
  1780. _RETURN_TYPE = 'playlist'
  1781. @classmethod
  1782. def suitable(cls, url):
  1783. return False if CiscoLiveSessionIE.suitable(url) else super().suitable(url)
  1784. class CiscoLiveSessionIE(CiscoLiveBaseIE):
  1785. _module = 'yt_dlp.extractor.ciscolive'
  1786. IE_NAME = 'CiscoLiveSession'
  1787. _VALID_URL = 'https?://(?:www\\.)?ciscolive(?:\\.cisco)?\\.com/[^#]*#/session/(?P<id>[^/?&]+)'
  1788. _RETURN_TYPE = 'video'
  1789. class CiscoWebexIE(LazyLoadExtractor):
  1790. _module = 'yt_dlp.extractor.ciscowebex'
  1791. IE_NAME = 'ciscowebex'
  1792. _VALID_URL = '(?x)\n (?P<url>https?://(?P<subdomain>[^/#?]*)\\.webex\\.com/(?:\n (?P<siteurl_1>[^/#?]*)/(?:ldr|lsr).php\\?(?:[^#]*&)*RCID=(?P<rcid>[0-9a-f]{32})|\n (?:recordingservice|webappng)/sites/(?P<siteurl_2>[^/#?]*)/recording/(?:playback/|play/)?(?P<id>[0-9a-f]{32})\n ))'
  1793. IE_DESC = 'Cisco Webex'
  1794. class CJSWIE(LazyLoadExtractor):
  1795. _module = 'yt_dlp.extractor.cjsw'
  1796. IE_NAME = 'CJSW'
  1797. _VALID_URL = 'https?://(?:www\\.)?cjsw\\.com/program/(?P<program>[^/]+)/episode/(?P<id>\\d+)'
  1798. _RETURN_TYPE = 'video'
  1799. class ClipchampIE(LazyLoadExtractor):
  1800. _module = 'yt_dlp.extractor.clipchamp'
  1801. IE_NAME = 'Clipchamp'
  1802. _VALID_URL = 'https?://(?:www\\.)?clipchamp\\.com/watch/(?P<id>[\\w-]+)'
  1803. _RETURN_TYPE = 'video'
  1804. class ClippitIE(LazyLoadExtractor):
  1805. _module = 'yt_dlp.extractor.clippit'
  1806. IE_NAME = 'Clippit'
  1807. _VALID_URL = 'https?://(?:www\\.)?clippituser\\.tv/c/(?P<id>[a-z]+)'
  1808. _RETURN_TYPE = 'video'
  1809. class OnetBaseIE(LazyLoadExtractor):
  1810. _module = 'yt_dlp.extractor.onet'
  1811. IE_NAME = 'OnetBase'
  1812. class ClipRsIE(OnetBaseIE):
  1813. _module = 'yt_dlp.extractor.cliprs'
  1814. IE_NAME = 'ClipRs'
  1815. _VALID_URL = 'https?://(?:www\\.)?clip\\.rs/(?P<id>[^/]+)/\\d+'
  1816. _WORKING = False
  1817. _RETURN_TYPE = 'video'
  1818. class CloserToTruthIE(LazyLoadExtractor):
  1819. _module = 'yt_dlp.extractor.closertotruth'
  1820. IE_NAME = 'CloserToTruth'
  1821. _VALID_URL = 'https?://(?:www\\.)?closertotruth\\.com/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  1822. _WORKING = False
  1823. _RETURN_TYPE = 'any'
  1824. class CloudflareStreamIE(LazyLoadExtractor):
  1825. _module = 'yt_dlp.extractor.cloudflarestream'
  1826. IE_NAME = 'CloudflareStream'
  1827. _VALID_URL = 'https?://(?:(?:(?:watch|iframe|customer-\\w+)\\.)?(?P<domain>(?:cloudflarestream\\.com|(?:videodelivery|bytehighway)\\.net))/|(?:embed\\.|(?:(?:watch|iframe|customer-\\w+)\\.)?)(?:cloudflarestream\\.com|(?:videodelivery|bytehighway)\\.net)/embed/[^/?#]+\\.js\\?(?:[^#]+&)?video=)(?P<id>[\\da-f]{32}|eyJ[\\w-]+\\.[\\w-]+\\.[\\w-]+)'
  1828. _RETURN_TYPE = 'video'
  1829. class CloudyCDNIE(LazyLoadExtractor):
  1830. _module = 'yt_dlp.extractor.cloudycdn'
  1831. IE_NAME = 'CloudyCDN'
  1832. _VALID_URL = '(?:https?:)?//embed\\.cloudycdn\\.services/(?P<site_id>[^/?#]+)/media/(?P<id>[\\w-]+)'
  1833. _RETURN_TYPE = 'video'
  1834. class ClubicIE(LazyLoadExtractor):
  1835. _module = 'yt_dlp.extractor.clubic'
  1836. IE_NAME = 'Clubic'
  1837. _VALID_URL = 'https?://(?:www\\.)?clubic\\.com/video/(?:[^/]+/)*video.*-(?P<id>[0-9]+)\\.html'
  1838. _WORKING = False
  1839. _RETURN_TYPE = 'video'
  1840. class ClypIE(LazyLoadExtractor):
  1841. _module = 'yt_dlp.extractor.clyp'
  1842. IE_NAME = 'Clyp'
  1843. _VALID_URL = 'https?://(?:www\\.)?clyp\\.it/(?P<id>[a-z0-9]+)'
  1844. _RETURN_TYPE = 'video'
  1845. class CNBCVideoIE(LazyLoadExtractor):
  1846. _module = 'yt_dlp.extractor.cnbc'
  1847. IE_NAME = 'CNBCVideo'
  1848. _VALID_URL = 'https?://(?:www\\.)?cnbc\\.com/video/(?:[^/?#]+/)+(?P<id>[^./?#&]+)\\.html'
  1849. _RETURN_TYPE = 'video'
  1850. class CNNIE(LazyLoadExtractor):
  1851. _module = 'yt_dlp.extractor.cnn'
  1852. IE_NAME = 'CNN'
  1853. _VALID_URL = 'https?://(?:(?:edition|www|money|cnnespanol)\\.)?cnn\\.com/(?!audio/)(?P<display_id>[^?#]+?)(?:[?#]|$|/index\\.html)'
  1854. _RETURN_TYPE = 'any'
  1855. class CNNIndonesiaIE(LazyLoadExtractor):
  1856. _module = 'yt_dlp.extractor.cnn'
  1857. IE_NAME = 'CNNIndonesia'
  1858. _VALID_URL = 'https?://www\\.cnnindonesia\\.com/[\\w-]+/(?P<upload_date>\\d{8})\\d+-\\d+-(?P<id>\\d+)/(?P<display_id>[\\w-]+)'
  1859. _RETURN_TYPE = 'video'
  1860. class ComedyCentralIE(MTVServicesInfoExtractor):
  1861. _module = 'yt_dlp.extractor.comedycentral'
  1862. IE_NAME = 'ComedyCentral'
  1863. _VALID_URL = 'https?://(?:www\\.)?cc\\.com/(?:episodes|video(?:-clips)?|collection-playlist|movies)/(?P<id>[0-9a-z]{6})'
  1864. _RETURN_TYPE = 'video'
  1865. class ComedyCentralTVIE(MTVServicesInfoExtractor):
  1866. _module = 'yt_dlp.extractor.comedycentral'
  1867. IE_NAME = 'ComedyCentralTV'
  1868. _VALID_URL = 'https?://(?:www\\.)?comedycentral\\.tv/folgen/(?P<id>[0-9a-z]{6})'
  1869. _RETURN_TYPE = 'video'
  1870. class BlobIE(LazyLoadExtractor):
  1871. _module = 'yt_dlp.extractor.commonmistakes'
  1872. IE_NAME = 'Blob'
  1873. _VALID_URL = 'blob:'
  1874. IE_DESC = False
  1875. class CommonMistakesIE(LazyLoadExtractor):
  1876. _module = 'yt_dlp.extractor.commonmistakes'
  1877. IE_NAME = 'CommonMistakes'
  1878. _VALID_URL = '(?:url|URL|yt-dlp)$'
  1879. IE_DESC = False
  1880. class UnicodeBOMIE(LazyLoadExtractor):
  1881. _module = 'yt_dlp.extractor.commonmistakes'
  1882. IE_NAME = 'UnicodeBOM'
  1883. _VALID_URL = '(?P<bom>\\ufeff)(?P<id>.*)$'
  1884. IE_DESC = False
  1885. class MmsIE(LazyLoadExtractor):
  1886. _module = 'yt_dlp.extractor.commonprotocols'
  1887. IE_NAME = 'Mms'
  1888. _VALID_URL = '(?i)mms://.+'
  1889. IE_DESC = False
  1890. _RETURN_TYPE = 'video'
  1891. class RtmpIE(LazyLoadExtractor):
  1892. _module = 'yt_dlp.extractor.commonprotocols'
  1893. IE_NAME = 'Rtmp'
  1894. _VALID_URL = '(?i)rtmp[est]?://.+'
  1895. IE_DESC = False
  1896. class ViewSourceIE(LazyLoadExtractor):
  1897. _module = 'yt_dlp.extractor.commonprotocols'
  1898. IE_NAME = 'ViewSource'
  1899. _VALID_URL = 'view-source:(?P<url>.+)'
  1900. IE_DESC = False
  1901. class CondeNastIE(LazyLoadExtractor):
  1902. _module = 'yt_dlp.extractor.condenast'
  1903. IE_NAME = 'CondeNast'
  1904. _VALID_URL = '(?x)https?://(?:video|www|player(?:-backend)?)\\.(?:allure|architecturaldigest|arstechnica|bonappetit|brides|cnevids|cntraveler|details|epicurious|glamour|golfdigest|gq|newyorker|self|teenvogue|vanityfair|vogue|wired|wmagazine)\\.com/\n (?:\n (?:\n embed(?:js)?|\n (?:script|inline)/video\n )/(?P<id>[0-9a-f]{24})(?:/(?P<player_id>[0-9a-f]{24}))?(?:.+?\\btarget=(?P<target>[^&]+))?|\n (?P<type>watch|series|video)/(?P<display_id>[^/?#]+)\n )'
  1905. IE_DESC = 'Condé Nast media group: Allure, Architectural Digest, Ars Technica, Bon Appétit, Brides, Condé Nast, Condé Nast Traveler, Details, Epicurious, GQ, Glamour, Golf Digest, SELF, Teen Vogue, The New Yorker, Vanity Fair, Vogue, W Magazine, WIRED'
  1906. _RETURN_TYPE = 'video'
  1907. class CONtvIE(LazyLoadExtractor):
  1908. _module = 'yt_dlp.extractor.contv'
  1909. IE_NAME = 'CONtv'
  1910. _VALID_URL = 'https?://(?:www\\.)?contv\\.com/details-movie/(?P<id>[^/]+)'
  1911. _RETURN_TYPE = 'any'
  1912. class CoubIE(LazyLoadExtractor):
  1913. _module = 'yt_dlp.extractor.coub'
  1914. IE_NAME = 'Coub'
  1915. _VALID_URL = '(?:coub:|https?://(?:coub\\.com/(?:view|embed|coubs)/|c-cdn\\.coub\\.com/fb-player\\.swf\\?.*\\bcoub(?:ID|id)=))(?P<id>[\\da-z]+)'
  1916. _RETURN_TYPE = 'video'
  1917. class CozyTVIE(LazyLoadExtractor):
  1918. _module = 'yt_dlp.extractor.cozytv'
  1919. IE_NAME = 'CozyTV'
  1920. _VALID_URL = 'https?://(?:www\\.)?cozy\\.tv/(?P<uploader>[^/]+)/replays/(?P<id>[^/$#&?]+)'
  1921. _RETURN_TYPE = 'video'
  1922. class CPACIE(LazyLoadExtractor):
  1923. _module = 'yt_dlp.extractor.cpac'
  1924. IE_NAME = 'cpac'
  1925. _VALID_URL = 'https?://(?:www\\.)?cpac\\.ca/(?P<fr>l-)?episode\\?id=(?P<id>[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12})'
  1926. _RETURN_TYPE = 'video'
  1927. class CPACPlaylistIE(LazyLoadExtractor):
  1928. _module = 'yt_dlp.extractor.cpac'
  1929. IE_NAME = 'cpac:playlist'
  1930. _VALID_URL = '(?i)https?://(?:www\\.)?cpac\\.ca/(?:program|search|(?P<fr>emission|rechercher))\\?(?:[^&]+&)*?(?P<id>(?:id=\\d+|programId=\\d+|key=[^&]+))'
  1931. _RETURN_TYPE = 'playlist'
  1932. class CrackedIE(LazyLoadExtractor):
  1933. _module = 'yt_dlp.extractor.cracked'
  1934. IE_NAME = 'Cracked'
  1935. _VALID_URL = 'https?://(?:www\\.)?cracked\\.com/video_(?P<id>\\d+)_[\\da-z-]+\\.html'
  1936. _RETURN_TYPE = 'video'
  1937. class CrackleIE(LazyLoadExtractor):
  1938. _module = 'yt_dlp.extractor.crackle'
  1939. IE_NAME = 'Crackle'
  1940. _VALID_URL = '(?:crackle:|https?://(?:(?:www|m)\\.)?(?:sony)?crackle\\.com/(?:playlist/\\d+/|(?:[^/]+/)+))(?P<id>\\d+)'
  1941. age_limit = 17
  1942. _RETURN_TYPE = 'video'
  1943. class CraftsyIE(LazyLoadExtractor):
  1944. _module = 'yt_dlp.extractor.craftsy'
  1945. IE_NAME = 'Craftsy'
  1946. _VALID_URL = 'https?://www\\.craftsy\\.com/class/(?P<id>[\\w-]+)'
  1947. _RETURN_TYPE = 'playlist'
  1948. class CrooksAndLiarsIE(LazyLoadExtractor):
  1949. _module = 'yt_dlp.extractor.crooksandliars'
  1950. IE_NAME = 'CrooksAndLiars'
  1951. _VALID_URL = 'https?://embed\\.crooksandliars\\.com/(?:embed|v)/(?P<id>[A-Za-z0-9]+)'
  1952. _RETURN_TYPE = 'video'
  1953. class CrowdBunkerChannelIE(LazyLoadExtractor):
  1954. _module = 'yt_dlp.extractor.crowdbunker'
  1955. IE_NAME = 'CrowdBunkerChannel'
  1956. _VALID_URL = 'https?://(?:www\\.)?crowdbunker\\.com/@(?P<id>[^/?#$&]+)'
  1957. _RETURN_TYPE = 'playlist'
  1958. class CrowdBunkerIE(LazyLoadExtractor):
  1959. _module = 'yt_dlp.extractor.crowdbunker'
  1960. IE_NAME = 'CrowdBunker'
  1961. _VALID_URL = 'https?://(?:www\\.)?crowdbunker\\.com/v/(?P<id>[^/?#$&]+)'
  1962. _RETURN_TYPE = 'video'
  1963. class CrtvgIE(LazyLoadExtractor):
  1964. _module = 'yt_dlp.extractor.crtvg'
  1965. IE_NAME = 'Crtvg'
  1966. _VALID_URL = 'https?://(?:www\\.)?crtvg\\.es/tvg/a-carta/(?P<id>[^/#?]+)'
  1967. _RETURN_TYPE = 'video'
  1968. class CrunchyrollBaseIE(LazyLoadExtractor):
  1969. _module = 'yt_dlp.extractor.crunchyroll'
  1970. IE_NAME = 'CrunchyrollBase'
  1971. _NETRC_MACHINE = 'crunchyroll'
  1972. class CrunchyrollArtistIE(CrunchyrollBaseIE):
  1973. _module = 'yt_dlp.extractor.crunchyroll'
  1974. IE_NAME = 'crunchyroll:artist'
  1975. _VALID_URL = '(?x)\n https?://(?:www\\.)?crunchyroll\\.com/\n (?P<lang>(?:\\w{2}(?:-\\w{2})?/)?)\n artist/(?P<id>\\w{10})'
  1976. _NETRC_MACHINE = 'crunchyroll'
  1977. _RETURN_TYPE = 'playlist'
  1978. class CrunchyrollCmsBaseIE(CrunchyrollBaseIE):
  1979. _module = 'yt_dlp.extractor.crunchyroll'
  1980. IE_NAME = 'CrunchyrollCmsBase'
  1981. _NETRC_MACHINE = 'crunchyroll'
  1982. class CrunchyrollBetaIE(CrunchyrollCmsBaseIE):
  1983. _module = 'yt_dlp.extractor.crunchyroll'
  1984. IE_NAME = 'crunchyroll'
  1985. _VALID_URL = '(?x)\n https?://(?:beta\\.|www\\.)?crunchyroll\\.com/\n (?:(?P<lang>\\w{2}(?:-\\w{2})?)/)?\n watch/(?!concert|musicvideo)(?P<id>\\w+)'
  1986. _NETRC_MACHINE = 'crunchyroll'
  1987. age_limit = 14
  1988. _RETURN_TYPE = 'video'
  1989. class CrunchyrollBetaShowIE(CrunchyrollCmsBaseIE):
  1990. _module = 'yt_dlp.extractor.crunchyroll'
  1991. IE_NAME = 'crunchyroll:playlist'
  1992. _VALID_URL = '(?x)\n https?://(?:beta\\.|www\\.)?crunchyroll\\.com/\n (?P<lang>(?:\\w{2}(?:-\\w{2})?/)?)\n series/(?P<id>\\w+)'
  1993. _NETRC_MACHINE = 'crunchyroll'
  1994. age_limit = 14
  1995. _RETURN_TYPE = 'playlist'
  1996. class CrunchyrollMusicIE(CrunchyrollBaseIE):
  1997. _module = 'yt_dlp.extractor.crunchyroll'
  1998. IE_NAME = 'crunchyroll:music'
  1999. _VALID_URL = '(?x)\n https?://(?:www\\.)?crunchyroll\\.com/\n (?P<lang>(?:\\w{2}(?:-\\w{2})?/)?)\n watch/(?P<type>concert|musicvideo)/(?P<id>\\w+)'
  2000. _NETRC_MACHINE = 'crunchyroll'
  2001. _RETURN_TYPE = 'video'
  2002. class CSpanCongressIE(LazyLoadExtractor):
  2003. _module = 'yt_dlp.extractor.cspan'
  2004. IE_NAME = 'CSpanCongress'
  2005. _VALID_URL = 'https?://(?:www\\.)?c-span\\.org/congress/'
  2006. _RETURN_TYPE = 'video'
  2007. class CSpanIE(LazyLoadExtractor):
  2008. _module = 'yt_dlp.extractor.cspan'
  2009. IE_NAME = 'CSpan'
  2010. _VALID_URL = 'https?://(?:www\\.)?c-span\\.org/video/\\?(?P<id>[0-9a-f]+)'
  2011. IE_DESC = 'C-SPAN'
  2012. _RETURN_TYPE = 'any'
  2013. class CtsNewsIE(LazyLoadExtractor):
  2014. _module = 'yt_dlp.extractor.ctsnews'
  2015. IE_NAME = 'CtsNews'
  2016. _VALID_URL = 'https?://news\\.cts\\.com\\.tw/[a-z]+/[a-z]+/\\d+/(?P<id>\\d+)\\.html'
  2017. IE_DESC = '華視新聞'
  2018. _RETURN_TYPE = 'video'
  2019. class CTVIE(LazyLoadExtractor):
  2020. _module = 'yt_dlp.extractor.ctv'
  2021. IE_NAME = 'CTV'
  2022. _VALID_URL = 'https?://(?:www\\.)?ctv\\.ca/(?P<id>(?:show|movie)s/[^/]+/[^/?#&]+)'
  2023. _RETURN_TYPE = 'video'
  2024. class CTVNewsIE(LazyLoadExtractor):
  2025. _module = 'yt_dlp.extractor.ctvnews'
  2026. IE_NAME = 'CTVNews'
  2027. _VALID_URL = ['https?://(?:[^.]+\\.)?ctvnews\\.ca/video/c(?P<id>\\d{5,})', 'https?://(?:[^.]+\\.)?ctvnews\\.ca/video(?:-gallery)?/?\\?clipId=(?P<id>\\d{5,})', 'https?://(?:[^.]+\\.)?ctvnews\\.ca/video/?\\?(?:playlist|bin)Id=(?P<id>\\d\\.\\d{5,})', 'https?://(?:[^.]+\\.)?ctvnews\\.ca/(?!video/)[^?#]*?(?P<id>\\d\\.\\d{5,})/?(?:$|[?#])', 'https?://(?:[^.]+\\.)?ctvnews\\.ca/(?!video/)[^?#]+\\?binId=(?P<id>\\d\\.\\d{5,})']
  2028. _RETURN_TYPE = 'any'
  2029. class CultureUnpluggedIE(LazyLoadExtractor):
  2030. _module = 'yt_dlp.extractor.cultureunplugged'
  2031. IE_NAME = 'CultureUnplugged'
  2032. _VALID_URL = 'https?://(?:www\\.)?cultureunplugged\\.com/documentary/watch-online/play/(?P<id>\\d+)(?:/(?P<display_id>[^/]+))?'
  2033. _RETURN_TYPE = 'video'
  2034. class CuriosityStreamBaseIE(LazyLoadExtractor):
  2035. _module = 'yt_dlp.extractor.curiositystream'
  2036. IE_NAME = 'CuriosityStreamBase'
  2037. _NETRC_MACHINE = 'curiositystream'
  2038. class CuriosityStreamCollectionBaseIE(CuriosityStreamBaseIE):
  2039. _module = 'yt_dlp.extractor.curiositystream'
  2040. IE_NAME = 'CuriosityStreamCollectionBase'
  2041. _NETRC_MACHINE = 'curiositystream'
  2042. class CuriosityStreamCollectionsIE(CuriosityStreamCollectionBaseIE):
  2043. _module = 'yt_dlp.extractor.curiositystream'
  2044. IE_NAME = 'curiositystream:collections'
  2045. _VALID_URL = 'https?://(?:app\\.)?curiositystream\\.com/collections/(?P<id>\\d+)'
  2046. _NETRC_MACHINE = 'curiositystream'
  2047. _RETURN_TYPE = 'playlist'
  2048. class CuriosityStreamIE(CuriosityStreamBaseIE):
  2049. _module = 'yt_dlp.extractor.curiositystream'
  2050. IE_NAME = 'curiositystream'
  2051. _VALID_URL = 'https?://(?:app\\.)?curiositystream\\.com/video/(?P<id>\\d+)'
  2052. _NETRC_MACHINE = 'curiositystream'
  2053. _RETURN_TYPE = 'video'
  2054. class CuriosityStreamSeriesIE(CuriosityStreamCollectionBaseIE):
  2055. _module = 'yt_dlp.extractor.curiositystream'
  2056. IE_NAME = 'curiositystream:series'
  2057. _VALID_URL = 'https?://(?:app\\.)?curiositystream\\.com/(?:series|collection)/(?P<id>\\d+)'
  2058. _NETRC_MACHINE = 'curiositystream'
  2059. _RETURN_TYPE = 'playlist'
  2060. class CWTVIE(LazyLoadExtractor):
  2061. _module = 'yt_dlp.extractor.cwtv'
  2062. IE_NAME = 'CWTV'
  2063. _VALID_URL = 'https?://(?:www\\.)?cw(?:tv(?:pr)?|seed)\\.com/(?:shows/)?(?:[^/]+/)+[^?]*\\?.*\\b(?:play|watch)=(?P<id>[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})'
  2064. age_limit = 14
  2065. _RETURN_TYPE = 'video'
  2066. class CybraryBaseIE(LazyLoadExtractor):
  2067. _module = 'yt_dlp.extractor.cybrary'
  2068. IE_NAME = 'CybraryBase'
  2069. _NETRC_MACHINE = 'cybrary'
  2070. class CybraryCourseIE(CybraryBaseIE):
  2071. _module = 'yt_dlp.extractor.cybrary'
  2072. IE_NAME = 'CybraryCourse'
  2073. _VALID_URL = 'https?://app\\.cybrary\\.it/browse/course/(?P<id>[\\w-]+)/?(?:$|[#?])'
  2074. _NETRC_MACHINE = 'cybrary'
  2075. _RETURN_TYPE = 'playlist'
  2076. class CybraryIE(CybraryBaseIE):
  2077. _module = 'yt_dlp.extractor.cybrary'
  2078. IE_NAME = 'Cybrary'
  2079. _VALID_URL = 'https?://app\\.cybrary\\.it/immersive/(?P<enrollment>[0-9]+)/activity/(?P<id>[0-9]+)'
  2080. _NETRC_MACHINE = 'cybrary'
  2081. _RETURN_TYPE = 'video'
  2082. class DacastBaseIE(LazyLoadExtractor):
  2083. _module = 'yt_dlp.extractor.dacast'
  2084. IE_NAME = 'DacastBase'
  2085. _VALID_URL = 'https?://iframe\\.dacast\\.com/None/(?P<user_id>[\\w-]+)/(?P<id>[\\w-]+)'
  2086. class DacastPlaylistIE(DacastBaseIE):
  2087. _module = 'yt_dlp.extractor.dacast'
  2088. IE_NAME = 'DacastPlaylist'
  2089. _VALID_URL = 'https?://iframe\\.dacast\\.com/playlist/(?P<user_id>[\\w-]+)/(?P<id>[\\w-]+)'
  2090. _RETURN_TYPE = 'playlist'
  2091. class DacastVODIE(DacastBaseIE):
  2092. _module = 'yt_dlp.extractor.dacast'
  2093. IE_NAME = 'DacastVOD'
  2094. _VALID_URL = 'https?://iframe\\.dacast\\.com/vod/(?P<user_id>[\\w-]+)/(?P<id>[\\w-]+)'
  2095. _RETURN_TYPE = 'video'
  2096. class DailyMailIE(LazyLoadExtractor):
  2097. _module = 'yt_dlp.extractor.dailymail'
  2098. IE_NAME = 'DailyMail'
  2099. _VALID_URL = 'https?://(?:www\\.)?dailymail\\.co\\.uk/(?:video/[^/]+/video-|embed/video/)(?P<id>[0-9]+)'
  2100. _RETURN_TYPE = 'video'
  2101. class DailymotionBaseInfoExtractor(LazyLoadExtractor):
  2102. _module = 'yt_dlp.extractor.dailymotion'
  2103. IE_NAME = 'DailymotionBaseInfoExtract'
  2104. _NETRC_MACHINE = 'dailymotion'
  2105. class DailymotionIE(DailymotionBaseInfoExtractor):
  2106. _module = 'yt_dlp.extractor.dailymotion'
  2107. IE_NAME = 'dailymotion'
  2108. _VALID_URL = '(?ix)\n https?://\n (?:\n dai\\.ly/|\n (?:\n (?:(?:www|touch|geo)\\.)?dailymotion\\.[a-z]{2,3}|\n (?:www\\.)?lequipe\\.fr\n )/\n (?:\n swf/(?!video)|\n (?:(?:crawler|embed|swf)/)?video/|\n player(?:/[\\da-z]+)?\\.html\\?(?:video|(?P<is_playlist>playlist))=\n )\n )\n (?P<id>[^/?_&#]+)(?:[\\w-]*\\?playlist=(?P<playlist_id>x[0-9a-z]+))?\n '
  2109. _NETRC_MACHINE = 'dailymotion'
  2110. age_limit = 18
  2111. _RETURN_TYPE = 'video'
  2112. class DailymotionPlaylistBaseIE(DailymotionBaseInfoExtractor):
  2113. _module = 'yt_dlp.extractor.dailymotion'
  2114. IE_NAME = 'DailymotionPlaylistBase'
  2115. _NETRC_MACHINE = 'dailymotion'
  2116. class DailymotionPlaylistIE(DailymotionPlaylistBaseIE):
  2117. _module = 'yt_dlp.extractor.dailymotion'
  2118. IE_NAME = 'dailymotion:playlist'
  2119. _VALID_URL = '(?:https?://)?(?:www\\.)?dailymotion\\.[a-z]{2,3}/playlist/(?P<id>x[0-9a-z]+)'
  2120. _NETRC_MACHINE = 'dailymotion'
  2121. _RETURN_TYPE = 'playlist'
  2122. class DailymotionSearchIE(DailymotionPlaylistBaseIE):
  2123. _module = 'yt_dlp.extractor.dailymotion'
  2124. IE_NAME = 'dailymotion:search'
  2125. _VALID_URL = 'https?://(?:www\\.)?dailymotion\\.[a-z]{2,3}/search/(?P<id>[^/?#]+)/videos'
  2126. _NETRC_MACHINE = 'dailymotion'
  2127. _RETURN_TYPE = 'playlist'
  2128. class DailymotionUserIE(DailymotionPlaylistBaseIE):
  2129. _module = 'yt_dlp.extractor.dailymotion'
  2130. IE_NAME = 'dailymotion:user'
  2131. _VALID_URL = 'https?://(?:www\\.)?dailymotion\\.[a-z]{2,3}/(?!(?:embed|swf|#|video|playlist|search|crawler)/)(?:(?:old/)?user/)?(?P<id>[^/?#]+)'
  2132. _NETRC_MACHINE = 'dailymotion'
  2133. _RETURN_TYPE = 'playlist'
  2134. class DailyWireBaseIE(LazyLoadExtractor):
  2135. _module = 'yt_dlp.extractor.dailywire'
  2136. IE_NAME = 'DailyWireBase'
  2137. class DailyWireIE(DailyWireBaseIE):
  2138. _module = 'yt_dlp.extractor.dailywire'
  2139. IE_NAME = 'DailyWire'
  2140. _VALID_URL = 'https?://(?:www\\.)dailywire(?:\\.com)/(?P<sites_type>episode|videos)/(?P<id>[\\w-]+)'
  2141. _RETURN_TYPE = 'video'
  2142. class DailyWirePodcastIE(DailyWireBaseIE):
  2143. _module = 'yt_dlp.extractor.dailywire'
  2144. IE_NAME = 'DailyWirePodcast'
  2145. _VALID_URL = 'https?://(?:www\\.)dailywire(?:\\.com)/(?P<sites_type>podcasts)/(?P<podcaster>[\\w-]+/(?P<id>[\\w-]+))'
  2146. _RETURN_TYPE = 'video'
  2147. class DamtomoBaseIE(LazyLoadExtractor):
  2148. _module = 'yt_dlp.extractor.damtomo'
  2149. IE_NAME = 'DamtomoBase'
  2150. class DamtomoRecordIE(DamtomoBaseIE):
  2151. _module = 'yt_dlp.extractor.damtomo'
  2152. IE_NAME = 'damtomo:record'
  2153. _VALID_URL = 'https?://(?:www\\.)?clubdam\\.com/app/damtomo/(?:SP/)?karaokePost/StreamingKrk\\.do\\?karaokeContributeId=(?P<id>\\d+)'
  2154. _RETURN_TYPE = 'video'
  2155. class DamtomoVideoIE(DamtomoBaseIE):
  2156. _module = 'yt_dlp.extractor.damtomo'
  2157. IE_NAME = 'damtomo:video'
  2158. _VALID_URL = 'https?://(?:www\\.)?clubdam\\.com/app/damtomo/(?:SP/)?karaokeMovie/StreamingDkm\\.do\\?karaokeMovieId=(?P<id>\\d+)'
  2159. _RETURN_TYPE = 'video'
  2160. class DangalPlayBaseIE(LazyLoadExtractor):
  2161. _module = 'yt_dlp.extractor.dangalplay'
  2162. IE_NAME = 'DangalPlayBase'
  2163. _NETRC_MACHINE = 'dangalplay'
  2164. class DangalPlayIE(DangalPlayBaseIE):
  2165. _module = 'yt_dlp.extractor.dangalplay'
  2166. IE_NAME = 'dangalplay'
  2167. _VALID_URL = 'https?://(?:www\\.)?dangalplay.com/shows/(?P<series>[^/?#]+)/(?P<id>(?!episodes)[^/?#]+)/?(?:$|[?#])'
  2168. _NETRC_MACHINE = 'dangalplay'
  2169. _RETURN_TYPE = 'video'
  2170. class DangalPlaySeasonIE(DangalPlayBaseIE):
  2171. _module = 'yt_dlp.extractor.dangalplay'
  2172. IE_NAME = 'dangalplay:season'
  2173. _VALID_URL = 'https?://(?:www\\.)?dangalplay.com/shows/(?P<id>[^/?#]+)(?:/(?P<sub>ep-[^/?#]+)/episodes)?/?(?:$|[?#])'
  2174. _NETRC_MACHINE = 'dangalplay'
  2175. _RETURN_TYPE = 'playlist'
  2176. class DaumBaseIE(LazyLoadExtractor):
  2177. _module = 'yt_dlp.extractor.daum'
  2178. IE_NAME = 'DaumBase'
  2179. class DaumClipIE(DaumBaseIE):
  2180. _module = 'yt_dlp.extractor.daum'
  2181. IE_NAME = 'daum.net:clip'
  2182. _VALID_URL = 'https?://(?:m\\.)?tvpot\\.daum\\.net/(?:clip/ClipView.(?:do|tv)|mypot/View.do)\\?.*?clipid=(?P<id>\\d+)'
  2183. _RETURN_TYPE = 'video'
  2184. @classmethod
  2185. def suitable(cls, url):
  2186. return False if DaumPlaylistIE.suitable(url) or DaumUserIE.suitable(url) else super().suitable(url)
  2187. class DaumIE(DaumBaseIE):
  2188. _module = 'yt_dlp.extractor.daum'
  2189. IE_NAME = 'daum.net'
  2190. _VALID_URL = 'https?://(?:(?:m\\.)?tvpot\\.daum\\.net/v/|videofarm\\.daum\\.net/controller/player/VodPlayer\\.swf\\?vid=)(?P<id>[^?#&]+)'
  2191. _RETURN_TYPE = 'video'
  2192. class DaumListIE(LazyLoadExtractor):
  2193. _module = 'yt_dlp.extractor.daum'
  2194. IE_NAME = 'DaumList'
  2195. class DaumPlaylistIE(DaumListIE):
  2196. _module = 'yt_dlp.extractor.daum'
  2197. IE_NAME = 'daum.net:playlist'
  2198. _VALID_URL = 'https?://(?:m\\.)?tvpot\\.daum\\.net/mypot/(?:View\\.do|Top\\.tv)\\?.*?playlistid=(?P<id>[0-9]+)'
  2199. _RETURN_TYPE = 'any'
  2200. @classmethod
  2201. def suitable(cls, url):
  2202. return False if DaumUserIE.suitable(url) else super().suitable(url)
  2203. class DaumUserIE(DaumListIE):
  2204. _module = 'yt_dlp.extractor.daum'
  2205. IE_NAME = 'daum.net:user'
  2206. _VALID_URL = 'https?://(?:m\\.)?tvpot\\.daum\\.net/mypot/(?:View|Top)\\.(?:do|tv)\\?.*?ownerid=(?P<id>[0-9a-zA-Z]+)'
  2207. _RETURN_TYPE = 'any'
  2208. class DaystarClipIE(LazyLoadExtractor):
  2209. _module = 'yt_dlp.extractor.daystar'
  2210. IE_NAME = 'daystar:clip'
  2211. _VALID_URL = 'https?://player\\.daystar\\.tv/(?P<id>\\w+)'
  2212. _RETURN_TYPE = 'video'
  2213. class DBTVIE(LazyLoadExtractor):
  2214. _module = 'yt_dlp.extractor.dbtv'
  2215. IE_NAME = 'DBTV'
  2216. _VALID_URL = 'https?://(?:www\\.)?dagbladet\\.no/video/(?:(?:embed|(?P<display_id>[^/]+))/)?(?P<id>[0-9A-Za-z_-]{11}|[a-zA-Z0-9]{8})'
  2217. _RETURN_TYPE = 'video'
  2218. class DctpTvIE(LazyLoadExtractor):
  2219. _module = 'yt_dlp.extractor.dctp'
  2220. IE_NAME = 'DctpTv'
  2221. _VALID_URL = 'https?://(?:www\\.)?dctp\\.tv/(?:#/)?filme/(?P<id>[^/?#&]+)'
  2222. _RETURN_TYPE = 'video'
  2223. class DeezerBaseInfoExtractor(LazyLoadExtractor):
  2224. _module = 'yt_dlp.extractor.deezer'
  2225. IE_NAME = 'DeezerBaseInfoExtract'
  2226. class DeezerAlbumIE(DeezerBaseInfoExtractor):
  2227. _module = 'yt_dlp.extractor.deezer'
  2228. IE_NAME = 'DeezerAlbum'
  2229. _VALID_URL = 'https?://(?:www\\.)?deezer\\.com/(../)?album/(?P<id>[0-9]+)'
  2230. _RETURN_TYPE = 'playlist'
  2231. class DeezerPlaylistIE(DeezerBaseInfoExtractor):
  2232. _module = 'yt_dlp.extractor.deezer'
  2233. IE_NAME = 'DeezerPlaylist'
  2234. _VALID_URL = 'https?://(?:www\\.)?deezer\\.com/(../)?playlist/(?P<id>[0-9]+)'
  2235. _RETURN_TYPE = 'playlist'
  2236. class DemocracynowIE(LazyLoadExtractor):
  2237. _module = 'yt_dlp.extractor.democracynow'
  2238. IE_NAME = 'democracynow'
  2239. _VALID_URL = 'https?://(?:www\\.)?democracynow\\.org/(?P<id>[^\\?]*)'
  2240. _RETURN_TYPE = 'video'
  2241. class DetikEmbedIE(LazyLoadExtractor):
  2242. _module = 'yt_dlp.extractor.detik'
  2243. IE_NAME = 'DetikEmbed'
  2244. _VALID_URL = False
  2245. class DeuxMIE(LazyLoadExtractor):
  2246. _module = 'yt_dlp.extractor.deuxm'
  2247. IE_NAME = 'DeuxM'
  2248. _VALID_URL = 'https?://(?:www\\.)?2m\\.ma/[^/]+/replay/single/(?P<id>([\\w.]{1,24})+)'
  2249. _RETURN_TYPE = 'video'
  2250. class DeuxMNewsIE(LazyLoadExtractor):
  2251. _module = 'yt_dlp.extractor.deuxm'
  2252. IE_NAME = 'DeuxMNews'
  2253. _VALID_URL = 'https?://(?:www\\.)?2m\\.ma/(?P<lang>\\w+)/news/(?P<id>[^/#?]+)'
  2254. _RETURN_TYPE = 'video'
  2255. class DFBIE(LazyLoadExtractor):
  2256. _module = 'yt_dlp.extractor.dfb'
  2257. IE_NAME = 'tv.dfb.de'
  2258. _VALID_URL = 'https?://tv\\.dfb\\.de/video/(?P<display_id>[^/]+)/(?P<id>\\d+)'
  2259. _RETURN_TYPE = 'video'
  2260. class DHMIE(LazyLoadExtractor):
  2261. _module = 'yt_dlp.extractor.dhm'
  2262. IE_NAME = 'DHM'
  2263. _VALID_URL = 'https?://(?:www\\.)?dhm\\.de/filmarchiv/(?:[^/]+/)+(?P<id>[^/]+)'
  2264. _WORKING = False
  2265. IE_DESC = 'Filmarchiv - Deutsches Historisches Museum'
  2266. _RETURN_TYPE = 'video'
  2267. class DigitalConcertHallIE(LazyLoadExtractor):
  2268. _module = 'yt_dlp.extractor.digitalconcerthall'
  2269. IE_NAME = 'DigitalConcertHall'
  2270. _VALID_URL = 'https?://(?:www\\.)?digitalconcerthall\\.com/(?P<language>[a-z]+)/(?P<type>film|concert|work)/(?P<id>[0-9]+)-?(?P<part>[0-9]+)?'
  2271. IE_DESC = 'DigitalConcertHall extractor'
  2272. _NETRC_MACHINE = 'digitalconcerthall'
  2273. _RETURN_TYPE = 'any'
  2274. class DigitekaIE(LazyLoadExtractor):
  2275. _module = 'yt_dlp.extractor.digiteka'
  2276. IE_NAME = 'Digiteka'
  2277. _VALID_URL = '(?x)\n https?://(?:www\\.)?(?:digiteka\\.net|ultimedia\\.com)/\n (?:\n deliver/\n (?P<embed_type>\n generic|\n musique\n )\n (?:/[^/]+)*/\n (?:\n src|\n article\n )|\n default/index/video\n (?P<site_type>\n generic|\n music\n )\n /id\n )/(?P<id>[\\d+a-z]+)'
  2278. _RETURN_TYPE = 'video'
  2279. class DiscogsReleasePlaylistIE(LazyLoadExtractor):
  2280. _module = 'yt_dlp.extractor.discogs'
  2281. IE_NAME = 'DiscogsReleasePlaylist'
  2282. _VALID_URL = 'https?://(?:www\\.)?discogs\\.com/(?P<type>release|master)/(?P<id>\\d+)'
  2283. _RETURN_TYPE = 'playlist'
  2284. class DisneyIE(LazyLoadExtractor):
  2285. _module = 'yt_dlp.extractor.disney'
  2286. IE_NAME = 'Disney'
  2287. _VALID_URL = '(?x)\n https?://(?P<domain>(?:[^/]+\\.)?(?:disney\\.[a-z]{2,3}(?:\\.[a-z]{2})?|disney(?:(?:me|latino)\\.com|turkiye\\.com\\.tr|channel\\.de)|(?:starwars|marvelkids)\\.com))/(?:(?:embed/|(?:[^/]+/)+[\\w-]+-)(?P<id>[a-z0-9]{24})|(?:[^/]+/)?(?P<display_id>[^/?#]+))'
  2288. _RETURN_TYPE = 'video'
  2289. class DigitallySpeakingIE(LazyLoadExtractor):
  2290. _module = 'yt_dlp.extractor.dispeak'
  2291. IE_NAME = 'DigitallySpeaking'
  2292. _VALID_URL = 'https?://(?:s?evt\\.dispeak|events\\.digitallyspeaking)\\.com/(?:[^/]+/)+xml/(?P<id>[^.]+)\\.xml'
  2293. _RETURN_TYPE = 'video'
  2294. class DLFBaseIE(LazyLoadExtractor):
  2295. _module = 'yt_dlp.extractor.dlf'
  2296. IE_NAME = 'DLFBase'
  2297. class DLFIE(DLFBaseIE):
  2298. _module = 'yt_dlp.extractor.dlf'
  2299. IE_NAME = 'dlf'
  2300. _VALID_URL = 'https?://(?:www\\.)?deutschlandfunk\\.de/[\\w-]+-dlf-(?P<id>[\\da-f]{8})-100\\.html'
  2301. _RETURN_TYPE = 'video'
  2302. class DLFCorpusIE(DLFBaseIE):
  2303. _module = 'yt_dlp.extractor.dlf'
  2304. IE_NAME = 'dlf:corpus'
  2305. _VALID_URL = 'https?://(?:www\\.)?deutschlandfunk\\.de/(?P<id>(?![\\w-]+-dlf-[\\da-f]{8})[\\w-]+-\\d+)\\.html'
  2306. IE_DESC = 'DLF Multi-feed Archives'
  2307. _RETURN_TYPE = 'playlist'
  2308. class DLiveStreamIE(LazyLoadExtractor):
  2309. _module = 'yt_dlp.extractor.dlive'
  2310. IE_NAME = 'dlive:stream'
  2311. _VALID_URL = 'https?://(?:www\\.)?dlive\\.tv/(?!p/)(?P<id>[\\w.-]+)'
  2312. class DLiveVODIE(LazyLoadExtractor):
  2313. _module = 'yt_dlp.extractor.dlive'
  2314. IE_NAME = 'dlive:vod'
  2315. _VALID_URL = 'https?://(?:www\\.)?dlive\\.tv/p/(?P<uploader_id>.+?)\\+(?P<id>[^/?#&]+)'
  2316. _RETURN_TYPE = 'video'
  2317. class DouyuBaseIE(LazyLoadExtractor):
  2318. _module = 'yt_dlp.extractor.douyutv'
  2319. IE_NAME = 'DouyuBase'
  2320. class DouyuShowIE(DouyuBaseIE):
  2321. _module = 'yt_dlp.extractor.douyutv'
  2322. IE_NAME = 'DouyuShow'
  2323. _VALID_URL = 'https?://v(?:mobile)?\\.douyu\\.com/show/(?P<id>[0-9a-zA-Z]+)'
  2324. _RETURN_TYPE = 'video'
  2325. class DouyuTVIE(DouyuBaseIE):
  2326. _module = 'yt_dlp.extractor.douyutv'
  2327. IE_NAME = 'DouyuTV'
  2328. _VALID_URL = 'https?://(?:www\\.)?douyu(?:tv)?\\.com/(topic/\\w+\\?rid=|(?:[^/]+/))*(?P<id>[A-Za-z0-9]+)'
  2329. IE_DESC = '斗鱼直播'
  2330. _RETURN_TYPE = 'video'
  2331. class DPlayBaseIE(LazyLoadExtractor):
  2332. _module = 'yt_dlp.extractor.dplay'
  2333. IE_NAME = 'DPlayBase'
  2334. class DiscoveryPlusBaseIE(DPlayBaseIE):
  2335. _module = 'yt_dlp.extractor.dplay'
  2336. IE_NAME = 'DiscoveryPlusBase'
  2337. class TLCIE(DiscoveryPlusBaseIE):
  2338. _module = 'yt_dlp.extractor.dplay'
  2339. IE_NAME = 'TLC'
  2340. _VALID_URL = 'https?://(?:go\\.)?tlc\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2341. _RETURN_TYPE = 'video'
  2342. class AmHistoryChannelIE(DiscoveryPlusBaseIE):
  2343. _module = 'yt_dlp.extractor.dplay'
  2344. IE_NAME = 'AmHistoryChannel'
  2345. _VALID_URL = 'https?://(?:www\\.)?ahctv\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2346. _RETURN_TYPE = 'video'
  2347. class AnimalPlanetIE(DiscoveryPlusBaseIE):
  2348. _module = 'yt_dlp.extractor.dplay'
  2349. IE_NAME = 'AnimalPlanet'
  2350. _VALID_URL = 'https?://(?:www\\.)?animalplanet\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2351. _RETURN_TYPE = 'video'
  2352. class CookingChannelIE(DiscoveryPlusBaseIE):
  2353. _module = 'yt_dlp.extractor.dplay'
  2354. IE_NAME = 'CookingChannel'
  2355. _VALID_URL = 'https?://(?:watch\\.)?cookingchanneltv\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2356. _RETURN_TYPE = 'video'
  2357. class DestinationAmericaIE(DiscoveryPlusBaseIE):
  2358. _module = 'yt_dlp.extractor.dplay'
  2359. IE_NAME = 'DestinationAmerica'
  2360. _VALID_URL = 'https?://(?:www\\.)?destinationamerica\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2361. _RETURN_TYPE = 'video'
  2362. class DiscoveryLifeIE(DiscoveryPlusBaseIE):
  2363. _module = 'yt_dlp.extractor.dplay'
  2364. IE_NAME = 'DiscoveryLife'
  2365. _VALID_URL = 'https?://(?:www\\.)?discoverylife\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2366. _RETURN_TYPE = 'video'
  2367. class DiscoveryNetworksDeIE(DiscoveryPlusBaseIE):
  2368. _module = 'yt_dlp.extractor.dplay'
  2369. IE_NAME = 'DiscoveryNetworksDe'
  2370. _VALID_URL = 'https?://(?:www\\.)?(?P<domain>(?:tlc|dmax)\\.de|dplay\\.co\\.uk)/(?:programme|show|sendungen)/(?P<programme>[^/]+)/(?:video/)?(?P<alternate_id>[^/]+)'
  2371. _RETURN_TYPE = 'video'
  2372. class DiscoveryPlusIE(DiscoveryPlusBaseIE):
  2373. _module = 'yt_dlp.extractor.dplay'
  2374. IE_NAME = 'DiscoveryPlus'
  2375. _VALID_URL = 'https?://(?:www\\.)?discoveryplus\\.com/(?!it/)(?:(?P<country>[a-z]{2})/)?video(?:/sport|/olympics)?/(?P<id>[^/]+/[^/?#]+)'
  2376. _RETURN_TYPE = 'video'
  2377. class DiscoveryPlusIndiaIE(DiscoveryPlusBaseIE):
  2378. _module = 'yt_dlp.extractor.dplay'
  2379. IE_NAME = 'DiscoveryPlusIndia'
  2380. _VALID_URL = 'https?://(?:www\\.)?discoveryplus\\.in/videos?/(?P<id>[^/]+/[^/?#]+)'
  2381. _RETURN_TYPE = 'video'
  2382. class DiscoveryPlusShowBaseIE(DPlayBaseIE):
  2383. _module = 'yt_dlp.extractor.dplay'
  2384. IE_NAME = 'DiscoveryPlusShowBase'
  2385. class DiscoveryPlusIndiaShowIE(DiscoveryPlusShowBaseIE):
  2386. _module = 'yt_dlp.extractor.dplay'
  2387. IE_NAME = 'DiscoveryPlusIndiaShow'
  2388. _VALID_URL = 'https?://(?:www\\.)?discoveryplus\\.in/show/(?P<show_name>[^/]+)/?(?:[?#]|$)'
  2389. _RETURN_TYPE = 'playlist'
  2390. class DiscoveryPlusItalyIE(DiscoveryPlusBaseIE):
  2391. _module = 'yt_dlp.extractor.dplay'
  2392. IE_NAME = 'DiscoveryPlusItaly'
  2393. _VALID_URL = 'https?://(?:www\\.)?discoveryplus\\.com/it/video(?:/sport|/olympics)?/(?P<id>[^/]+/[^/?#]+)'
  2394. class DiscoveryPlusItalyShowIE(DiscoveryPlusShowBaseIE):
  2395. _module = 'yt_dlp.extractor.dplay'
  2396. IE_NAME = 'DiscoveryPlusItalyShow'
  2397. _VALID_URL = 'https?://(?:www\\.)?discoveryplus\\.it/programmi/(?P<show_name>[^/]+)/?(?:[?#]|$)'
  2398. _RETURN_TYPE = 'playlist'
  2399. class DPlayIE(DPlayBaseIE):
  2400. _module = 'yt_dlp.extractor.dplay'
  2401. IE_NAME = 'DPlay'
  2402. _VALID_URL = '(?x)https?://\n (?P<domain>\n (?:www\\.)?(?P<host>d\n (?:\n play\\.(?P<country>dk|fi|jp|se|no)|\n iscoveryplus\\.(?P<plus_country>dk|es|fi|it|se|no)\n )\n )|\n (?P<subdomain_country>es|it)\\.dplay\\.com\n )/[^/]+/(?P<id>[^/]+/[^/?#]+)'
  2403. _RETURN_TYPE = 'video'
  2404. class FoodNetworkIE(DiscoveryPlusBaseIE):
  2405. _module = 'yt_dlp.extractor.dplay'
  2406. IE_NAME = 'FoodNetwork'
  2407. _VALID_URL = 'https?://(?:watch\\.)?foodnetwork\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2408. _RETURN_TYPE = 'video'
  2409. class GoDiscoveryIE(DiscoveryPlusBaseIE):
  2410. _module = 'yt_dlp.extractor.dplay'
  2411. IE_NAME = 'GoDiscovery'
  2412. _VALID_URL = 'https?://(?:go\\.)?discovery\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2413. _RETURN_TYPE = 'video'
  2414. class HGTVDeIE(DiscoveryPlusBaseIE):
  2415. _module = 'yt_dlp.extractor.dplay'
  2416. IE_NAME = 'HGTVDe'
  2417. _VALID_URL = 'https?://de\\.hgtv\\.com/sendungen/(?P<id>[^/]+/[^/?#]+)'
  2418. _RETURN_TYPE = 'video'
  2419. class HGTVUsaIE(DiscoveryPlusBaseIE):
  2420. _module = 'yt_dlp.extractor.dplay'
  2421. IE_NAME = 'HGTVUsa'
  2422. _VALID_URL = 'https?://(?:watch\\.)?hgtv\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2423. _RETURN_TYPE = 'video'
  2424. class InvestigationDiscoveryIE(DiscoveryPlusBaseIE):
  2425. _module = 'yt_dlp.extractor.dplay'
  2426. IE_NAME = 'InvestigationDiscovery'
  2427. _VALID_URL = 'https?://(?:www\\.)?investigationdiscovery\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2428. _RETURN_TYPE = 'video'
  2429. class ScienceChannelIE(DiscoveryPlusBaseIE):
  2430. _module = 'yt_dlp.extractor.dplay'
  2431. IE_NAME = 'ScienceChannel'
  2432. _VALID_URL = 'https?://(?:www\\.)?sciencechannel\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2433. _RETURN_TYPE = 'video'
  2434. class TravelChannelIE(DiscoveryPlusBaseIE):
  2435. _module = 'yt_dlp.extractor.dplay'
  2436. IE_NAME = 'TravelChannel'
  2437. _VALID_URL = 'https?://(?:watch\\.)?travelchannel\\.com/video/(?P<id>[^/]+/[^/?#]+)'
  2438. _RETURN_TYPE = 'video'
  2439. class DRBonanzaIE(LazyLoadExtractor):
  2440. _module = 'yt_dlp.extractor.drbonanza'
  2441. IE_NAME = 'DRBonanza'
  2442. _VALID_URL = 'https?://(?:www\\.)?dr\\.dk/bonanza/[^/]+/\\d+/[^/]+/(?P<id>\\d+)/(?P<display_id>[^/?#&]+)'
  2443. _RETURN_TYPE = 'video'
  2444. class DroobleIE(LazyLoadExtractor):
  2445. _module = 'yt_dlp.extractor.drooble'
  2446. IE_NAME = 'Drooble'
  2447. _VALID_URL = '(?x)https?://drooble\\.com/(?:\n (?:(?P<user>[^/]+)/)?(?P<kind>song|videos|music/albums)/(?P<id>\\d+)|\n (?P<user_2>[^/]+)/(?P<kind_2>videos|music))\n '
  2448. _RETURN_TYPE = 'any'
  2449. class DropboxIE(LazyLoadExtractor):
  2450. _module = 'yt_dlp.extractor.dropbox'
  2451. IE_NAME = 'Dropbox'
  2452. _VALID_URL = 'https?://(?:www\\.)?dropbox\\.com/(?:(?:e/)?scl/fi|sh?)/(?P<id>\\w+)'
  2453. _RETURN_TYPE = 'video'
  2454. class DropoutIE(LazyLoadExtractor):
  2455. _module = 'yt_dlp.extractor.dropout'
  2456. IE_NAME = 'Dropout'
  2457. _VALID_URL = 'https?://(?:www\\.)?dropout\\.tv/(?:[^/]+/)*videos/(?P<id>[^/]+)/?$'
  2458. _NETRC_MACHINE = 'dropout'
  2459. _RETURN_TYPE = 'video'
  2460. class DropoutSeasonIE(LazyLoadExtractor):
  2461. _module = 'yt_dlp.extractor.dropout'
  2462. IE_NAME = 'DropoutSeason'
  2463. _VALID_URL = 'https?://(?:www\\.)?dropout\\.tv/(?P<id>[^\\/$&?#]+)(?:/?$|/season:(?P<season>[0-9]+)/?$)'
  2464. _RETURN_TYPE = 'playlist'
  2465. class DrTalksIE(LazyLoadExtractor):
  2466. _module = 'yt_dlp.extractor.drtalks'
  2467. IE_NAME = 'DrTalks'
  2468. _VALID_URL = 'https?://(?:www\\.)?drtalks\\.com/videos/(?P<id>[\\w-]+)'
  2469. _RETURN_TYPE = 'video'
  2470. class DrTuberIE(LazyLoadExtractor):
  2471. _module = 'yt_dlp.extractor.drtuber'
  2472. IE_NAME = 'DrTuber'
  2473. _VALID_URL = 'https?://(?:(?:www|m)\\.)?drtuber\\.com/(?:video|embed)/(?P<id>\\d+)(?:/(?P<display_id>[\\w-]+))?'
  2474. age_limit = 18
  2475. _RETURN_TYPE = 'video'
  2476. class DRTVIE(LazyLoadExtractor):
  2477. _module = 'yt_dlp.extractor.drtv'
  2478. IE_NAME = 'drtv'
  2479. _VALID_URL = '(?x)\n https?://\n (?:\n (?:www\\.)?dr\\.dk/tv/se(?:/ondemand)?/(?:[^/?#]+/)*|\n (?:www\\.)?(?:dr\\.dk|dr-massive\\.com)/drtv/(?:se|episode|program)/\n )\n (?P<id>[\\da-z_-]+)\n '
  2480. _RETURN_TYPE = 'video'
  2481. class DRTVLiveIE(LazyLoadExtractor):
  2482. _module = 'yt_dlp.extractor.drtv'
  2483. IE_NAME = 'drtv:live'
  2484. _VALID_URL = 'https?://(?:www\\.)?dr\\.dk/(?:tv|TV)/live/(?P<id>[\\da-z-]+)'
  2485. _RETURN_TYPE = 'video'
  2486. class DRTVSeasonIE(LazyLoadExtractor):
  2487. _module = 'yt_dlp.extractor.drtv'
  2488. IE_NAME = 'drtv:season'
  2489. _VALID_URL = 'https?://(?:www\\.)?(?:dr\\.dk|dr-massive\\.com)/drtv/saeson/(?P<display_id>[\\w-]+)_(?P<id>\\d+)'
  2490. _RETURN_TYPE = 'playlist'
  2491. class DRTVSeriesIE(LazyLoadExtractor):
  2492. _module = 'yt_dlp.extractor.drtv'
  2493. IE_NAME = 'drtv:series'
  2494. _VALID_URL = 'https?://(?:www\\.)?(?:dr\\.dk|dr-massive\\.com)/drtv/serie/(?P<display_id>[\\w-]+)_(?P<id>\\d+)'
  2495. _RETURN_TYPE = 'playlist'
  2496. class DTubeIE(LazyLoadExtractor):
  2497. _module = 'yt_dlp.extractor.dtube'
  2498. IE_NAME = 'DTube'
  2499. _VALID_URL = 'https?://(?:www\\.)?d\\.tube/(?:#!/)?v/(?P<uploader_id>[0-9a-z.-]+)/(?P<id>[0-9a-z]{8})'
  2500. _WORKING = False
  2501. _RETURN_TYPE = 'video'
  2502. class DubokuIE(LazyLoadExtractor):
  2503. _module = 'yt_dlp.extractor.duboku'
  2504. IE_NAME = 'duboku'
  2505. _VALID_URL = '(?:https?://[^/]+\\.duboku\\.io/vodplay/)(?P<id>[0-9]+-[0-9-]+)\\.html.*'
  2506. IE_DESC = 'www.duboku.io'
  2507. _RETURN_TYPE = 'video'
  2508. class DubokuPlaylistIE(LazyLoadExtractor):
  2509. _module = 'yt_dlp.extractor.duboku'
  2510. IE_NAME = 'duboku:list'
  2511. _VALID_URL = '(?:https?://[^/]+\\.duboku\\.io/voddetail/)(?P<id>[0-9]+)\\.html.*'
  2512. IE_DESC = 'www.duboku.io entire series'
  2513. _RETURN_TYPE = 'playlist'
  2514. class DumpertIE(LazyLoadExtractor):
  2515. _module = 'yt_dlp.extractor.dumpert'
  2516. IE_NAME = 'Dumpert'
  2517. _VALID_URL = '(?x)\n (?P<protocol>https?)://(?:(?:www|legacy)\\.)?dumpert\\.nl/(?:\n (?:mediabase|embed|item)/|\n [^#]*[?&]selectedId=\n )(?P<id>[0-9]+[/_][0-9a-zA-Z]+)'
  2518. _RETURN_TYPE = 'video'
  2519. class DuoplayIE(LazyLoadExtractor):
  2520. _module = 'yt_dlp.extractor.duoplay'
  2521. IE_NAME = 'Duoplay'
  2522. _VALID_URL = 'https?://duoplay\\.ee/(?P<id>\\d+)(?:[/?#]|$)'
  2523. _RETURN_TYPE = 'video'
  2524. class DVTVIE(LazyLoadExtractor):
  2525. _module = 'yt_dlp.extractor.dvtv'
  2526. IE_NAME = 'dvtv'
  2527. _VALID_URL = 'https?://video\\.aktualne\\.cz/(?:[^/]+/)+r~(?P<id>[0-9a-f]{32})'
  2528. IE_DESC = 'http://video.aktualne.cz/'
  2529. _RETURN_TYPE = 'any'
  2530. class DWIE(LazyLoadExtractor):
  2531. _module = 'yt_dlp.extractor.dw'
  2532. IE_NAME = 'dw'
  2533. _ENABLED = None
  2534. _VALID_URL = 'https?://(?:www\\.)?dw\\.com/(?:[^/]+/)+(?:av|e)-(?P<id>\\d+)'
  2535. _WORKING = False
  2536. _RETURN_TYPE = 'video'
  2537. class DWArticleIE(LazyLoadExtractor):
  2538. _module = 'yt_dlp.extractor.dw'
  2539. IE_NAME = 'dw:article'
  2540. _ENABLED = None
  2541. _VALID_URL = 'https?://(?:www\\.)?dw\\.com/(?:[^/]+/)+a-(?P<id>\\d+)'
  2542. _WORKING = False
  2543. _RETURN_TYPE = 'video'
  2544. class ClipYouEmbedIE(LazyLoadExtractor):
  2545. _module = 'yt_dlp.extractor.eagleplatform'
  2546. IE_NAME = 'ClipYouEmbed'
  2547. _VALID_URL = False
  2548. class EaglePlatformIE(LazyLoadExtractor):
  2549. _module = 'yt_dlp.extractor.eagleplatform'
  2550. IE_NAME = 'EaglePlatform'
  2551. _VALID_URL = '(?x)\n (?:\n eagleplatform:(?P<custom_host>[^/]+):|\n https?://(?P<host>.+?\\.media\\.eagleplatform\\.com)/index/player\\?.*\\brecord_id=\n )\n (?P<id>\\d+)\n '
  2552. _RETURN_TYPE = 'video'
  2553. class EbaumsWorldIE(LazyLoadExtractor):
  2554. _module = 'yt_dlp.extractor.ebaumsworld'
  2555. IE_NAME = 'EbaumsWorld'
  2556. _VALID_URL = 'https?://(?:www\\.)?ebaumsworld\\.com/videos/[^/]+/(?P<id>\\d+)'
  2557. _RETURN_TYPE = 'video'
  2558. class EbayIE(LazyLoadExtractor):
  2559. _module = 'yt_dlp.extractor.ebay'
  2560. IE_NAME = 'Ebay'
  2561. _VALID_URL = 'https?://(?:www\\.)?ebay\\.com/itm/(?P<id>\\d+)'
  2562. _RETURN_TYPE = 'video'
  2563. class EggheadBaseIE(LazyLoadExtractor):
  2564. _module = 'yt_dlp.extractor.egghead'
  2565. IE_NAME = 'EggheadBase'
  2566. class EggheadCourseIE(EggheadBaseIE):
  2567. _module = 'yt_dlp.extractor.egghead'
  2568. IE_NAME = 'egghead:course'
  2569. _VALID_URL = 'https?://(?:app\\.)?egghead\\.io/(?:course|playlist)s/(?P<id>[^/?#&]+)'
  2570. IE_DESC = 'egghead.io course'
  2571. _RETURN_TYPE = 'playlist'
  2572. class EggheadLessonIE(EggheadBaseIE):
  2573. _module = 'yt_dlp.extractor.egghead'
  2574. IE_NAME = 'egghead:lesson'
  2575. _VALID_URL = 'https?://(?:app\\.)?egghead\\.io/(?:api/v1/)?lessons/(?P<id>[^/?#&]+)'
  2576. IE_DESC = 'egghead.io lesson'
  2577. _RETURN_TYPE = 'video'
  2578. class EightTracksIE(LazyLoadExtractor):
  2579. _module = 'yt_dlp.extractor.eighttracks'
  2580. IE_NAME = '8tracks'
  2581. _VALID_URL = 'https?://8tracks\\.com/(?P<user>[^/]+)/(?P<id>[^/#]+)(?:#.*)?$'
  2582. _RETURN_TYPE = 'playlist'
  2583. class EitbIE(LazyLoadExtractor):
  2584. _module = 'yt_dlp.extractor.eitb'
  2585. IE_NAME = 'eitb.tv'
  2586. _VALID_URL = 'https?://(?:www\\.)?eitb\\.tv/(?:eu/bideoa|es/video)/[^/]+/\\d+/(?P<id>\\d+)'
  2587. _RETURN_TYPE = 'video'
  2588. class ElementorEmbedIE(LazyLoadExtractor):
  2589. _module = 'yt_dlp.extractor.elementorembed'
  2590. IE_NAME = 'ElementorEmbed'
  2591. _VALID_URL = False
  2592. class ElonetIE(LazyLoadExtractor):
  2593. _module = 'yt_dlp.extractor.elonet'
  2594. IE_NAME = 'Elonet'
  2595. _VALID_URL = 'https?://elonet\\.finna\\.fi/Record/kavi\\.elonet_elokuva_(?P<id>[0-9]+)'
  2596. _RETURN_TYPE = 'video'
  2597. class ElPaisIE(LazyLoadExtractor):
  2598. _module = 'yt_dlp.extractor.elpais'
  2599. IE_NAME = 'ElPais'
  2600. _VALID_URL = 'https?://(?:[^.]+\\.)?elpais\\.com/.*/(?P<id>[^/#?]+)\\.html(?:$|[?#])'
  2601. IE_DESC = 'El País'
  2602. _RETURN_TYPE = 'video'
  2603. class ElTreceTVIE(LazyLoadExtractor):
  2604. _module = 'yt_dlp.extractor.eltrecetv'
  2605. IE_NAME = 'ElTreceTV'
  2606. _VALID_URL = 'https?://(?:www\\.)?eltrecetv\\.com\\.ar/[\\w-]+/capitulos/temporada-\\d+/(?P<id>[\\w-]+)'
  2607. IE_DESC = 'El Trece TV (Argentina)'
  2608. _RETURN_TYPE = 'video'
  2609. class EmbedlyIE(LazyLoadExtractor):
  2610. _module = 'yt_dlp.extractor.embedly'
  2611. IE_NAME = 'Embedly'
  2612. _VALID_URL = 'https?://(?:www|cdn\\.)?embedly\\.com/widgets/media\\.html\\?(?:[^#]*?&)?(?:src|url)=(?:[^#&]+)'
  2613. _RETURN_TYPE = 'any'
  2614. class EpiconIE(LazyLoadExtractor):
  2615. _module = 'yt_dlp.extractor.epicon'
  2616. IE_NAME = 'Epicon'
  2617. _VALID_URL = 'https?://(?:www\\.)?epicon\\.in/(?:documentaries|movies|tv-shows/[^/?#]+/[^/?#]+)/(?P<id>[^/?#]+)'
  2618. _RETURN_TYPE = 'video'
  2619. class EpiconSeriesIE(LazyLoadExtractor):
  2620. _module = 'yt_dlp.extractor.epicon'
  2621. IE_NAME = 'EpiconSeries'
  2622. _VALID_URL = '(?!.*season)https?://(?:www\\.)?epicon\\.in/tv-shows/(?P<id>[^/?#]+)'
  2623. _RETURN_TYPE = 'playlist'
  2624. class EpidemicSoundIE(LazyLoadExtractor):
  2625. _module = 'yt_dlp.extractor.epidemicsound'
  2626. IE_NAME = 'EpidemicSound'
  2627. _VALID_URL = 'https?://(?:www\\.)?epidemicsound\\.com/(?:(?P<sfx>sound-effects/tracks)|track)/(?P<id>[0-9a-zA-Z-]+)'
  2628. _RETURN_TYPE = 'video'
  2629. class EplusIbIE(LazyLoadExtractor):
  2630. _module = 'yt_dlp.extractor.eplus'
  2631. IE_NAME = 'eplus'
  2632. _VALID_URL = ['https?://live\\.eplus\\.jp/ex/player\\?ib=(?P<id>(?:\\w|%2B|%2F){86}%3D%3D)', 'https?://live\\.eplus\\.jp/(?P<id>sample|\\d+)']
  2633. IE_DESC = 'e+ (イープラス)'
  2634. _NETRC_MACHINE = 'eplus'
  2635. _RETURN_TYPE = 'video'
  2636. class EpochIE(LazyLoadExtractor):
  2637. _module = 'yt_dlp.extractor.epoch'
  2638. IE_NAME = 'Epoch'
  2639. _VALID_URL = 'https?://www.theepochtimes\\.com/[\\w-]+_(?P<id>\\d+).html'
  2640. _RETURN_TYPE = 'video'
  2641. class EpornerIE(LazyLoadExtractor):
  2642. _module = 'yt_dlp.extractor.eporner'
  2643. IE_NAME = 'Eporner'
  2644. _VALID_URL = 'https?://(?:www\\.)?eporner\\.com/(?:(?:hd-porn|embed)/|video-)(?P<id>\\w+)(?:/(?P<display_id>[\\w-]+))?'
  2645. age_limit = 18
  2646. _RETURN_TYPE = 'video'
  2647. class ErocastIE(LazyLoadExtractor):
  2648. _module = 'yt_dlp.extractor.erocast'
  2649. IE_NAME = 'Erocast'
  2650. _VALID_URL = 'https?://(?:www\\.)?erocast\\.me/track/(?P<id>[0-9]+)'
  2651. age_limit = 18
  2652. _RETURN_TYPE = 'video'
  2653. class EroProfileAlbumIE(LazyLoadExtractor):
  2654. _module = 'yt_dlp.extractor.eroprofile'
  2655. IE_NAME = 'EroProfile:album'
  2656. _VALID_URL = 'https?://(?:www\\.)?eroprofile\\.com/m/videos/album/(?P<id>[^/]+)'
  2657. _RETURN_TYPE = 'playlist'
  2658. class EroProfileIE(LazyLoadExtractor):
  2659. _module = 'yt_dlp.extractor.eroprofile'
  2660. IE_NAME = 'EroProfile'
  2661. _VALID_URL = 'https?://(?:www\\.)?eroprofile\\.com/m/videos/view/(?P<id>[^/]+)'
  2662. _NETRC_MACHINE = 'eroprofile'
  2663. age_limit = 18
  2664. _RETURN_TYPE = 'video'
  2665. class ERRJupiterIE(LazyLoadExtractor):
  2666. _module = 'yt_dlp.extractor.err'
  2667. IE_NAME = 'ERRJupiter'
  2668. _VALID_URL = 'https?://(?:jupiter(?:pluss)?|lasteekraan)\\.err\\.ee/(?P<id>\\d+)'
  2669. _RETURN_TYPE = 'video'
  2670. class ERTFlixBaseIE(LazyLoadExtractor):
  2671. _module = 'yt_dlp.extractor.ertgr'
  2672. IE_NAME = 'ERTFlixBase'
  2673. class ERTFlixCodenameIE(ERTFlixBaseIE):
  2674. _module = 'yt_dlp.extractor.ertgr'
  2675. IE_NAME = 'ertflix:codename'
  2676. _VALID_URL = 'ertflix:(?P<id>[\\w-]+)'
  2677. IE_DESC = 'ERTFLIX videos by codename'
  2678. _RETURN_TYPE = 'video'
  2679. class ERTFlixIE(ERTFlixBaseIE):
  2680. _module = 'yt_dlp.extractor.ertgr'
  2681. IE_NAME = 'ertflix'
  2682. _VALID_URL = 'https?://www\\.ertflix\\.gr/(?:[^/]+/)?(?:series|vod)/(?P<id>[a-z]{3}\\.\\d+)'
  2683. IE_DESC = 'ERTFLIX videos'
  2684. age_limit = 8
  2685. _RETURN_TYPE = 'any'
  2686. class ERTWebtvEmbedIE(LazyLoadExtractor):
  2687. _module = 'yt_dlp.extractor.ertgr'
  2688. IE_NAME = 'ertwebtv:embed'
  2689. _VALID_URL = 'https?://www\\.ert\\.gr/webtv/live\\-uni/vod/dt\\-uni\\-vod\\.php\\?([^#]+&)?f=(?P<id>[^#&]+)'
  2690. IE_DESC = 'ert.gr webtv embedded videos'
  2691. _RETURN_TYPE = 'video'
  2692. class OnceIE(LazyLoadExtractor):
  2693. _module = 'yt_dlp.extractor.once'
  2694. IE_NAME = 'Once'
  2695. _VALID_URL = 'https?://.+?\\.unicornmedia\\.com/now/(?:ads/vmap/)?[^/]+/[^/]+/(?P<domain_id>[^/]+)/(?P<application_id>[^/]+)/(?:[^/]+/)?(?P<media_item_id>[^/]+)/content\\.(?:once|m3u8|mp4)'
  2696. class ESPNIE(OnceIE):
  2697. _module = 'yt_dlp.extractor.espn'
  2698. IE_NAME = 'ESPN'
  2699. _VALID_URL = '(?x)\n https?://\n (?:\n (?:\n (?:\n (?:(?:\\w+\\.)+)?espn\\.go|\n (?:www\\.)?espn\n )\\.com/\n (?:\n (?:\n video/(?:clip|iframe/twitter)|\n )\n (?:\n .*?\\?.*?\\bid=|\n /_/id/\n )|\n [^/]+/video/\n )\n )|\n (?:www\\.)espnfc\\.(?:com|us)/(?:video/)?[^/]+/\\d+/video/\n )\n (?P<id>\\d+)\n '
  2700. _RETURN_TYPE = 'video'
  2701. class ESPNArticleIE(LazyLoadExtractor):
  2702. _module = 'yt_dlp.extractor.espn'
  2703. IE_NAME = 'ESPNArticle'
  2704. _VALID_URL = 'https?://(?:espn\\.go|(?:www\\.)?espn)\\.com/(?:[^/]+/)*(?P<id>[^/]+)'
  2705. @classmethod
  2706. def suitable(cls, url):
  2707. return False if (ESPNIE.suitable(url) or WatchESPNIE.suitable(url)) else super().suitable(url)
  2708. class ESPNCricInfoIE(LazyLoadExtractor):
  2709. _module = 'yt_dlp.extractor.espn'
  2710. IE_NAME = 'ESPNCricInfo'
  2711. _VALID_URL = 'https?://(?:www\\.)?espncricinfo\\.com/(?:cricket-)?videos?/[^#$&?/]+-(?P<id>\\d+)'
  2712. _RETURN_TYPE = 'video'
  2713. class FiveThirtyEightIE(LazyLoadExtractor):
  2714. _module = 'yt_dlp.extractor.espn'
  2715. IE_NAME = 'FiveThirtyEight'
  2716. _VALID_URL = 'https?://(?:www\\.)?fivethirtyeight\\.com/features/(?P<id>[^/?#]+)'
  2717. _RETURN_TYPE = 'video'
  2718. class WatchESPNIE(AdobePassIE):
  2719. _module = 'yt_dlp.extractor.espn'
  2720. IE_NAME = 'WatchESPN'
  2721. _VALID_URL = 'https?://(?:www\\.)?espn\\.com/(?:watch|espnplus)/player/_/id/(?P<id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})'
  2722. _RETURN_TYPE = 'video'
  2723. class EttuTvIE(LazyLoadExtractor):
  2724. _module = 'yt_dlp.extractor.ettutv'
  2725. IE_NAME = 'EttuTv'
  2726. _VALID_URL = 'https?://(?:www\\.)?ettu\\.tv/[^?#]+/playerpage/(?P<id>[0-9]+)'
  2727. _RETURN_TYPE = 'video'
  2728. class EuropaIE(LazyLoadExtractor):
  2729. _module = 'yt_dlp.extractor.europa'
  2730. IE_NAME = 'Europa'
  2731. _VALID_URL = 'https?://ec\\.europa\\.eu/avservices/(?:video/player|audio/audioDetails)\\.cfm\\?.*?\\bref=(?P<id>[A-Za-z0-9-]+)'
  2732. _WORKING = False
  2733. _RETURN_TYPE = 'video'
  2734. class EuroParlWebstreamIE(LazyLoadExtractor):
  2735. _module = 'yt_dlp.extractor.europa'
  2736. IE_NAME = 'EuroParlWebstream'
  2737. _VALID_URL = '(?x)\n https?://multimedia\\.europarl\\.europa\\.eu/\n (?:\\w+/)?webstreaming/(?:[\\w-]+_)?(?P<id>[\\w-]+)\n '
  2738. _RETURN_TYPE = 'video'
  2739. class EuropeanTourIE(LazyLoadExtractor):
  2740. _module = 'yt_dlp.extractor.europeantour'
  2741. IE_NAME = 'EuropeanTour'
  2742. _VALID_URL = 'https?://(?:www\\.)?europeantour\\.com/dpworld-tour/news/video/(?P<id>[^/&?#$]+)'
  2743. _RETURN_TYPE = 'video'
  2744. class EurosportIE(LazyLoadExtractor):
  2745. _module = 'yt_dlp.extractor.eurosport'
  2746. IE_NAME = 'Eurosport'
  2747. _VALID_URL = '(?x)\n https?://(?:\n (?:(?:www|espanol)\\.)?eurosport\\.(?:com(?:\\.tr)?|de|dk|es|fr|hu|it|nl|no|ro)|\n eurosport\\.tvn24\\.pl\n )/[\\w-]+/(?:[\\w-]+/[\\d-]+/)?[\\w.-]+_(?P<id>vid\\d+)\n '
  2748. _RETURN_TYPE = 'video'
  2749. class EUScreenIE(LazyLoadExtractor):
  2750. _module = 'yt_dlp.extractor.euscreen'
  2751. IE_NAME = 'EUScreen'
  2752. _VALID_URL = 'https?://(?:www\\.)?euscreen\\.eu/item.html\\?id=(?P<id>[^&?$/]+)'
  2753. _RETURN_TYPE = 'video'
  2754. class ExpressenIE(LazyLoadExtractor):
  2755. _module = 'yt_dlp.extractor.expressen'
  2756. IE_NAME = 'Expressen'
  2757. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?(?:expressen|di)\\.se/\n (?:(?:tvspelare/video|video-?player/embed)/)?\n (?:tv|nyheter)/(?:[^/?#]+/)*\n (?P<id>[^/?#&]+)\n '
  2758. _RETURN_TYPE = 'video'
  2759. class EyedoTVIE(LazyLoadExtractor):
  2760. _module = 'yt_dlp.extractor.eyedotv'
  2761. IE_NAME = 'EyedoTV'
  2762. _VALID_URL = 'https?://(?:www\\.)?eyedo\\.tv/[^/]+/(?:#!/)?Live/Detail/(?P<id>[0-9]+)'
  2763. _RETURN_TYPE = 'video'
  2764. class FacebookAdsIE(LazyLoadExtractor):
  2765. _module = 'yt_dlp.extractor.facebook'
  2766. IE_NAME = 'facebook:ads'
  2767. _VALID_URL = 'https?://(?:[\\w-]+\\.)?facebook\\.com/ads/library/?\\?(?:[^#]+&)?id=(?P<id>\\d+)'
  2768. _RETURN_TYPE = 'any'
  2769. class FacebookIE(LazyLoadExtractor):
  2770. _module = 'yt_dlp.extractor.facebook'
  2771. IE_NAME = 'facebook'
  2772. _VALID_URL = '(?x)\n (?:\n https?://\n (?:[\\w-]+\\.)?(?:facebook\\.com|facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd\\.onion)/\n (?:[^#]*?\\#!/)?\n (?:\n (?:\n permalink\\.php|\n video/video\\.php|\n photo\\.php|\n video\\.php|\n video/embed|\n story\\.php|\n watch(?:/live)?/?\n )\\?(?:.*?)(?:v|video_id|story_fbid)=|\n [^/]+/videos/(?:[^/]+/)?|\n [^/]+/posts/|\n events/(?:[^/]+/)?|\n groups/[^/]+/(?:permalink|posts)/(?:[\\da-f]+/)?|\n watchparty/\n )|\n facebook:\n )\n (?P<id>pfbid[A-Za-z0-9]+|\\d+)\n '
  2773. _NETRC_MACHINE = 'facebook'
  2774. _RETURN_TYPE = 'any'
  2775. class FacebookPluginsVideoIE(LazyLoadExtractor):
  2776. _module = 'yt_dlp.extractor.facebook'
  2777. IE_NAME = 'FacebookPluginsVideo'
  2778. _VALID_URL = 'https?://(?:[\\w-]+\\.)?facebook\\.com/plugins/video\\.php\\?.*?\\bhref=(?P<id>https.+)'
  2779. _RETURN_TYPE = 'video'
  2780. class FacebookRedirectURLIE(LazyLoadExtractor):
  2781. _module = 'yt_dlp.extractor.facebook'
  2782. IE_NAME = 'FacebookRedirectURL'
  2783. _VALID_URL = 'https?://(?:[\\w-]+\\.)?facebook\\.com/flx/warn[/?]'
  2784. IE_DESC = False
  2785. _RETURN_TYPE = 'video'
  2786. class FacebookReelIE(LazyLoadExtractor):
  2787. _module = 'yt_dlp.extractor.facebook'
  2788. IE_NAME = 'facebook:reel'
  2789. _VALID_URL = 'https?://(?:[\\w-]+\\.)?facebook\\.com/reel/(?P<id>\\d+)'
  2790. _RETURN_TYPE = 'video'
  2791. class FancodeVodIE(LazyLoadExtractor):
  2792. _module = 'yt_dlp.extractor.fancode'
  2793. IE_NAME = 'fancode:vod'
  2794. _VALID_URL = 'https?://(?:www\\.)?fancode\\.com/video/(?P<id>[0-9]+)\\b'
  2795. _WORKING = False
  2796. _NETRC_MACHINE = 'fancode'
  2797. _RETURN_TYPE = 'video'
  2798. class FancodeLiveIE(FancodeVodIE):
  2799. _module = 'yt_dlp.extractor.fancode'
  2800. IE_NAME = 'fancode:live'
  2801. _VALID_URL = 'https?://(www\\.)?fancode\\.com/match/(?P<id>[0-9]+).+'
  2802. _WORKING = False
  2803. _NETRC_MACHINE = 'fancode'
  2804. _RETURN_TYPE = 'video'
  2805. class FathomIE(LazyLoadExtractor):
  2806. _module = 'yt_dlp.extractor.fathom'
  2807. IE_NAME = 'Fathom'
  2808. _VALID_URL = 'https?://(?:www\\.)?fathom\\.video/share/(?P<id>[^/?#&]+)'
  2809. _RETURN_TYPE = 'video'
  2810. class FazIE(LazyLoadExtractor):
  2811. _module = 'yt_dlp.extractor.faz'
  2812. IE_NAME = 'faz.net'
  2813. _VALID_URL = 'https?://(?:www\\.)?faz\\.net/(?:[^/]+/)*.*?-(?P<id>\\d+)\\.html'
  2814. _RETURN_TYPE = 'video'
  2815. class FC2IE(LazyLoadExtractor):
  2816. _module = 'yt_dlp.extractor.fc2'
  2817. IE_NAME = 'fc2'
  2818. _VALID_URL = '(?:https?://video\\.fc2\\.com/(?:[^/]+/)*content/|fc2:)(?P<id>[^/]+)'
  2819. _NETRC_MACHINE = 'fc2'
  2820. _RETURN_TYPE = 'video'
  2821. class FC2EmbedIE(LazyLoadExtractor):
  2822. _module = 'yt_dlp.extractor.fc2'
  2823. IE_NAME = 'fc2:embed'
  2824. _VALID_URL = 'https?://video\\.fc2\\.com/flv2\\.swf\\?(?P<query>.+)'
  2825. _RETURN_TYPE = 'video'
  2826. class FC2LiveIE(LazyLoadExtractor):
  2827. _module = 'yt_dlp.extractor.fc2'
  2828. IE_NAME = 'fc2:live'
  2829. _VALID_URL = 'https?://live\\.fc2\\.com/(?P<id>\\d+)'
  2830. _RETURN_TYPE = 'video'
  2831. class FczenitIE(LazyLoadExtractor):
  2832. _module = 'yt_dlp.extractor.fczenit'
  2833. IE_NAME = 'Fczenit'
  2834. _VALID_URL = 'https?://(?:www\\.)?fc-zenit\\.ru/video/(?P<id>[0-9]+)'
  2835. _RETURN_TYPE = 'video'
  2836. class FifaIE(LazyLoadExtractor):
  2837. _module = 'yt_dlp.extractor.fifa'
  2838. IE_NAME = 'Fifa'
  2839. _VALID_URL = 'https?://www\\.fifa\\.com/fifaplus/(?P<locale>\\w{2})/watch/([^#?]+/)?(?P<id>\\w+)'
  2840. _RETURN_TYPE = 'video'
  2841. class FilmOnChannelIE(LazyLoadExtractor):
  2842. _module = 'yt_dlp.extractor.filmon'
  2843. IE_NAME = 'filmon:channel'
  2844. _VALID_URL = 'https?://(?:www\\.)?filmon\\.com/(?:tv|channel)/(?P<id>[a-z0-9-]+)'
  2845. _RETURN_TYPE = 'video'
  2846. class FilmOnIE(LazyLoadExtractor):
  2847. _module = 'yt_dlp.extractor.filmon'
  2848. IE_NAME = 'filmon'
  2849. _VALID_URL = '(?:https?://(?:www\\.)?filmon\\.com/vod/view/|filmon:)(?P<id>\\d+)'
  2850. _RETURN_TYPE = 'any'
  2851. class FilmwebIE(LazyLoadExtractor):
  2852. _module = 'yt_dlp.extractor.filmweb'
  2853. IE_NAME = 'Filmweb'
  2854. _VALID_URL = 'https?://(?:www\\.)?filmweb\\.no/(?P<type>trailere|filmnytt)/article(?P<id>\\d+)\\.ece'
  2855. _RETURN_TYPE = 'video'
  2856. class FirstTVIE(LazyLoadExtractor):
  2857. _module = 'yt_dlp.extractor.firsttv'
  2858. IE_NAME = '1tv'
  2859. _VALID_URL = 'https?://(?:www\\.)?1tv\\.ru/(?:[^/]+/)+(?P<id>[^/?#]+)'
  2860. IE_DESC = 'Первый канал'
  2861. _RETURN_TYPE = 'any'
  2862. class FiveTVIE(LazyLoadExtractor):
  2863. _module = 'yt_dlp.extractor.fivetv'
  2864. IE_NAME = 'FiveTV'
  2865. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?5-tv\\.ru/\n (?:\n (?:[^/]+/)+(?P<id>\\d+)|\n (?P<path>[^/?#]+)(?:[/?#])?\n )\n '
  2866. _RETURN_TYPE = 'video'
  2867. class FlexTVIE(LazyLoadExtractor):
  2868. _module = 'yt_dlp.extractor.flextv'
  2869. IE_NAME = 'FlexTV'
  2870. _VALID_URL = 'https?://(?:www\\.)?flextv\\.co\\.kr/channels/(?P<id>\\d+)/live'
  2871. _RETURN_TYPE = 'video'
  2872. class FlickrIE(LazyLoadExtractor):
  2873. _module = 'yt_dlp.extractor.flickr'
  2874. IE_NAME = 'Flickr'
  2875. _VALID_URL = 'https?://(?:www\\.|secure\\.)?flickr\\.com/photos/[\\w\\-_@]+/(?P<id>\\d+)'
  2876. _RETURN_TYPE = 'video'
  2877. class FloatplaneChannelIE(LazyLoadExtractor):
  2878. _module = 'yt_dlp.extractor.floatplane'
  2879. IE_NAME = 'FloatplaneChannel'
  2880. _VALID_URL = 'https?://(?:(?:www|beta)\\.)?floatplane\\.com/channel/(?P<id>[\\w-]+)/home(?:/(?P<channel>[\\w-]+))?'
  2881. _RETURN_TYPE = 'playlist'
  2882. class FloatplaneIE(LazyLoadExtractor):
  2883. _module = 'yt_dlp.extractor.floatplane'
  2884. IE_NAME = 'Floatplane'
  2885. _VALID_URL = 'https?://(?:(?:www|beta)\\.)?floatplane\\.com/post/(?P<id>\\w+)'
  2886. _RETURN_TYPE = 'any'
  2887. class FolketingetIE(LazyLoadExtractor):
  2888. _module = 'yt_dlp.extractor.folketinget'
  2889. IE_NAME = 'Folketinget'
  2890. _VALID_URL = 'https?://(?:www\\.)?ft\\.dk/webtv/video/[^?#]*?\\.(?P<id>[0-9]+)\\.aspx'
  2891. IE_DESC = 'Folketinget (ft.dk; Danish parliament)'
  2892. _RETURN_TYPE = 'video'
  2893. class FootyRoomIE(LazyLoadExtractor):
  2894. _module = 'yt_dlp.extractor.footyroom'
  2895. IE_NAME = 'FootyRoom'
  2896. _VALID_URL = 'https?://footyroom\\.com/matches/(?P<id>\\d+)'
  2897. _RETURN_TYPE = 'playlist'
  2898. class Formula1IE(LazyLoadExtractor):
  2899. _module = 'yt_dlp.extractor.formula1'
  2900. IE_NAME = 'Formula1'
  2901. _VALID_URL = 'https?://(?:www\\.)?formula1\\.com/en/latest/video\\.[^.]+\\.(?P<id>\\d+)\\.html'
  2902. _RETURN_TYPE = 'video'
  2903. class FourTubeBaseIE(LazyLoadExtractor):
  2904. _module = 'yt_dlp.extractor.fourtube'
  2905. IE_NAME = 'FourTubeBase'
  2906. class FourTubeIE(FourTubeBaseIE):
  2907. _module = 'yt_dlp.extractor.fourtube'
  2908. IE_NAME = '4tube'
  2909. _VALID_URL = 'https?://(?:(?P<kind>www|m)\\.)?4tube\\.com/(?:videos|embed)/(?P<id>\\d+)(?:/(?P<display_id>[^/?#&]+))?'
  2910. age_limit = 18
  2911. _RETURN_TYPE = 'video'
  2912. class FuxIE(FourTubeBaseIE):
  2913. _module = 'yt_dlp.extractor.fourtube'
  2914. IE_NAME = 'Fux'
  2915. _VALID_URL = 'https?://(?:(?P<kind>www|m)\\.)?fux\\.com/(?:video|embed)/(?P<id>\\d+)(?:/(?P<display_id>[^/?#&]+))?'
  2916. age_limit = 18
  2917. _RETURN_TYPE = 'video'
  2918. class PornerBrosIE(FourTubeBaseIE):
  2919. _module = 'yt_dlp.extractor.fourtube'
  2920. IE_NAME = 'PornerBros'
  2921. _VALID_URL = 'https?://(?:(?P<kind>www|m)\\.)?pornerbros\\.com/(?:videos/(?P<display_id>[^/]+)_|embed/)(?P<id>\\d+)'
  2922. age_limit = 18
  2923. _RETURN_TYPE = 'video'
  2924. class PornTubeIE(FourTubeBaseIE):
  2925. _module = 'yt_dlp.extractor.fourtube'
  2926. IE_NAME = 'PornTube'
  2927. _VALID_URL = 'https?://(?:(?P<kind>www|m)\\.)?porntube\\.com/(?:videos/(?P<display_id>[^/]+)_|embed/)(?P<id>\\d+)'
  2928. age_limit = 18
  2929. _RETURN_TYPE = 'video'
  2930. class FOXIE(LazyLoadExtractor):
  2931. _module = 'yt_dlp.extractor.fox'
  2932. IE_NAME = 'FOX'
  2933. _VALID_URL = 'https?://(?:www\\.)?fox(?:sports)?\\.com/(?:watch|replay)/(?P<id>[\\da-fA-F]+)'
  2934. age_limit = 14
  2935. _RETURN_TYPE = 'video'
  2936. class FOX9IE(LazyLoadExtractor):
  2937. _module = 'yt_dlp.extractor.fox9'
  2938. IE_NAME = 'FOX9'
  2939. _VALID_URL = 'https?://(?:www\\.)?fox9\\.com/video/(?P<id>\\d+)'
  2940. class FOX9NewsIE(LazyLoadExtractor):
  2941. _module = 'yt_dlp.extractor.fox9'
  2942. IE_NAME = 'FOX9News'
  2943. _VALID_URL = 'https?://(?:www\\.)?fox9\\.com/news/(?P<id>[^/?&#]+)'
  2944. _RETURN_TYPE = 'video'
  2945. class FoxNewsArticleIE(LazyLoadExtractor):
  2946. _module = 'yt_dlp.extractor.foxnews'
  2947. IE_NAME = 'foxnews:article'
  2948. _VALID_URL = 'https?://(?:www\\.)?(?:insider\\.)?foxnews\\.com/(?!v)([^/]+/)+(?P<id>[a-z-]+)'
  2949. _RETURN_TYPE = 'video'
  2950. class FoxNewsIE(AMPIE):
  2951. _module = 'yt_dlp.extractor.foxnews'
  2952. IE_NAME = 'foxnews'
  2953. _VALID_URL = 'https?://video\\.(?:insider\\.)?fox(?:news|business)\\.com/v/(?:video-embed\\.html\\?video_id=)?(?P<id>\\d+)'
  2954. IE_DESC = 'Fox News and Fox Business Video'
  2955. _RETURN_TYPE = 'video'
  2956. class FoxNewsVideoIE(LazyLoadExtractor):
  2957. _module = 'yt_dlp.extractor.foxnews'
  2958. IE_NAME = 'FoxNewsVideo'
  2959. _VALID_URL = 'https?://(?:www\\.)?foxnews\\.com/video/(?P<id>\\d+)'
  2960. _RETURN_TYPE = 'video'
  2961. class FoxSportsIE(LazyLoadExtractor):
  2962. _module = 'yt_dlp.extractor.foxsports'
  2963. IE_NAME = 'FoxSports'
  2964. _VALID_URL = 'https?://(?:www\\.)?foxsports\\.com/watch/(?P<id>[\\w-]+)'
  2965. _RETURN_TYPE = 'video'
  2966. class FptplayIE(LazyLoadExtractor):
  2967. _module = 'yt_dlp.extractor.fptplay'
  2968. IE_NAME = 'fptplay'
  2969. _VALID_URL = 'https?://fptplay\\.vn/xem-video/[^/]+\\-(?P<id>\\w+)(?:/tap-(?P<episode>\\d+)?/?(?:[?#]|$)|)'
  2970. IE_DESC = 'fptplay.vn'
  2971. _RETURN_TYPE = 'video'
  2972. class FranceInterIE(LazyLoadExtractor):
  2973. _module = 'yt_dlp.extractor.franceinter'
  2974. IE_NAME = 'FranceInter'
  2975. _VALID_URL = 'https?://(?:www\\.)?franceinter\\.fr/emissions/(?P<id>[^?#]+)'
  2976. _RETURN_TYPE = 'video'
  2977. class FranceTVIE(LazyLoadExtractor):
  2978. _module = 'yt_dlp.extractor.francetv'
  2979. IE_NAME = 'FranceTV'
  2980. _VALID_URL = 'francetv:(?P<id>[^@#]+)'
  2981. _RETURN_TYPE = 'video'
  2982. class FranceTVBaseInfoExtractor(LazyLoadExtractor):
  2983. _module = 'yt_dlp.extractor.francetv'
  2984. IE_NAME = 'FranceTVBaseInfoExtract'
  2985. class FranceTVInfoIE(FranceTVBaseInfoExtractor):
  2986. _module = 'yt_dlp.extractor.francetv'
  2987. IE_NAME = 'francetvinfo.fr'
  2988. _VALID_URL = 'https?://(?:www|mobile|france3-regions)\\.francetvinfo\\.fr/(?:[^/]+/)*(?P<id>[^/?#&.]+)'
  2989. _RETURN_TYPE = 'video'
  2990. class FranceTVSiteIE(FranceTVBaseInfoExtractor):
  2991. _module = 'yt_dlp.extractor.francetv'
  2992. IE_NAME = 'FranceTVSite'
  2993. _VALID_URL = 'https?://(?:(?:www\\.)?france\\.tv|mobile\\.france\\.tv)/(?:[^/]+/)*(?P<id>[^/]+)\\.html'
  2994. _RETURN_TYPE = 'video'
  2995. class FreesoundIE(LazyLoadExtractor):
  2996. _module = 'yt_dlp.extractor.freesound'
  2997. IE_NAME = 'Freesound'
  2998. _VALID_URL = 'https?://(?:www\\.)?freesound\\.org/people/[^/]+/sounds/(?P<id>[^/]+)'
  2999. _RETURN_TYPE = 'video'
  3000. class FreespeechIE(LazyLoadExtractor):
  3001. _module = 'yt_dlp.extractor.freespeech'
  3002. IE_NAME = 'freespeech.org'
  3003. _VALID_URL = 'https?://(?:www\\.)?freespeech\\.org/stories/(?P<id>.+)'
  3004. _RETURN_TYPE = 'video'
  3005. class FreeTvBaseIE(LazyLoadExtractor):
  3006. _module = 'yt_dlp.extractor.freetv'
  3007. IE_NAME = 'FreeTvBase'
  3008. class FreeTvIE(FreeTvBaseIE):
  3009. _module = 'yt_dlp.extractor.freetv'
  3010. IE_NAME = 'freetv:series'
  3011. _VALID_URL = 'https?://(?:www\\.)?freetv\\.com/series/(?P<id>[^/]+)'
  3012. _RETURN_TYPE = 'playlist'
  3013. class FreeTvMoviesIE(FreeTvBaseIE):
  3014. _module = 'yt_dlp.extractor.freetv'
  3015. IE_NAME = 'FreeTvMovies'
  3016. _VALID_URL = 'https?://(?:www\\.)?freetv\\.com/peliculas/(?P<id>[^/]+)'
  3017. _RETURN_TYPE = 'video'
  3018. class FrontendMastersBaseIE(LazyLoadExtractor):
  3019. _module = 'yt_dlp.extractor.frontendmasters'
  3020. IE_NAME = 'FrontendMastersBase'
  3021. _NETRC_MACHINE = 'frontendmasters'
  3022. class FrontendMastersPageBaseIE(FrontendMastersBaseIE):
  3023. _module = 'yt_dlp.extractor.frontendmasters'
  3024. IE_NAME = 'FrontendMastersPageBase'
  3025. _NETRC_MACHINE = 'frontendmasters'
  3026. class FrontendMastersCourseIE(FrontendMastersPageBaseIE):
  3027. _module = 'yt_dlp.extractor.frontendmasters'
  3028. IE_NAME = 'FrontendMastersCourse'
  3029. _VALID_URL = 'https?://(?:www\\.)?frontendmasters\\.com/courses/(?P<id>[^/]+)'
  3030. _NETRC_MACHINE = 'frontendmasters'
  3031. _RETURN_TYPE = 'playlist'
  3032. @classmethod
  3033. def suitable(cls, url):
  3034. return False if FrontendMastersLessonIE.suitable(url) else super(
  3035. FrontendMastersBaseIE, cls).suitable(url)
  3036. class FrontendMastersIE(FrontendMastersBaseIE):
  3037. _module = 'yt_dlp.extractor.frontendmasters'
  3038. IE_NAME = 'FrontendMasters'
  3039. _VALID_URL = '(?:frontendmasters:|https?://api\\.frontendmasters\\.com/v\\d+/kabuki/video/)(?P<id>[^/]+)'
  3040. _NETRC_MACHINE = 'frontendmasters'
  3041. _RETURN_TYPE = 'video'
  3042. class FrontendMastersLessonIE(FrontendMastersPageBaseIE):
  3043. _module = 'yt_dlp.extractor.frontendmasters'
  3044. IE_NAME = 'FrontendMastersLesson'
  3045. _VALID_URL = 'https?://(?:www\\.)?frontendmasters\\.com/courses/(?P<course_name>[^/]+)/(?P<lesson_name>[^/]+)'
  3046. _NETRC_MACHINE = 'frontendmasters'
  3047. _RETURN_TYPE = 'video'
  3048. class FujiTVFODPlus7IE(LazyLoadExtractor):
  3049. _module = 'yt_dlp.extractor.fujitv'
  3050. IE_NAME = 'FujiTVFODPlus7'
  3051. _VALID_URL = 'https?://fod\\.fujitv\\.co\\.jp/title/(?P<sid>[0-9a-z]{4})/(?P<id>[0-9a-z]+)'
  3052. _RETURN_TYPE = 'video'
  3053. class FunimationBaseIE(LazyLoadExtractor):
  3054. _module = 'yt_dlp.extractor.funimation'
  3055. IE_NAME = 'FunimationBase'
  3056. _NETRC_MACHINE = 'funimation'
  3057. class FunimationIE(FunimationBaseIE):
  3058. _module = 'yt_dlp.extractor.funimation'
  3059. IE_NAME = 'Funimation'
  3060. _VALID_URL = 'https?://(?:www\\.)?funimation\\.com/player/(?P<id>\\d+)'
  3061. _NETRC_MACHINE = 'funimation'
  3062. _RETURN_TYPE = 'video'
  3063. class FunimationPageIE(FunimationBaseIE):
  3064. _module = 'yt_dlp.extractor.funimation'
  3065. IE_NAME = 'funimation:page'
  3066. _VALID_URL = 'https?://(?:www\\.)?funimation(?:\\.com|now\\.uk)/(?:(?P<lang>[^/]+)/)?(?:shows|v)/(?P<show>[^/]+)/(?P<episode>[^/?#&]+)'
  3067. _NETRC_MACHINE = 'funimation'
  3068. _RETURN_TYPE = 'video'
  3069. class FunimationShowIE(FunimationBaseIE):
  3070. _module = 'yt_dlp.extractor.funimation'
  3071. IE_NAME = 'funimation:show'
  3072. _VALID_URL = '(?P<url>https?://(?:www\\.)?funimation(?:\\.com|now\\.uk)/(?P<locale>[^/]+)?/?shows/(?P<id>[^/?#&]+))/?(?:[?#]|$)'
  3073. _NETRC_MACHINE = 'funimation'
  3074. _RETURN_TYPE = 'playlist'
  3075. class FunkIE(LazyLoadExtractor):
  3076. _module = 'yt_dlp.extractor.funk'
  3077. IE_NAME = 'Funk'
  3078. _VALID_URL = 'https?://(?:(?:www|origin|play)\\.)?funk\\.net/(?:channel|playlist)/[^/?#]+/(?P<display_id>[0-9a-z-]+)-(?P<id>\\d+)'
  3079. _RETURN_TYPE = 'video'
  3080. class Funker530IE(LazyLoadExtractor):
  3081. _module = 'yt_dlp.extractor.funker530'
  3082. IE_NAME = 'Funker530'
  3083. _VALID_URL = 'https?://(?:www\\.)?funker530\\.com/video/(?P<id>[^/?#]+)'
  3084. _RETURN_TYPE = 'video'
  3085. class FuyinTVIE(LazyLoadExtractor):
  3086. _module = 'yt_dlp.extractor.fuyintv'
  3087. IE_NAME = 'FuyinTV'
  3088. _VALID_URL = 'https?://(?:www\\.)?fuyin\\.tv/html/(?:\\d+)/(?P<id>\\d+)\\.html'
  3089. _RETURN_TYPE = 'video'
  3090. class GabIE(LazyLoadExtractor):
  3091. _module = 'yt_dlp.extractor.gab'
  3092. IE_NAME = 'Gab'
  3093. _VALID_URL = 'https?://(?:www\\.)?gab\\.com/[^/]+/posts/(?P<id>\\d+)'
  3094. _RETURN_TYPE = 'video'
  3095. class GabTVIE(LazyLoadExtractor):
  3096. _module = 'yt_dlp.extractor.gab'
  3097. IE_NAME = 'GabTV'
  3098. _VALID_URL = 'https?://tv\\.gab\\.com/channel/[^/]+/view/(?P<id>[a-z0-9-]+)'
  3099. _RETURN_TYPE = 'video'
  3100. class GaiaIE(LazyLoadExtractor):
  3101. _module = 'yt_dlp.extractor.gaia'
  3102. IE_NAME = 'Gaia'
  3103. _VALID_URL = 'https?://(?:www\\.)?gaia\\.com/video/(?P<id>[^/?]+).*?\\bfullplayer=(?P<type>feature|preview)'
  3104. _NETRC_MACHINE = 'gaia'
  3105. _RETURN_TYPE = 'video'
  3106. class GameDevTVDashboardIE(LazyLoadExtractor):
  3107. _module = 'yt_dlp.extractor.gamedevtv'
  3108. IE_NAME = 'GameDevTVDashboard'
  3109. _VALID_URL = 'https?://(?:www\\.)?gamedev\\.tv/dashboard/courses/(?P<course_id>\\d+)(?:/(?P<lecture_id>\\d+))?'
  3110. _NETRC_MACHINE = 'gamedevtv'
  3111. _RETURN_TYPE = 'any'
  3112. class GameJoltBaseIE(LazyLoadExtractor):
  3113. _module = 'yt_dlp.extractor.gamejolt'
  3114. IE_NAME = 'GameJoltBase'
  3115. class GameJoltPostListBaseIE(GameJoltBaseIE):
  3116. _module = 'yt_dlp.extractor.gamejolt'
  3117. IE_NAME = 'GameJoltPostListBase'
  3118. class GameJoltCommunityIE(GameJoltPostListBaseIE):
  3119. _module = 'yt_dlp.extractor.gamejolt'
  3120. IE_NAME = 'GameJoltCommunity'
  3121. _VALID_URL = 'https?://(?:www\\.)?gamejolt\\.com/c/(?P<id>(?P<community>[\\w-]+)(?:/(?P<channel>[\\w-]+))?)(?:(?:\\?|\\#!?)(?:.*?[&;])??sort=(?P<sort>\\w+))?'
  3122. _RETURN_TYPE = 'playlist'
  3123. class GameJoltGameIE(GameJoltPostListBaseIE):
  3124. _module = 'yt_dlp.extractor.gamejolt'
  3125. IE_NAME = 'GameJoltGame'
  3126. _VALID_URL = 'https?://(?:www\\.)?gamejolt\\.com/games/[\\w-]+/(?P<id>\\d+)'
  3127. _RETURN_TYPE = 'playlist'
  3128. class GameJoltGameSoundtrackIE(GameJoltBaseIE):
  3129. _module = 'yt_dlp.extractor.gamejolt'
  3130. IE_NAME = 'GameJoltGameSoundtrack'
  3131. _VALID_URL = 'https?://(?:www\\.)?gamejolt\\.com/get/soundtrack(?:\\?|\\#!?)(?:.*?[&;])??game=(?P<id>(?:\\d+)+)'
  3132. _RETURN_TYPE = 'playlist'
  3133. class GameJoltIE(GameJoltBaseIE):
  3134. _module = 'yt_dlp.extractor.gamejolt'
  3135. IE_NAME = 'GameJolt'
  3136. _VALID_URL = 'https?://(?:www\\.)?gamejolt\\.com/p/(?:[\\w-]*-)?(?P<id>\\w{8})'
  3137. _RETURN_TYPE = 'any'
  3138. class GameJoltSearchIE(GameJoltPostListBaseIE):
  3139. _module = 'yt_dlp.extractor.gamejolt'
  3140. IE_NAME = 'GameJoltSearch'
  3141. _VALID_URL = 'https?://(?:www\\.)?gamejolt\\.com/search(?:/(?P<filter>communities|users|games))?(?:\\?|\\#!?)(?:.*?[&;])??q=(?P<id>(?:[^&#]+)+)'
  3142. _RETURN_TYPE = 'playlist'
  3143. class GameJoltUserIE(GameJoltPostListBaseIE):
  3144. _module = 'yt_dlp.extractor.gamejolt'
  3145. IE_NAME = 'GameJoltUser'
  3146. _VALID_URL = 'https?://(?:www\\.)?gamejolt\\.com/@(?P<id>[\\w-]+)'
  3147. _RETURN_TYPE = 'playlist'
  3148. class GameSpotIE(OnceIE):
  3149. _module = 'yt_dlp.extractor.gamespot'
  3150. IE_NAME = 'GameSpot'
  3151. _VALID_URL = 'https?://(?:www\\.)?gamespot\\.com/(?:video|article|review)s/(?:[^/]+/\\d+-|embed/)(?P<id>\\d+)'
  3152. _RETURN_TYPE = 'video'
  3153. class GameStarIE(LazyLoadExtractor):
  3154. _module = 'yt_dlp.extractor.gamestar'
  3155. IE_NAME = 'GameStar'
  3156. _VALID_URL = 'https?://(?:www\\.)?game(?P<site>pro|star)\\.de/videos/.*,(?P<id>[0-9]+)\\.html'
  3157. _RETURN_TYPE = 'video'
  3158. class GaskrankIE(LazyLoadExtractor):
  3159. _module = 'yt_dlp.extractor.gaskrank'
  3160. IE_NAME = 'Gaskrank'
  3161. _VALID_URL = 'https?://(?:www\\.)?gaskrank\\.tv/tv/(?P<categories>[^/]+)/(?P<id>[^/]+)\\.htm'
  3162. _RETURN_TYPE = 'video'
  3163. class GazetaIE(LazyLoadExtractor):
  3164. _module = 'yt_dlp.extractor.gazeta'
  3165. IE_NAME = 'Gazeta'
  3166. _VALID_URL = '(?P<url>https?://(?:www\\.)?gazeta\\.ru/(?:[^/]+/)?video/(?:main/)*(?:\\d{4}/\\d{2}/\\d{2}/)?(?P<id>[A-Za-z0-9-_.]+)\\.s?html)'
  3167. _WORKING = False
  3168. _RETURN_TYPE = 'video'
  3169. class GBNewsIE(LazyLoadExtractor):
  3170. _module = 'yt_dlp.extractor.gbnews'
  3171. IE_NAME = 'GBNews'
  3172. _VALID_URL = 'https?://(?:www\\.)?gbnews\\.(?:uk|com)/(?:\\w+/)?(?P<id>[^#?]+)'
  3173. IE_DESC = 'GB News clips, features and live streams'
  3174. _RETURN_TYPE = 'video'
  3175. class GDCVaultIE(LazyLoadExtractor):
  3176. _module = 'yt_dlp.extractor.gdcvault'
  3177. IE_NAME = 'GDCVault'
  3178. _VALID_URL = 'https?://(?:www\\.)?gdcvault\\.com/play/(?P<id>\\d+)(?:/(?P<name>[\\w-]+))?'
  3179. _WORKING = False
  3180. _NETRC_MACHINE = 'gdcvault'
  3181. _RETURN_TYPE = 'video'
  3182. class GediDigitalIE(LazyLoadExtractor):
  3183. _module = 'yt_dlp.extractor.gedidigital'
  3184. IE_NAME = 'GediDigital'
  3185. _VALID_URL = '(?x:(?P<base_url>(?:https?:)//video\\.\n (?:\n (?:\n (?:espresso\\.)?repubblica\n |lastampa\n |ilsecoloxix\n |huffingtonpost\n )|\n (?:\n iltirreno\n |messaggeroveneto\n |ilpiccolo\n |gazzettadimantova\n |mattinopadova\n |laprovinciapavese\n |tribunatreviso\n |nuovavenezia\n |gazzettadimodena\n |lanuovaferrara\n |corrierealpi\n |lasentinella\n )\\.gelocal\n )\\.it(?:/[^/]+){2,4}/(?P<id>\\d+))(?:$|[?&].*))'
  3186. _RETURN_TYPE = 'video'
  3187. class HTML5MediaEmbedIE(LazyLoadExtractor):
  3188. _module = 'yt_dlp.extractor.genericembeds'
  3189. IE_NAME = 'html5'
  3190. _VALID_URL = False
  3191. class QuotedHTMLIE(LazyLoadExtractor):
  3192. _module = 'yt_dlp.extractor.genericembeds'
  3193. IE_NAME = 'generic:quoted-html'
  3194. _VALID_URL = False
  3195. IE_DESC = False
  3196. class GeniusIE(LazyLoadExtractor):
  3197. _module = 'yt_dlp.extractor.genius'
  3198. IE_NAME = 'Genius'
  3199. _VALID_URL = 'https?://(?:www\\.)?genius\\.com/(?:videos|(?P<article>a))/(?P<id>[^?/#]+)'
  3200. _RETURN_TYPE = 'video'
  3201. class GeniusLyricsIE(LazyLoadExtractor):
  3202. _module = 'yt_dlp.extractor.genius'
  3203. IE_NAME = 'GeniusLyrics'
  3204. _VALID_URL = 'https?://(?:www\\.)?genius\\.com/(?P<id>[^?/#]+)-lyrics(?:[?/#]|$)'
  3205. _RETURN_TYPE = 'playlist'
  3206. class GermanupaIE(LazyLoadExtractor):
  3207. _module = 'yt_dlp.extractor.germanupa'
  3208. IE_NAME = 'Germanupa'
  3209. _VALID_URL = 'https?://germanupa\\.de/mediathek/(?P<id>[\\w-]+)'
  3210. IE_DESC = 'germanupa.de'
  3211. _RETURN_TYPE = 'video'
  3212. class GetCourseRuIE(LazyLoadExtractor):
  3213. _module = 'yt_dlp.extractor.getcourseru'
  3214. IE_NAME = 'GetCourseRu'
  3215. _VALID_URL = ['https?://(?:(?!player02\\.)[^.]+\\.getcourse\\.(?:ru|io)|academymel\\.online|marafon\\.mani\\-beauty\\.com|on\\.psbook\\.ru)/(?!pl/|teach/)(?P<id>[^?#]+)', 'https?://(?:(?!player02\\.)[^.]+\\.getcourse\\.(?:ru|io)|academymel\\.online|marafon\\.mani\\-beauty\\.com|on\\.psbook\\.ru)/(?:pl/)?teach/control/lesson/view\\?(?:[^#]+&)?id=(?P<id>\\d+)']
  3216. _NETRC_MACHINE = 'getcourseru'
  3217. _RETURN_TYPE = 'playlist'
  3218. class GetCourseRuPlayerIE(LazyLoadExtractor):
  3219. _module = 'yt_dlp.extractor.getcourseru'
  3220. IE_NAME = 'GetCourseRuPlayer'
  3221. _VALID_URL = 'https?://player02\\.getcourse\\.ru/sign-player/?\\?(?:[^#]+&)?json=[^#&]+'
  3222. _RETURN_TYPE = 'video'
  3223. class GettrBaseIE(LazyLoadExtractor):
  3224. _module = 'yt_dlp.extractor.gettr'
  3225. IE_NAME = 'GettrBase'
  3226. class GettrIE(GettrBaseIE):
  3227. _module = 'yt_dlp.extractor.gettr'
  3228. IE_NAME = 'Gettr'
  3229. _VALID_URL = 'https?://(www\\.)?gettr\\.com/post/(?P<id>[a-z0-9]+)'
  3230. _RETURN_TYPE = 'video'
  3231. class GettrStreamingIE(GettrBaseIE):
  3232. _module = 'yt_dlp.extractor.gettr'
  3233. IE_NAME = 'GettrStreaming'
  3234. _VALID_URL = 'https?://(www\\.)?gettr\\.com/streaming/(?P<id>[a-z0-9]+)'
  3235. _RETURN_TYPE = 'video'
  3236. class GiantBombIE(LazyLoadExtractor):
  3237. _module = 'yt_dlp.extractor.giantbomb'
  3238. IE_NAME = 'GiantBomb'
  3239. _VALID_URL = 'https?://(?:www\\.)?giantbomb\\.com/(?:videos|shows)/(?P<display_id>[^/]+)/(?P<id>\\d+-\\d+)'
  3240. _RETURN_TYPE = 'video'
  3241. class GlideIE(LazyLoadExtractor):
  3242. _module = 'yt_dlp.extractor.glide'
  3243. IE_NAME = 'Glide'
  3244. _VALID_URL = 'https?://share\\.glide\\.me/(?P<id>[A-Za-z0-9\\-=_+]+)'
  3245. IE_DESC = 'Glide mobile video messages (glide.me)'
  3246. _RETURN_TYPE = 'video'
  3247. class GlobalPlayerBaseIE(LazyLoadExtractor):
  3248. _module = 'yt_dlp.extractor.globalplayer'
  3249. IE_NAME = 'GlobalPlayerBase'
  3250. class GlobalPlayerAudioEpisodeIE(GlobalPlayerBaseIE):
  3251. _module = 'yt_dlp.extractor.globalplayer'
  3252. IE_NAME = 'GlobalPlayerAudioEpisode'
  3253. _VALID_URL = 'https?://www\\.globalplayer\\.com/(?:(?P<podcast>podcasts)|catchup/\\w+/\\w+)/episodes/(?P<id>\\w+)/?(?:$|[?#])'
  3254. _RETURN_TYPE = 'video'
  3255. class GlobalPlayerAudioIE(GlobalPlayerBaseIE):
  3256. _module = 'yt_dlp.extractor.globalplayer'
  3257. IE_NAME = 'GlobalPlayerAudio'
  3258. _VALID_URL = 'https?://www\\.globalplayer\\.com/(?:(?P<podcast>podcasts)/|catchup/\\w+/\\w+/)(?P<id>\\w+)/?(?:$|[?#])'
  3259. _RETURN_TYPE = 'playlist'
  3260. class GlobalPlayerLiveIE(GlobalPlayerBaseIE):
  3261. _module = 'yt_dlp.extractor.globalplayer'
  3262. IE_NAME = 'GlobalPlayerLive'
  3263. _VALID_URL = 'https?://www\\.globalplayer\\.com/live/(?P<id>\\w+)/\\w+'
  3264. _RETURN_TYPE = 'video'
  3265. class GlobalPlayerLivePlaylistIE(GlobalPlayerBaseIE):
  3266. _module = 'yt_dlp.extractor.globalplayer'
  3267. IE_NAME = 'GlobalPlayerLivePlaylist'
  3268. _VALID_URL = 'https?://www\\.globalplayer\\.com/playlists/(?P<id>\\w+)'
  3269. _RETURN_TYPE = 'video'
  3270. class GlobalPlayerVideoIE(GlobalPlayerBaseIE):
  3271. _module = 'yt_dlp.extractor.globalplayer'
  3272. IE_NAME = 'GlobalPlayerVideo'
  3273. _VALID_URL = 'https?://www\\.globalplayer\\.com/videos/(?P<id>\\w+)'
  3274. _RETURN_TYPE = 'video'
  3275. class GloboArticleIE(LazyLoadExtractor):
  3276. _module = 'yt_dlp.extractor.globo'
  3277. IE_NAME = 'GloboArticle'
  3278. _VALID_URL = 'https?://.+?\\.globo\\.com/(?:[^/]+/)*(?P<id>[^/.]+)(?:\\.html)?'
  3279. _RETURN_TYPE = 'playlist'
  3280. @classmethod
  3281. def suitable(cls, url):
  3282. return False if GloboIE.suitable(url) else super().suitable(url)
  3283. class GloboIE(LazyLoadExtractor):
  3284. _module = 'yt_dlp.extractor.globo'
  3285. IE_NAME = 'Globo'
  3286. _VALID_URL = '(?:globo:|https?://.+?\\.globo\\.com/(?:[^/]+/)*(?:v/(?:[^/]+/)?|videos/))(?P<id>\\d{7,})'
  3287. _NETRC_MACHINE = 'globo'
  3288. _RETURN_TYPE = 'video'
  3289. class GlomexBaseIE(LazyLoadExtractor):
  3290. _module = 'yt_dlp.extractor.glomex'
  3291. IE_NAME = 'GlomexBase'
  3292. class GlomexEmbedIE(GlomexBaseIE):
  3293. _module = 'yt_dlp.extractor.glomex'
  3294. IE_NAME = 'glomex:embed'
  3295. _VALID_URL = 'https?://player\\.glomex\\.com/integration/[^/]/iframe\\-player\\.html\\?([^#]+&)?playlistId=(?P<id>[^#&]+)'
  3296. IE_DESC = 'Glomex embedded videos'
  3297. _RETURN_TYPE = 'any'
  3298. class GlomexIE(GlomexBaseIE):
  3299. _module = 'yt_dlp.extractor.glomex'
  3300. IE_NAME = 'glomex'
  3301. _VALID_URL = 'https?://video\\.glomex\\.com/[^/]+/(?P<id>v-[^-]+)'
  3302. IE_DESC = 'Glomex videos'
  3303. _RETURN_TYPE = 'video'
  3304. class GMANetworkVideoIE(LazyLoadExtractor):
  3305. _module = 'yt_dlp.extractor.gmanetwork'
  3306. IE_NAME = 'GMANetworkVideo'
  3307. _VALID_URL = 'https?://(?:www)\\.gmanetwork\\.com/(?:\\w+/){3}(?P<id>\\d+)/(?P<display_id>[\\w-]+)/video'
  3308. _RETURN_TYPE = 'video'
  3309. class GoIE(AdobePassIE):
  3310. _module = 'yt_dlp.extractor.go'
  3311. IE_NAME = 'Go'
  3312. _VALID_URL = '(?x)\n https?://\n (?P<sub_domain>\n (?:abc\\.|freeform\\.|watchdisneychannel\\.|watchdisneyjunior\\.|watchdisneyxd\\.|disneynow\\.|fxnow.fxnetworks\\.)?go|fxnow\\.fxnetworks|\n (?:www\\.)?(?:abc|freeform|disneynow)\n )\\.com/\n (?:\n (?:[^/]+/)*(?P<id>[Vv][Dd][Kk][Aa]\\w+)|\n (?:[^/]+/)*(?P<display_id>[^/?\\#]+)\n )\n '
  3313. age_limit = 14
  3314. _RETURN_TYPE = 'any'
  3315. class GodResourceIE(LazyLoadExtractor):
  3316. _module = 'yt_dlp.extractor.godresource'
  3317. IE_NAME = 'GodResource'
  3318. _VALID_URL = 'https?://new\\.godresource\\.com/video/(?P<id>\\w+)'
  3319. _RETURN_TYPE = 'video'
  3320. class GodTubeIE(LazyLoadExtractor):
  3321. _module = 'yt_dlp.extractor.godtube'
  3322. IE_NAME = 'GodTube'
  3323. _VALID_URL = 'https?://(?:www\\.)?godtube\\.com/watch/\\?v=(?P<id>[\\da-zA-Z]+)'
  3324. _WORKING = False
  3325. _RETURN_TYPE = 'video'
  3326. class GofileIE(LazyLoadExtractor):
  3327. _module = 'yt_dlp.extractor.gofile'
  3328. IE_NAME = 'Gofile'
  3329. _VALID_URL = 'https?://(?:www\\.)?gofile\\.io/d/(?P<id>[^/]+)'
  3330. _RETURN_TYPE = 'playlist'
  3331. class GolemIE(LazyLoadExtractor):
  3332. _module = 'yt_dlp.extractor.golem'
  3333. IE_NAME = 'Golem'
  3334. _VALID_URL = 'https?://video\\.golem\\.de/.+?/(?P<id>.+?)/'
  3335. _RETURN_TYPE = 'video'
  3336. class GoodGameIE(LazyLoadExtractor):
  3337. _module = 'yt_dlp.extractor.goodgame'
  3338. IE_NAME = 'goodgame:stream'
  3339. _VALID_URL = 'https?://goodgame\\.ru/channel/(?P<id>\\w+)'
  3340. _RETURN_TYPE = 'video'
  3341. class GoogleDriveFolderIE(LazyLoadExtractor):
  3342. _module = 'yt_dlp.extractor.googledrive'
  3343. IE_NAME = 'GoogleDrive:Folder'
  3344. _VALID_URL = 'https?://(?:docs|drive)\\.google\\.com/drive/folders/(?P<id>[\\w-]{28,})'
  3345. _RETURN_TYPE = 'playlist'
  3346. class GoogleDriveIE(LazyLoadExtractor):
  3347. _module = 'yt_dlp.extractor.googledrive'
  3348. IE_NAME = 'GoogleDrive'
  3349. _VALID_URL = '(?x)\n https?://\n (?:\n (?:docs|drive|drive\\.usercontent)\\.google\\.com/\n (?:\n (?:uc|open|download)\\?.*?id=|\n file/d/\n )|\n video\\.google\\.com/get_player\\?.*?docid=\n )\n (?P<id>[a-zA-Z0-9_-]{28,})\n '
  3350. _RETURN_TYPE = 'video'
  3351. class GooglePodcastsBaseIE(LazyLoadExtractor):
  3352. _module = 'yt_dlp.extractor.googlepodcasts'
  3353. IE_NAME = 'GooglePodcastsBase'
  3354. class GooglePodcastsFeedIE(GooglePodcastsBaseIE):
  3355. _module = 'yt_dlp.extractor.googlepodcasts'
  3356. IE_NAME = 'google:podcasts:feed'
  3357. _VALID_URL = 'https?://podcasts\\.google\\.com/feed/(?P<id>[^/?&#]+)/?(?:[?#&]|$)'
  3358. _RETURN_TYPE = 'playlist'
  3359. class GooglePodcastsIE(GooglePodcastsBaseIE):
  3360. _module = 'yt_dlp.extractor.googlepodcasts'
  3361. IE_NAME = 'google:podcasts'
  3362. _VALID_URL = 'https?://podcasts\\.google\\.com/feed/(?P<feed_url>[^/]+)/episode/(?P<id>[^/?&#]+)'
  3363. _RETURN_TYPE = 'video'
  3364. class GoogleSearchIE(LazyLoadSearchExtractor):
  3365. _module = 'yt_dlp.extractor.googlesearch'
  3366. IE_NAME = 'video.google:search'
  3367. _VALID_URL = 'gvsearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  3368. IE_DESC = 'Google Video search'
  3369. SEARCH_KEY = 'gvsearch'
  3370. _RETURN_TYPE = 'playlist'
  3371. class GoPlayIE(LazyLoadExtractor):
  3372. _module = 'yt_dlp.extractor.goplay'
  3373. IE_NAME = 'GoPlay'
  3374. _VALID_URL = 'https?://(www\\.)?goplay\\.be/video/([^/?#]+/[^/?#]+/|)(?P<id>[^/#]+)'
  3375. _NETRC_MACHINE = 'goplay'
  3376. _RETURN_TYPE = 'video'
  3377. class GoProIE(LazyLoadExtractor):
  3378. _module = 'yt_dlp.extractor.gopro'
  3379. IE_NAME = 'GoPro'
  3380. _VALID_URL = 'https?://(www\\.)?gopro\\.com/v/(?P<id>[A-Za-z0-9]+)'
  3381. _RETURN_TYPE = 'video'
  3382. class GoshgayIE(LazyLoadExtractor):
  3383. _module = 'yt_dlp.extractor.goshgay'
  3384. IE_NAME = 'Goshgay'
  3385. _VALID_URL = 'https?://(?:www\\.)?goshgay\\.com/video(?P<id>\\d+?)($|/)'
  3386. age_limit = 18
  3387. _RETURN_TYPE = 'video'
  3388. class GoToStageIE(LazyLoadExtractor):
  3389. _module = 'yt_dlp.extractor.gotostage'
  3390. IE_NAME = 'GoToStage'
  3391. _VALID_URL = 'https?://(?:www\\.)?gotostage\\.com/channel/[a-z0-9]+/recording/(?P<id>[a-z0-9]+)/watch'
  3392. _RETURN_TYPE = 'video'
  3393. class GPUTechConfIE(LazyLoadExtractor):
  3394. _module = 'yt_dlp.extractor.gputechconf'
  3395. IE_NAME = 'GPUTechConf'
  3396. _VALID_URL = 'https?://on-demand\\.gputechconf\\.com/gtc/2015/video/S(?P<id>\\d+)\\.html'
  3397. _RETURN_TYPE = 'video'
  3398. class GraspopIE(LazyLoadExtractor):
  3399. _module = 'yt_dlp.extractor.graspop'
  3400. IE_NAME = 'Graspop'
  3401. _VALID_URL = 'https?://vod\\.graspop\\.be/[a-z]{2}/(?P<id>\\d+)/'
  3402. _RETURN_TYPE = 'video'
  3403. class GronkhFeedIE(LazyLoadExtractor):
  3404. _module = 'yt_dlp.extractor.gronkh'
  3405. IE_NAME = 'gronkh:feed'
  3406. _VALID_URL = 'https?://(?:www\\.)?gronkh\\.tv(?:/feed)?/?(?:#|$)'
  3407. _RETURN_TYPE = 'playlist'
  3408. class GronkhIE(LazyLoadExtractor):
  3409. _module = 'yt_dlp.extractor.gronkh'
  3410. IE_NAME = 'Gronkh'
  3411. _VALID_URL = 'https?://(?:www\\.)?gronkh\\.tv/(?:watch/)?streams?/(?P<id>\\d+)'
  3412. _RETURN_TYPE = 'video'
  3413. class GronkhVodsIE(LazyLoadExtractor):
  3414. _module = 'yt_dlp.extractor.gronkh'
  3415. IE_NAME = 'gronkh:vods'
  3416. _VALID_URL = 'https?://(?:www\\.)?gronkh\\.tv/vods/streams/?(?:#|$)'
  3417. _RETURN_TYPE = 'playlist'
  3418. class GrouponIE(LazyLoadExtractor):
  3419. _module = 'yt_dlp.extractor.groupon'
  3420. IE_NAME = 'Groupon'
  3421. _VALID_URL = 'https?://(?:www\\.)?groupon\\.com/deals/(?P<id>[^/?#&]+)'
  3422. _RETURN_TYPE = 'playlist'
  3423. class HarpodeonIE(LazyLoadExtractor):
  3424. _module = 'yt_dlp.extractor.harpodeon'
  3425. IE_NAME = 'Harpodeon'
  3426. _VALID_URL = 'https?://(?:www\\.)?harpodeon\\.com/(?:video|preview)/\\w+/(?P<id>\\d+)'
  3427. _RETURN_TYPE = 'video'
  3428. class HBOIE(HBOBaseIE):
  3429. _module = 'yt_dlp.extractor.hbo'
  3430. IE_NAME = 'hbo'
  3431. _VALID_URL = 'https?://(?:www\\.)?hbo\\.com/(?:video|embed)(?:/[^/]+)*/(?P<id>[^/?#]+)'
  3432. _RETURN_TYPE = 'video'
  3433. class HearThisAtIE(LazyLoadExtractor):
  3434. _module = 'yt_dlp.extractor.hearthisat'
  3435. IE_NAME = 'HearThisAt'
  3436. _VALID_URL = 'https?://(?:www\\.)?hearthis\\.at/(?P<artist>[^/?#]+)/(?P<title>[\\w.-]+)'
  3437. _RETURN_TYPE = 'video'
  3438. class HeiseIE(LazyLoadExtractor):
  3439. _module = 'yt_dlp.extractor.heise'
  3440. IE_NAME = 'Heise'
  3441. _VALID_URL = 'https?://(?:www\\.)?heise\\.de/(?:[^/]+/)+[^/]+-(?P<id>[0-9]+)\\.html'
  3442. _RETURN_TYPE = 'video'
  3443. class HellPornoIE(LazyLoadExtractor):
  3444. _module = 'yt_dlp.extractor.hellporno'
  3445. IE_NAME = 'HellPorno'
  3446. _VALID_URL = 'https?://(?:www\\.)?hellporno\\.(?:com/videos|net/v)/(?P<id>[^/]+)'
  3447. age_limit = 18
  3448. _RETURN_TYPE = 'video'
  3449. class HGTVComShowIE(LazyLoadExtractor):
  3450. _module = 'yt_dlp.extractor.hgtv'
  3451. IE_NAME = 'hgtv.com:show'
  3452. _VALID_URL = 'https?://(?:www\\.)?hgtv\\.com/shows/[^/]+/(?P<id>[^/?#&]+)'
  3453. _RETURN_TYPE = 'playlist'
  3454. class HiDiveIE(LazyLoadExtractor):
  3455. _module = 'yt_dlp.extractor.hidive'
  3456. IE_NAME = 'HiDive'
  3457. _VALID_URL = 'https?://(?:www\\.)?hidive\\.com/stream/(?P<id>(?P<title>[^/]+)/(?P<key>[^/?#&]+))'
  3458. _NETRC_MACHINE = 'hidive'
  3459. _RETURN_TYPE = 'video'
  3460. class HistoricFilmsIE(LazyLoadExtractor):
  3461. _module = 'yt_dlp.extractor.historicfilms'
  3462. IE_NAME = 'HistoricFilms'
  3463. _VALID_URL = 'https?://(?:www\\.)?historicfilms\\.com/(?:tapes/|play)(?P<id>\\d+)'
  3464. _RETURN_TYPE = 'video'
  3465. class HitRecordIE(LazyLoadExtractor):
  3466. _module = 'yt_dlp.extractor.hitrecord'
  3467. IE_NAME = 'HitRecord'
  3468. _VALID_URL = 'https?://(?:www\\.)?hitrecord\\.org/records/(?P<id>\\d+)'
  3469. _RETURN_TYPE = 'video'
  3470. class HKETVIE(LazyLoadExtractor):
  3471. _module = 'yt_dlp.extractor.hketv'
  3472. IE_NAME = 'hketv'
  3473. _VALID_URL = 'https?://(?:www\\.)?hkedcity\\.net/etv/resource/(?P<id>[0-9]+)'
  3474. IE_DESC = '香港教育局教育電視 (HKETV) Educational Television, Hong Kong Educational Bureau'
  3475. _RETURN_TYPE = 'video'
  3476. class HollywoodReporterIE(LazyLoadExtractor):
  3477. _module = 'yt_dlp.extractor.hollywoodreporter'
  3478. IE_NAME = 'HollywoodReporter'
  3479. _VALID_URL = 'https?://(?:www\\.)?hollywoodreporter\\.com/video/(?P<id>[\\w-]+)'
  3480. _RETURN_TYPE = 'video'
  3481. class HollywoodReporterPlaylistIE(LazyLoadExtractor):
  3482. _module = 'yt_dlp.extractor.hollywoodreporter'
  3483. IE_NAME = 'HollywoodReporterPlaylist'
  3484. _VALID_URL = 'https?://(?:www\\.)?hollywoodreporter\\.com/vcategory/(?P<slug>[\\w-]+)-(?P<id>\\d+)'
  3485. _RETURN_TYPE = 'playlist'
  3486. class HolodexIE(LazyLoadExtractor):
  3487. _module = 'yt_dlp.extractor.holodex'
  3488. IE_NAME = 'Holodex'
  3489. _VALID_URL = '(?x)https?://(?:www\\.|staging\\.)?holodex\\.net/(?:\n api/v2/playlist/(?P<playlist>\\d+)|\n watch/(?P<id>[\\w-]{11})(?:\\?(?:[^#]+&)?playlist=(?P<playlist2>\\d+))?\n )'
  3490. _RETURN_TYPE = 'any'
  3491. class HotNewHipHopIE(LazyLoadExtractor):
  3492. _module = 'yt_dlp.extractor.hotnewhiphop'
  3493. IE_NAME = 'HotNewHipHop'
  3494. _VALID_URL = 'https?://(?:www\\.)?hotnewhiphop\\.com/.*\\.(?P<id>.*)\\.html'
  3495. _WORKING = False
  3496. _RETURN_TYPE = 'video'
  3497. class HotStarBaseIE(LazyLoadExtractor):
  3498. _module = 'yt_dlp.extractor.hotstar'
  3499. IE_NAME = 'HotStarBase'
  3500. class HotStarIE(HotStarBaseIE):
  3501. _module = 'yt_dlp.extractor.hotstar'
  3502. IE_NAME = 'hotstar'
  3503. _VALID_URL = '(?x)\n https?://(?:www\\.)?hotstar\\.com(?:/in)?/(?!in/)\n (?:\n (?P<type>movies|sports|clips|episode|(?P<tv>tv|shows))/\n (?(tv)(?:[^/?#]+/){2}|[^?#]*)\n )?\n [^/?#]+/\n (?P<id>\\d{10})\n '
  3504. _RETURN_TYPE = 'video'
  3505. class HotStarPlaylistIE(HotStarBaseIE):
  3506. _module = 'yt_dlp.extractor.hotstar'
  3507. IE_NAME = 'hotstar:playlist'
  3508. _VALID_URL = 'https?://(?:www\\.)?hotstar\\.com(?:/in)?/(?:tv|shows)(?:/[^/]+){2}/list/[^/]+/t-(?P<id>\\w+)'
  3509. _RETURN_TYPE = 'playlist'
  3510. class HotStarPrefixIE(LazyLoadExtractor):
  3511. _module = 'yt_dlp.extractor.hotstar'
  3512. IE_NAME = 'HotStarPrefix'
  3513. _VALID_URL = 'hotstar:(?:(?P<type>\\w+):)?(?P<id>\\d+)$'
  3514. IE_DESC = False
  3515. _RETURN_TYPE = 'video'
  3516. class HotStarSeasonIE(HotStarBaseIE):
  3517. _module = 'yt_dlp.extractor.hotstar'
  3518. IE_NAME = 'hotstar:season'
  3519. _VALID_URL = '(?P<url>https?://(?:www\\.)?hotstar\\.com(?:/in)?/(?:tv|shows)/[^/]+/\\w+)/seasons/[^/]+/ss-(?P<id>\\w+)'
  3520. _RETURN_TYPE = 'playlist'
  3521. class HotStarSeriesIE(HotStarBaseIE):
  3522. _module = 'yt_dlp.extractor.hotstar'
  3523. IE_NAME = 'hotstar:series'
  3524. _VALID_URL = '(?P<url>https?://(?:www\\.)?hotstar\\.com(?:/in)?/(?:tv|shows)/[^/]+/(?P<id>\\d+))/?(?:[#?]|$)'
  3525. _RETURN_TYPE = 'playlist'
  3526. class HrefLiRedirectIE(LazyLoadExtractor):
  3527. _module = 'yt_dlp.extractor.hrefli'
  3528. IE_NAME = 'href.li'
  3529. _VALID_URL = 'https?://href\\.li/\\?(?P<url>.+)'
  3530. IE_DESC = False
  3531. class HRFernsehenIE(LazyLoadExtractor):
  3532. _module = 'yt_dlp.extractor.hrfensehen'
  3533. IE_NAME = 'hrfernsehen'
  3534. _VALID_URL = 'https?://www\\.(?:hr-fernsehen|hessenschau)\\.de/.*,video-(?P<id>[0-9]{6})\\.html'
  3535. _RETURN_TYPE = 'video'
  3536. class HRTiBaseIE(LazyLoadExtractor):
  3537. _module = 'yt_dlp.extractor.hrti'
  3538. IE_NAME = 'HRTiBase'
  3539. _NETRC_MACHINE = 'hrti'
  3540. class HRTiIE(HRTiBaseIE):
  3541. _module = 'yt_dlp.extractor.hrti'
  3542. IE_NAME = 'HRTi'
  3543. _VALID_URL = '(?x)\n (?:\n hrti:(?P<short_id>[0-9]+)|\n https?://\n hrti\\.hrt\\.hr/(?:\\#/)?video/show/(?P<id>[0-9]+)/(?P<display_id>[^/]+)?\n )\n '
  3544. _NETRC_MACHINE = 'hrti'
  3545. age_limit = 12
  3546. _RETURN_TYPE = 'video'
  3547. class HRTiPlaylistIE(HRTiBaseIE):
  3548. _module = 'yt_dlp.extractor.hrti'
  3549. IE_NAME = 'HRTiPlaylist'
  3550. _VALID_URL = 'https?://hrti\\.hrt\\.hr/(?:#/)?video/list/category/(?P<id>[0-9]+)/(?P<display_id>[^/]+)?'
  3551. _NETRC_MACHINE = 'hrti'
  3552. _RETURN_TYPE = 'playlist'
  3553. class HSEShowBaseInfoExtractor(LazyLoadExtractor):
  3554. _module = 'yt_dlp.extractor.hse'
  3555. IE_NAME = 'HSEShowBaseInfoExtract'
  3556. class HSEProductIE(HSEShowBaseInfoExtractor):
  3557. _module = 'yt_dlp.extractor.hse'
  3558. IE_NAME = 'HSEProduct'
  3559. _VALID_URL = 'https?://(?:www\\.)?hse\\.de/dpl/p/product/(?P<id>[0-9]+)'
  3560. _RETURN_TYPE = 'video'
  3561. class HSEShowIE(HSEShowBaseInfoExtractor):
  3562. _module = 'yt_dlp.extractor.hse'
  3563. IE_NAME = 'HSEShow'
  3564. _VALID_URL = 'https?://(?:www\\.)?hse\\.de/dpl/c/tv-shows/(?P<id>[0-9]+)'
  3565. _RETURN_TYPE = 'video'
  3566. class HuajiaoIE(LazyLoadExtractor):
  3567. _module = 'yt_dlp.extractor.huajiao'
  3568. IE_NAME = 'Huajiao'
  3569. _VALID_URL = 'https?://(?:www\\.)?huajiao\\.com/l/(?P<id>[0-9]+)'
  3570. IE_DESC = '花椒直播'
  3571. _RETURN_TYPE = 'video'
  3572. class HuffPostIE(LazyLoadExtractor):
  3573. _module = 'yt_dlp.extractor.huffpost'
  3574. IE_NAME = 'HuffPost'
  3575. _VALID_URL = '(?x)\n https?://(embed\\.)?live\\.huffingtonpost\\.com/\n (?:\n r/segment/[^/]+/|\n HPLEmbedPlayer/\\?segmentId=\n )\n (?P<id>[0-9a-f]+)'
  3576. IE_DESC = 'Huffington Post'
  3577. _RETURN_TYPE = 'video'
  3578. class HungamaBaseIE(LazyLoadExtractor):
  3579. _module = 'yt_dlp.extractor.hungama'
  3580. IE_NAME = 'HungamaBase'
  3581. class HungamaAlbumPlaylistIE(HungamaBaseIE):
  3582. _module = 'yt_dlp.extractor.hungama'
  3583. IE_NAME = 'HungamaAlbumPlaylist'
  3584. _VALID_URL = 'https?://(?:www\\.|un\\.)?hungama\\.com/(?P<path>playlists|album)/[^/]+/(?P<id>\\d+)'
  3585. _RETURN_TYPE = 'playlist'
  3586. class HungamaIE(HungamaBaseIE):
  3587. _module = 'yt_dlp.extractor.hungama'
  3588. IE_NAME = 'Hungama'
  3589. _VALID_URL = '(?x)\n https?://\n (?:www\\.|un\\.)?hungama\\.com/\n (?:\n (?:video|movie|short-film)/[^/]+/|\n tv-show/(?:[^/]+/){2}\\d+/episode/[^/]+/\n )\n (?P<id>\\d+)\n '
  3590. _RETURN_TYPE = 'video'
  3591. class HungamaSongIE(LazyLoadExtractor):
  3592. _module = 'yt_dlp.extractor.hungama'
  3593. IE_NAME = 'HungamaSong'
  3594. _VALID_URL = 'https?://(?:www\\.|un\\.)?hungama\\.com/song/[^/]+/(?P<id>\\d+)'
  3595. _RETURN_TYPE = 'video'
  3596. class HuyaLiveIE(LazyLoadExtractor):
  3597. _module = 'yt_dlp.extractor.huya'
  3598. IE_NAME = 'huya:live'
  3599. _VALID_URL = 'https?://(?:www\\.|m\\.)?huya\\.com/(?!(?:video/play/))(?P<id>[^/#?&]+)(?:\\D|$)'
  3600. IE_DESC = 'huya.com'
  3601. class HuyaVideoIE(LazyLoadExtractor):
  3602. _module = 'yt_dlp.extractor.huya'
  3603. IE_NAME = 'huya:video'
  3604. _VALID_URL = 'https?://(?:www\\.)?huya\\.com/video/play/(?P<id>\\d+)\\.html'
  3605. IE_DESC = '虎牙视频'
  3606. _RETURN_TYPE = 'video'
  3607. class HypemIE(LazyLoadExtractor):
  3608. _module = 'yt_dlp.extractor.hypem'
  3609. IE_NAME = 'Hypem'
  3610. _VALID_URL = 'https?://(?:www\\.)?hypem\\.com/track/(?P<id>[0-9a-z]{5})'
  3611. _RETURN_TYPE = 'video'
  3612. class MonsterSirenHypergryphMusicIE(LazyLoadExtractor):
  3613. _module = 'yt_dlp.extractor.hypergryph'
  3614. IE_NAME = 'MonsterSirenHypergryphMusic'
  3615. _VALID_URL = 'https?://monster-siren\\.hypergryph\\.com/music/(?P<id>\\d+)'
  3616. _RETURN_TYPE = 'video'
  3617. class HytaleIE(LazyLoadExtractor):
  3618. _module = 'yt_dlp.extractor.hytale'
  3619. IE_NAME = 'Hytale'
  3620. _VALID_URL = 'https?://(?:www\\.)?hytale\\.com/news/\\d+/\\d+/(?P<id>[a-z0-9-]+)'
  3621. _RETURN_TYPE = 'playlist'
  3622. class IcareusIE(LazyLoadExtractor):
  3623. _module = 'yt_dlp.extractor.icareus'
  3624. IE_NAME = 'Icareus'
  3625. _VALID_URL = '(?P<base_url>https?://(?:www\\.)?(?:asahitv\\.fi|helsinkikanava\\.fi|hyvinvointitv\\.fi|inez\\.fi|permanto\\.fi|suite\\.icareus\\.com|videos\\.minifiddlers\\.org))/[^?#]+/player/[^?#]+\\?(?:[^#]+&)?(?:assetId|eventId)=(?P<id>\\d+)'
  3626. _RETURN_TYPE = 'video'
  3627. class IchinanaLiveClipIE(LazyLoadExtractor):
  3628. _module = 'yt_dlp.extractor.ichinanalive'
  3629. IE_NAME = '17live:clip'
  3630. _VALID_URL = 'https?://(?:www\\.)?17\\.live/(?:[^/]+/)*profile/r/(?P<uploader_id>\\d+)/clip/(?P<id>[^/]+)'
  3631. _RETURN_TYPE = 'video'
  3632. class IchinanaLiveIE(LazyLoadExtractor):
  3633. _module = 'yt_dlp.extractor.ichinanalive'
  3634. IE_NAME = '17live'
  3635. _VALID_URL = 'https?://(?:www\\.)?17\\.live/(?:[^/]+/)*(?:live|profile/r)/(?P<id>\\d+)'
  3636. _RETURN_TYPE = 'video'
  3637. @classmethod
  3638. def suitable(cls, url):
  3639. return not IchinanaLiveClipIE.suitable(url) and super().suitable(url)
  3640. class IdolPlusIE(LazyLoadExtractor):
  3641. _module = 'yt_dlp.extractor.idolplus'
  3642. IE_NAME = 'IdolPlus'
  3643. _VALID_URL = 'https?://(?:www\\.)?idolplus\\.com/z[us]/(?:concert/|contents/?\\?(?:[^#]+&)?albumId=)(?P<id>\\w+)'
  3644. _RETURN_TYPE = 'video'
  3645. class IGNBaseIE(LazyLoadExtractor):
  3646. _module = 'yt_dlp.extractor.ign'
  3647. IE_NAME = 'IGNBase'
  3648. class IGNIE(IGNBaseIE):
  3649. _module = 'yt_dlp.extractor.ign'
  3650. IE_NAME = 'ign.com'
  3651. _VALID_URL = 'https?://(?:.+?\\.ign|www\\.pcmag)\\.com/videos(?:/(?:\\d{4}/\\d{2}/\\d{2}/)?(?P<id>.+?)(?:[/?&#]|$)|(?:/?\\?(?P<filt>[^&#]+))?)'
  3652. _RETURN_TYPE = 'video'
  3653. class IGNArticleIE(IGNBaseIE):
  3654. _module = 'yt_dlp.extractor.ign'
  3655. IE_NAME = 'IGNArticle'
  3656. _VALID_URL = 'https?://.+?\\.ign\\.com/(?:articles(?:/\\d{4}/\\d{2}/\\d{2})?|(?:[a-z]{2}/)?(?:[\\w-]+/)*?feature/\\d+)/(?P<id>[^/?&#]+)'
  3657. _RETURN_TYPE = 'playlist'
  3658. class IGNVideoIE(IGNBaseIE):
  3659. _module = 'yt_dlp.extractor.ign'
  3660. IE_NAME = 'IGNVideo'
  3661. _VALID_URL = 'https?://.+?\\.ign\\.com/(?:[a-z]{2}/)?[^/]+/(?P<id>\\d+)/(?:video|trailer)/'
  3662. _RETURN_TYPE = 'video'
  3663. class IHeartRadioBaseIE(LazyLoadExtractor):
  3664. _module = 'yt_dlp.extractor.iheart'
  3665. IE_NAME = 'IHeartRadioBase'
  3666. class IHeartRadioIE(IHeartRadioBaseIE):
  3667. _module = 'yt_dlp.extractor.iheart'
  3668. IE_NAME = 'iheartradio'
  3669. _VALID_URL = '(?:https?://(?:www\\.)?iheart\\.com/podcast/[^/]+/episode/(?P<display_id>[^/?&#]+)-|iheartradio:)(?P<id>\\d+)'
  3670. _RETURN_TYPE = 'video'
  3671. class IHeartRadioPodcastIE(IHeartRadioBaseIE):
  3672. _module = 'yt_dlp.extractor.iheart'
  3673. IE_NAME = 'iheartradio:podcast'
  3674. _VALID_URL = 'https?://(?:www\\.)?iheart(?:podcastnetwork)?\\.com/podcast/[^/?&#]+-(?P<id>\\d+)/?(?:[?#&]|$)'
  3675. _RETURN_TYPE = 'playlist'
  3676. class IlPostIE(LazyLoadExtractor):
  3677. _module = 'yt_dlp.extractor.ilpost'
  3678. IE_NAME = 'IlPost'
  3679. _VALID_URL = 'https?://(?:www\\.)?ilpost\\.it/episodes/(?P<id>[^/?#]+)'
  3680. _RETURN_TYPE = 'video'
  3681. class IltalehtiIE(LazyLoadExtractor):
  3682. _module = 'yt_dlp.extractor.iltalehti'
  3683. IE_NAME = 'Iltalehti'
  3684. _VALID_URL = 'https?://(?:www\\.)?iltalehti\\.fi/[^/?#]+/a/(?P<id>[^/?#])'
  3685. _RETURN_TYPE = 'video'
  3686. class ImdbIE(LazyLoadExtractor):
  3687. _module = 'yt_dlp.extractor.imdb'
  3688. IE_NAME = 'imdb'
  3689. _VALID_URL = 'https?://(?:www|m)\\.imdb\\.com/(?:video|title|list).*?[/-]vi(?P<id>\\d+)'
  3690. IE_DESC = 'Internet Movie Database trailers'
  3691. _RETURN_TYPE = 'video'
  3692. class ImdbListIE(LazyLoadExtractor):
  3693. _module = 'yt_dlp.extractor.imdb'
  3694. IE_NAME = 'imdb:list'
  3695. _VALID_URL = 'https?://(?:www\\.)?imdb\\.com/list/ls(?P<id>\\d{9})(?!/videoplayer/vi\\d+)'
  3696. IE_DESC = 'Internet Movie Database lists'
  3697. _RETURN_TYPE = 'playlist'
  3698. class ImgurBaseIE(LazyLoadExtractor):
  3699. _module = 'yt_dlp.extractor.imgur'
  3700. IE_NAME = 'ImgurBase'
  3701. class ImgurGalleryBaseIE(ImgurBaseIE):
  3702. _module = 'yt_dlp.extractor.imgur'
  3703. IE_NAME = 'ImgurGalleryBase'
  3704. class ImgurAlbumIE(ImgurGalleryBaseIE):
  3705. _module = 'yt_dlp.extractor.imgur'
  3706. IE_NAME = 'imgur:album'
  3707. _VALID_URL = 'https?://(?:i\\.)?imgur\\.com/a/(?:[^/?#]+-)?(?P<id>[a-zA-Z0-9]+)'
  3708. _RETURN_TYPE = 'playlist'
  3709. class ImgurGalleryIE(ImgurGalleryBaseIE):
  3710. _module = 'yt_dlp.extractor.imgur'
  3711. IE_NAME = 'imgur:gallery'
  3712. _VALID_URL = 'https?://(?:i\\.)?imgur\\.com/(?:gallery|(?:t(?:opic)?|r)/[^/?#]+)/(?:[^/?#]+-)?(?P<id>[a-zA-Z0-9]+)'
  3713. _RETURN_TYPE = 'any'
  3714. class ImgurIE(ImgurBaseIE):
  3715. _module = 'yt_dlp.extractor.imgur'
  3716. IE_NAME = 'Imgur'
  3717. _VALID_URL = 'https?://(?:i\\.)?imgur\\.com/(?!(?:a|gallery|t|topic|r)/)(?:[^/?#]+-)?(?P<id>[a-zA-Z0-9]+)'
  3718. _RETURN_TYPE = 'video'
  3719. class InaIE(LazyLoadExtractor):
  3720. _module = 'yt_dlp.extractor.ina'
  3721. IE_NAME = 'Ina'
  3722. _VALID_URL = 'https?://(?:(?:www|m)\\.)?ina\\.fr/(?:[^?#]+/)(?P<id>[\\w-]+)'
  3723. _RETURN_TYPE = 'video'
  3724. class IncIE(LazyLoadExtractor):
  3725. _module = 'yt_dlp.extractor.inc'
  3726. IE_NAME = 'Inc'
  3727. _VALID_URL = 'https?://(?:www\\.)?inc\\.com/(?:[^/]+/)+(?P<id>[^.]+).html'
  3728. _RETURN_TYPE = 'video'
  3729. class IndavideoEmbedIE(LazyLoadExtractor):
  3730. _module = 'yt_dlp.extractor.indavideo'
  3731. IE_NAME = 'IndavideoEmbed'
  3732. _VALID_URL = 'https?://(?:(?:embed\\.)?indavideo\\.hu/player/video/|assets\\.indavideo\\.hu/swf/player\\.swf\\?.*\\b(?:v(?:ID|id))=)(?P<id>[\\da-f]+)'
  3733. _RETURN_TYPE = 'video'
  3734. class InfoQIE(BokeCCBaseIE):
  3735. _module = 'yt_dlp.extractor.infoq'
  3736. IE_NAME = 'InfoQ'
  3737. _VALID_URL = 'https?://(?:www\\.)?infoq\\.com/(?:[^/]+/)+(?P<id>[^/]+)'
  3738. _RETURN_TYPE = 'video'
  3739. class InstagramBaseIE(LazyLoadExtractor):
  3740. _module = 'yt_dlp.extractor.instagram'
  3741. IE_NAME = 'InstagramBase'
  3742. _NETRC_MACHINE = 'instagram'
  3743. class InstagramIE(InstagramBaseIE):
  3744. _module = 'yt_dlp.extractor.instagram'
  3745. IE_NAME = 'Instagram'
  3746. _VALID_URL = '(?P<url>https?://(?:www\\.)?instagram\\.com(?:/(?!share/)[^/?#]+)?/(?:p|tv|reels?(?!/audio/))/(?P<id>[^/?#&]+))'
  3747. _NETRC_MACHINE = 'instagram'
  3748. _RETURN_TYPE = 'any'
  3749. class InstagramIOSIE(LazyLoadExtractor):
  3750. _module = 'yt_dlp.extractor.instagram'
  3751. IE_NAME = 'InstagramIOS'
  3752. _VALID_URL = 'instagram://media\\?id=(?P<id>[\\d_]+)'
  3753. IE_DESC = 'IOS instagram:// URL'
  3754. _RETURN_TYPE = 'video'
  3755. class InstagramStoryIE(InstagramBaseIE):
  3756. _module = 'yt_dlp.extractor.instagram'
  3757. IE_NAME = 'instagram:story'
  3758. _VALID_URL = 'https?://(?:www\\.)?instagram\\.com/stories/(?P<user>[^/]+)/(?P<id>\\d+)'
  3759. _NETRC_MACHINE = 'instagram'
  3760. _RETURN_TYPE = 'playlist'
  3761. class InstagramPlaylistBaseIE(InstagramBaseIE):
  3762. _module = 'yt_dlp.extractor.instagram'
  3763. IE_NAME = 'InstagramPlaylistBase'
  3764. _NETRC_MACHINE = 'instagram'
  3765. class InstagramTagIE(InstagramPlaylistBaseIE):
  3766. _module = 'yt_dlp.extractor.instagram'
  3767. IE_NAME = 'instagram:tag'
  3768. _VALID_URL = 'https?://(?:www\\.)?instagram\\.com/explore/tags/(?P<id>[^/]+)'
  3769. IE_DESC = 'Instagram hashtag search URLs'
  3770. _NETRC_MACHINE = 'instagram'
  3771. _RETURN_TYPE = 'playlist'
  3772. class InstagramUserIE(InstagramPlaylistBaseIE):
  3773. _module = 'yt_dlp.extractor.instagram'
  3774. IE_NAME = 'instagram:user'
  3775. _VALID_URL = 'https?://(?:www\\.)?instagram\\.com/(?P<id>[^/]{2,})/?(?:$|[?#])'
  3776. _WORKING = False
  3777. IE_DESC = 'Instagram user profile'
  3778. _NETRC_MACHINE = 'instagram'
  3779. _RETURN_TYPE = 'playlist'
  3780. class InternazionaleIE(LazyLoadExtractor):
  3781. _module = 'yt_dlp.extractor.internazionale'
  3782. IE_NAME = 'Internazionale'
  3783. _VALID_URL = 'https?://(?:www\\.)?internazionale\\.it/video/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  3784. _RETURN_TYPE = 'video'
  3785. class InternetVideoArchiveIE(LazyLoadExtractor):
  3786. _module = 'yt_dlp.extractor.internetvideoarchive'
  3787. IE_NAME = 'InternetVideoArchive'
  3788. _VALID_URL = 'https?://video\\.internetvideoarchive\\.net/(?:player|flash/players)/.*?\\?.*?publishedid.*?'
  3789. _RETURN_TYPE = 'video'
  3790. class IPrimaCNNIE(LazyLoadExtractor):
  3791. _module = 'yt_dlp.extractor.iprima'
  3792. IE_NAME = 'IPrimaCNN'
  3793. _VALID_URL = 'https?://cnn\\.iprima\\.cz/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  3794. _RETURN_TYPE = 'video'
  3795. class IPrimaIE(LazyLoadExtractor):
  3796. _module = 'yt_dlp.extractor.iprima'
  3797. IE_NAME = 'IPrima'
  3798. _VALID_URL = 'https?://(?!cnn)(?:[^/]+)\\.iprima\\.cz/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  3799. _NETRC_MACHINE = 'iprima'
  3800. _RETURN_TYPE = 'video'
  3801. class IqAlbumIE(LazyLoadExtractor):
  3802. _module = 'yt_dlp.extractor.iqiyi'
  3803. IE_NAME = 'iq.com:album'
  3804. _VALID_URL = 'https?://(?:www\\.)?iq\\.com/album/(?:[\\w%-]*-)?(?P<id>\\w+)'
  3805. age_limit = 13
  3806. _RETURN_TYPE = 'any'
  3807. class IqIE(LazyLoadExtractor):
  3808. _module = 'yt_dlp.extractor.iqiyi'
  3809. IE_NAME = 'iq.com'
  3810. _VALID_URL = 'https?://(?:www\\.)?iq\\.com/play/(?:[\\w%-]*-)?(?P<id>\\w+)'
  3811. IE_DESC = 'International version of iQiyi'
  3812. age_limit = 13
  3813. _RETURN_TYPE = 'video'
  3814. class IqiyiIE(LazyLoadExtractor):
  3815. _module = 'yt_dlp.extractor.iqiyi'
  3816. IE_NAME = 'iqiyi'
  3817. _VALID_URL = 'https?://(?:(?:[^.]+\\.)?iqiyi\\.com|www\\.pps\\.tv)/.+\\.html'
  3818. IE_DESC = '爱奇艺'
  3819. _NETRC_MACHINE = 'iqiyi'
  3820. _RETURN_TYPE = 'any'
  3821. class IslamChannelIE(LazyLoadExtractor):
  3822. _module = 'yt_dlp.extractor.islamchannel'
  3823. IE_NAME = 'IslamChannel'
  3824. _VALID_URL = 'https?://watch\\.islamchannel\\.tv/watch/(?P<id>\\d+)'
  3825. _RETURN_TYPE = 'video'
  3826. class IslamChannelSeriesIE(LazyLoadExtractor):
  3827. _module = 'yt_dlp.extractor.islamchannel'
  3828. IE_NAME = 'IslamChannelSeries'
  3829. _VALID_URL = 'https?://watch\\.islamchannel\\.tv/series/(?P<id>[a-f\\d-]+)'
  3830. _RETURN_TYPE = 'playlist'
  3831. class IsraelNationalNewsIE(LazyLoadExtractor):
  3832. _module = 'yt_dlp.extractor.israelnationalnews'
  3833. IE_NAME = 'IsraelNationalNews'
  3834. _VALID_URL = 'https?://(?:www\\.)?israelnationalnews\\.com/news/(?P<id>\\d+)'
  3835. _RETURN_TYPE = 'playlist'
  3836. class ITProTVBaseIE(LazyLoadExtractor):
  3837. _module = 'yt_dlp.extractor.itprotv'
  3838. IE_NAME = 'ITProTVBase'
  3839. class ITProTVCourseIE(ITProTVBaseIE):
  3840. _module = 'yt_dlp.extractor.itprotv'
  3841. IE_NAME = 'ITProTVCourse'
  3842. _VALID_URL = 'https?://app\\.itpro\\.tv/course/(?P<id>[\\w-]+)/?(?:$|[#?])'
  3843. _RETURN_TYPE = 'playlist'
  3844. class ITProTVIE(ITProTVBaseIE):
  3845. _module = 'yt_dlp.extractor.itprotv'
  3846. IE_NAME = 'ITProTV'
  3847. _VALID_URL = 'https?://app\\.itpro\\.tv/course/(?P<course>[\\w-]+)/(?P<id>[\\w-]+)'
  3848. _RETURN_TYPE = 'video'
  3849. class ITVBTCCIE(LazyLoadExtractor):
  3850. _module = 'yt_dlp.extractor.itv'
  3851. IE_NAME = 'ITVBTCC'
  3852. _VALID_URL = 'https?://(?:www\\.)?itv\\.com/(?:news|btcc)/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  3853. _RETURN_TYPE = 'playlist'
  3854. class ITVIE(LazyLoadExtractor):
  3855. _module = 'yt_dlp.extractor.itv'
  3856. IE_NAME = 'ITV'
  3857. _VALID_URL = 'https?://(?:www\\.)?itv\\.com/hub/[^/]+/(?P<id>[0-9a-zA-Z]+)'
  3858. _RETURN_TYPE = 'video'
  3859. class IviCompilationIE(LazyLoadExtractor):
  3860. _module = 'yt_dlp.extractor.ivi'
  3861. IE_NAME = 'ivi:compilation'
  3862. _VALID_URL = 'https?://(?:www\\.)?ivi\\.ru/watch/(?!\\d+)(?P<compilationid>[a-z\\d_-]+)(?:/season(?P<seasonid>\\d+))?$'
  3863. IE_DESC = 'ivi.ru compilations'
  3864. _RETURN_TYPE = 'playlist'
  3865. class IviIE(LazyLoadExtractor):
  3866. _module = 'yt_dlp.extractor.ivi'
  3867. IE_NAME = 'ivi'
  3868. _VALID_URL = 'https?://(?:www\\.)?ivi\\.(?:ru|tv)/(?:watch/(?:[^/]+/)?|video/player\\?.*?videoId=)(?P<id>\\d+)'
  3869. IE_DESC = 'ivi.ru'
  3870. _RETURN_TYPE = 'video'
  3871. class IvideonIE(LazyLoadExtractor):
  3872. _module = 'yt_dlp.extractor.ivideon'
  3873. IE_NAME = 'ivideon'
  3874. _VALID_URL = 'https?://(?:www\\.)?ivideon\\.com/tv/(?:[^/]+/)*camera/(?P<id>\\d+-[\\da-f]+)/(?P<camera_id>\\d+)'
  3875. IE_DESC = 'Ivideon TV'
  3876. _RETURN_TYPE = 'video'
  3877. class IwaraBaseIE(LazyLoadExtractor):
  3878. _module = 'yt_dlp.extractor.iwara'
  3879. IE_NAME = 'IwaraBase'
  3880. _NETRC_MACHINE = 'iwara'
  3881. class IwaraIE(IwaraBaseIE):
  3882. _module = 'yt_dlp.extractor.iwara'
  3883. IE_NAME = 'iwara'
  3884. _VALID_URL = 'https?://(?:www\\.|ecchi\\.)?iwara\\.tv/videos?/(?P<id>[a-zA-Z0-9]+)'
  3885. _NETRC_MACHINE = 'iwara'
  3886. age_limit = 18
  3887. _RETURN_TYPE = 'video'
  3888. class IwaraPlaylistIE(IwaraBaseIE):
  3889. _module = 'yt_dlp.extractor.iwara'
  3890. IE_NAME = 'iwara:playlist'
  3891. _VALID_URL = 'https?://(?:www\\.)?iwara\\.tv/playlist/(?P<id>[0-9a-f-]+)'
  3892. _NETRC_MACHINE = 'iwara'
  3893. _RETURN_TYPE = 'playlist'
  3894. class IwaraUserIE(IwaraBaseIE):
  3895. _module = 'yt_dlp.extractor.iwara'
  3896. IE_NAME = 'iwara:user'
  3897. _VALID_URL = 'https?://(?:www\\.)?iwara\\.tv/profile/(?P<id>[^/?#&]+)'
  3898. _NETRC_MACHINE = 'iwara'
  3899. _RETURN_TYPE = 'playlist'
  3900. class IxiguaIE(LazyLoadExtractor):
  3901. _module = 'yt_dlp.extractor.ixigua'
  3902. IE_NAME = 'Ixigua'
  3903. _VALID_URL = 'https?://(?:\\w+\\.)?ixigua\\.com/(?:video/)?(?P<id>\\d+).+'
  3904. _RETURN_TYPE = 'video'
  3905. class IzleseneIE(LazyLoadExtractor):
  3906. _module = 'yt_dlp.extractor.izlesene'
  3907. IE_NAME = 'Izlesene'
  3908. _VALID_URL = '(?x)\n https?://(?:(?:www|m)\\.)?izlesene\\.com/\n (?:video|embedplayer)/(?:[^/]+/)?(?P<id>[0-9]+)\n '
  3909. _RETURN_TYPE = 'video'
  3910. class JamendoIE(LazyLoadExtractor):
  3911. _module = 'yt_dlp.extractor.jamendo'
  3912. IE_NAME = 'Jamendo'
  3913. _VALID_URL = '(?x)\n https?://\n (?:\n licensing\\.jamendo\\.com/[^/]+|\n (?:www\\.)?jamendo\\.com\n )\n /track/(?P<id>[0-9]+)(?:/(?P<display_id>[^/?#&]+))?\n '
  3914. _RETURN_TYPE = 'video'
  3915. class JamendoAlbumIE(JamendoIE):
  3916. _module = 'yt_dlp.extractor.jamendo'
  3917. IE_NAME = 'JamendoAlbum'
  3918. _VALID_URL = 'https?://(?:www\\.)?jamendo\\.com/album/(?P<id>[0-9]+)'
  3919. _RETURN_TYPE = 'playlist'
  3920. class SangiinIE(LazyLoadExtractor):
  3921. _module = 'yt_dlp.extractor.japandiet'
  3922. IE_NAME = 'Sangiin'
  3923. _VALID_URL = 'https?://www\\.webtv\\.sangiin\\.go\\.jp/webtv/detail\\.php\\?sid=(?P<id>\\d+)'
  3924. IE_DESC = '参議院インターネット審議中継 (archive)'
  3925. _RETURN_TYPE = 'video'
  3926. class SangiinInstructionIE(LazyLoadExtractor):
  3927. _module = 'yt_dlp.extractor.japandiet'
  3928. IE_NAME = 'SangiinInstruction'
  3929. _VALID_URL = 'https?://www\\.webtv\\.sangiin\\.go\\.jp/webtv/index\\.php'
  3930. IE_DESC = False
  3931. class ShugiinItvBaseIE(LazyLoadExtractor):
  3932. _module = 'yt_dlp.extractor.japandiet'
  3933. IE_NAME = 'ShugiinItvBase'
  3934. class ShugiinItvLiveIE(ShugiinItvBaseIE):
  3935. _module = 'yt_dlp.extractor.japandiet'
  3936. IE_NAME = 'ShugiinItvLive'
  3937. _VALID_URL = 'https?://(?:www\\.)?shugiintv\\.go\\.jp/(?:jp|en)(?:/index\\.php)?$'
  3938. IE_DESC = '衆議院インターネット審議中継'
  3939. _RETURN_TYPE = 'playlist'
  3940. @classmethod
  3941. def suitable(cls, url):
  3942. return super().suitable(url) and not any(x.suitable(url) for x in (ShugiinItvLiveRoomIE, ShugiinItvVodIE))
  3943. class ShugiinItvLiveRoomIE(ShugiinItvBaseIE):
  3944. _module = 'yt_dlp.extractor.japandiet'
  3945. IE_NAME = 'ShugiinItvLiveRoom'
  3946. _VALID_URL = 'https?://(?:www\\.)?shugiintv\\.go\\.jp/(?:jp|en)/index\\.php\\?room_id=(?P<id>room\\d+)'
  3947. IE_DESC = '衆議院インターネット審議中継 (中継)'
  3948. _RETURN_TYPE = 'video'
  3949. class ShugiinItvVodIE(ShugiinItvBaseIE):
  3950. _module = 'yt_dlp.extractor.japandiet'
  3951. IE_NAME = 'ShugiinItvVod'
  3952. _VALID_URL = 'https?://(?:www\\.)?shugiintv\\.go\\.jp/(?:jp|en)/index\\.php\\?ex=VL(?:\\&[^=]+=[^&]*)*\\&deli_id=(?P<id>\\d+)'
  3953. IE_DESC = '衆議院インターネット審議中継 (ビデオライブラリ)'
  3954. _RETURN_TYPE = 'video'
  3955. class JeuxVideoIE(LazyLoadExtractor):
  3956. _module = 'yt_dlp.extractor.jeuxvideo'
  3957. IE_NAME = 'JeuxVideo'
  3958. _ENABLED = None
  3959. _VALID_URL = 'https?://.*?\\.jeuxvideo\\.com/.*/(.*?)\\.htm'
  3960. _WORKING = False
  3961. _RETURN_TYPE = 'video'
  3962. class JioCinemaBaseIE(LazyLoadExtractor):
  3963. _module = 'yt_dlp.extractor.jiocinema'
  3964. IE_NAME = 'JioCinemaBase'
  3965. _NETRC_MACHINE = 'jiocinema'
  3966. class JioCinemaIE(JioCinemaBaseIE):
  3967. _module = 'yt_dlp.extractor.jiocinema'
  3968. IE_NAME = 'jiocinema'
  3969. _VALID_URL = 'https?://(?:www\\.)?jiocinema\\.com/?(?:movies?/[^/?#]+/|tv-shows/(?:[^/?#]+/){3})(?P<id>\\d{3,})'
  3970. _NETRC_MACHINE = 'jiocinema'
  3971. age_limit = 13
  3972. _RETURN_TYPE = 'video'
  3973. class JioCinemaSeriesIE(JioCinemaBaseIE):
  3974. _module = 'yt_dlp.extractor.jiocinema'
  3975. IE_NAME = 'jiocinema:series'
  3976. _VALID_URL = 'https?://(?:www\\.)?jiocinema\\.com/tv-shows/(?P<slug>[\\w-]+)/(?P<id>\\d{3,})'
  3977. _NETRC_MACHINE = 'jiocinema'
  3978. _RETURN_TYPE = 'playlist'
  3979. class JioSaavnBaseIE(LazyLoadExtractor):
  3980. _module = 'yt_dlp.extractor.jiosaavn'
  3981. IE_NAME = 'JioSaavnBase'
  3982. class JioSaavnAlbumIE(JioSaavnBaseIE):
  3983. _module = 'yt_dlp.extractor.jiosaavn'
  3984. IE_NAME = 'jiosaavn:album'
  3985. _VALID_URL = 'https?://(?:www\\.)?(?:jio)?saavn\\.com/album/[^/?#]+/(?P<id>[^/?#]+)'
  3986. _RETURN_TYPE = 'playlist'
  3987. class JioSaavnPlaylistIE(JioSaavnBaseIE):
  3988. _module = 'yt_dlp.extractor.jiosaavn'
  3989. IE_NAME = 'jiosaavn:playlist'
  3990. _VALID_URL = 'https?://(?:www\\.)?(?:jio)?saavn\\.com/(?:s/playlist/(?:[^/?#]+/){2}|featured/[^/?#]+/)(?P<id>[^/?#]+)'
  3991. _RETURN_TYPE = 'playlist'
  3992. class JioSaavnSongIE(JioSaavnBaseIE):
  3993. _module = 'yt_dlp.extractor.jiosaavn'
  3994. IE_NAME = 'jiosaavn:song'
  3995. _VALID_URL = 'https?://(?:www\\.)?(?:jiosaavn\\.com/song/[^/?#]+/|saavn\\.com/s/song/(?:[^/?#]+/){3})(?P<id>[^/?#]+)'
  3996. _RETURN_TYPE = 'video'
  3997. class JojIE(LazyLoadExtractor):
  3998. _module = 'yt_dlp.extractor.joj'
  3999. IE_NAME = 'Joj'
  4000. _VALID_URL = '(?x)\n (?:\n joj:|\n https?://media\\.joj\\.sk/embed/\n )\n (?P<id>[^/?#^]+)\n '
  4001. _RETURN_TYPE = 'video'
  4002. class JoqrAgIE(LazyLoadExtractor):
  4003. _module = 'yt_dlp.extractor.joqrag'
  4004. IE_NAME = 'JoqrAg'
  4005. _VALID_URL = ['https?://www\\.uniqueradio\\.jp/agplayer5/(?:player|inc-player-hls)\\.php', 'https?://(?:www\\.)?joqr\\.co\\.jp/ag/', 'https?://(?:www\\.)?joqr\\.co\\.jp/qr/ag(?:daily|regular)program/?(?:$|[#?])']
  4006. IE_DESC = '超!A&G+ 文化放送 (f.k.a. AGQR) Nippon Cultural Broadcasting, Inc. (JOQR)'
  4007. _RETURN_TYPE = 'video'
  4008. class JoveIE(LazyLoadExtractor):
  4009. _module = 'yt_dlp.extractor.jove'
  4010. IE_NAME = 'Jove'
  4011. _VALID_URL = 'https?://(?:www\\.)?jove\\.com/video/(?P<id>[0-9]+)'
  4012. _RETURN_TYPE = 'video'
  4013. class JStreamIE(LazyLoadExtractor):
  4014. _module = 'yt_dlp.extractor.jstream'
  4015. IE_NAME = 'JStream'
  4016. _VALID_URL = 'jstream:(?P<host>www\\d+):(?P<id>(?P<publisher>[a-z0-9]+):(?P<mid>\\d+))'
  4017. _RETURN_TYPE = 'video'
  4018. class JTBCIE(LazyLoadExtractor):
  4019. _module = 'yt_dlp.extractor.jtbc'
  4020. IE_NAME = 'JTBC'
  4021. _VALID_URL = '(?x)\n https?://(?:\n vod\\.jtbc\\.co\\.kr/player/(?:program|clip)\n |tv\\.jtbc\\.co\\.kr/(?:replay|trailer|clip)/pr\\d+/pm\\d+\n )/(?P<id>(?:ep|vo)\\d+)'
  4022. IE_DESC = 'jtbc.co.kr'
  4023. age_limit = 15
  4024. _RETURN_TYPE = 'video'
  4025. class JTBCProgramIE(LazyLoadExtractor):
  4026. _module = 'yt_dlp.extractor.jtbc'
  4027. IE_NAME = 'JTBC:program'
  4028. _VALID_URL = 'https?://(?:vod\\.jtbc\\.co\\.kr/program|tv\\.jtbc\\.co\\.kr/replay)/(?P<id>pr\\d+)/(?:replay|pm\\d+)/?(?:$|[?#])'
  4029. _RETURN_TYPE = 'playlist'
  4030. class JWPlatformIE(LazyLoadExtractor):
  4031. _module = 'yt_dlp.extractor.jwplatform'
  4032. IE_NAME = 'JWPlatform'
  4033. _VALID_URL = '(?:https?://(?:content\\.jwplatform|cdn\\.jwplayer)\\.com/(?:(?:feed|player|thumb|preview|manifest)s|jw6|v2/media)/|jwplatform:)(?P<id>[a-zA-Z0-9]{8})'
  4034. _RETURN_TYPE = 'video'
  4035. class KakaoIE(LazyLoadExtractor):
  4036. _module = 'yt_dlp.extractor.kakao'
  4037. IE_NAME = 'Kakao'
  4038. _VALID_URL = 'https?://(?:play-)?tv\\.kakao\\.com/(?:channel/\\d+|embed/player)/cliplink/(?P<id>\\d+|[^?#&]+@my)'
  4039. _RETURN_TYPE = 'video'
  4040. class KalturaIE(LazyLoadExtractor):
  4041. _module = 'yt_dlp.extractor.kaltura'
  4042. IE_NAME = 'Kaltura'
  4043. _VALID_URL = '(?x)\n (?:\n kaltura:(?P<partner_id>\\w+):(?P<id>\\w+)(?::(?P<player_type>\\w+))?|\n https?://\n (?:(?:www|cdnapi(?:sec)?)\\.)?kaltura\\.com(?::\\d+)?/\n (?:\n (?:\n # flash player\n index\\.php/(?:kwidget|extwidget/preview)|\n # html5 player\n html5/html5lib/[^/]+/mwEmbedFrame\\.php\n )\n )(?:/(?P<path>[^?]+))?(?:\\?(?P<query>.*))?\n )\n '
  4044. _RETURN_TYPE = 'any'
  4045. class KankaNewsIE(LazyLoadExtractor):
  4046. _module = 'yt_dlp.extractor.kankanews'
  4047. IE_NAME = 'KankaNews'
  4048. _VALID_URL = 'https?://(?:www\\.)?kankanews\\.com/a/\\d+\\-\\d+\\-\\d+/(?P<id>\\d+)\\.shtml'
  4049. _WORKING = False
  4050. _RETURN_TYPE = 'video'
  4051. class KaraoketvIE(LazyLoadExtractor):
  4052. _module = 'yt_dlp.extractor.karaoketv'
  4053. IE_NAME = 'Karaoketv'
  4054. _VALID_URL = 'https?://(?:www\\.)?karaoketv\\.co\\.il/[^/]+/(?P<id>\\d+)'
  4055. _RETURN_TYPE = 'video'
  4056. class KelbyOneIE(LazyLoadExtractor):
  4057. _module = 'yt_dlp.extractor.kelbyone'
  4058. IE_NAME = 'KelbyOne'
  4059. _VALID_URL = 'https?://members\\.kelbyone\\.com/course/(?P<id>[^$&?#/]+)'
  4060. _WORKING = False
  4061. _RETURN_TYPE = 'playlist'
  4062. class Kenh14PlaylistIE(LazyLoadExtractor):
  4063. _module = 'yt_dlp.extractor.kenh14'
  4064. IE_NAME = 'Kenh14Playlist'
  4065. _VALID_URL = 'https?://video\\.kenh14\\.vn/playlist/[\\w-]+-(?P<id>[0-9]+)\\.chn'
  4066. _RETURN_TYPE = 'playlist'
  4067. class Kenh14VideoIE(LazyLoadExtractor):
  4068. _module = 'yt_dlp.extractor.kenh14'
  4069. IE_NAME = 'Kenh14Video'
  4070. _VALID_URL = 'https?://video\\.kenh14\\.vn/(?:video/)?[\\w-]+-(?P<id>[0-9]+)\\.chn'
  4071. _RETURN_TYPE = 'video'
  4072. class KhanAcademyBaseIE(LazyLoadExtractor):
  4073. _module = 'yt_dlp.extractor.khanacademy'
  4074. IE_NAME = 'KhanAcademyBase'
  4075. class KhanAcademyIE(KhanAcademyBaseIE):
  4076. _module = 'yt_dlp.extractor.khanacademy'
  4077. IE_NAME = 'khanacademy'
  4078. _VALID_URL = 'https?://(?:www\\.)?khanacademy\\.org/(?P<id>(?:[^/]+/){4}v/[^?#/&]+)'
  4079. _RETURN_TYPE = 'video'
  4080. class KhanAcademyUnitIE(KhanAcademyBaseIE):
  4081. _module = 'yt_dlp.extractor.khanacademy'
  4082. IE_NAME = 'khanacademy:unit'
  4083. _VALID_URL = 'https?://(?:www\\.)?khanacademy\\.org/(?P<id>(?:[^/]+/){1,2}[^?#/&]+)/?(?:[?#&]|$)'
  4084. _RETURN_TYPE = 'playlist'
  4085. class KickBaseIE(LazyLoadExtractor):
  4086. _module = 'yt_dlp.extractor.kick'
  4087. IE_NAME = 'KickBase'
  4088. class KickClipIE(KickBaseIE):
  4089. _module = 'yt_dlp.extractor.kick'
  4090. IE_NAME = 'kick:clips'
  4091. _VALID_URL = 'https?://(?:www\\.)?kick\\.com/[\\w-]+(?:/clips/|/?\\?(?:[^#]+&)?clip=)(?P<id>clip_[\\w-]+)'
  4092. age_limit = 18
  4093. _RETURN_TYPE = 'video'
  4094. class KickIE(KickBaseIE):
  4095. _module = 'yt_dlp.extractor.kick'
  4096. IE_NAME = 'kick:live'
  4097. _VALID_URL = 'https?://(?:www\\.)?kick\\.com/(?!(?:video|categories|search|auth)(?:[/?#]|$))(?P<id>[\\w-]+)'
  4098. age_limit = 18
  4099. _RETURN_TYPE = 'video'
  4100. @classmethod
  4101. def suitable(cls, url):
  4102. return False if (KickVODIE.suitable(url) or KickClipIE.suitable(url)) else super().suitable(url)
  4103. class KickVODIE(KickBaseIE):
  4104. _module = 'yt_dlp.extractor.kick'
  4105. IE_NAME = 'kick:vod'
  4106. _VALID_URL = 'https?://(?:www\\.)?kick\\.com/[\\w-]+/videos/(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})'
  4107. _RETURN_TYPE = 'video'
  4108. class KickerIE(LazyLoadExtractor):
  4109. _module = 'yt_dlp.extractor.kicker'
  4110. IE_NAME = 'Kicker'
  4111. _VALID_URL = 'https?://(?:www\\.)kicker\\.(?:de)/(?P<id>[\\w-]+)/video'
  4112. _RETURN_TYPE = 'video'
  4113. class KickStarterIE(LazyLoadExtractor):
  4114. _module = 'yt_dlp.extractor.kickstarter'
  4115. IE_NAME = 'KickStarter'
  4116. _VALID_URL = 'https?://(?:www\\.)?kickstarter\\.com/projects/(?P<id>[^/]*)/.*'
  4117. _RETURN_TYPE = 'video'
  4118. class KikaIE(LazyLoadExtractor):
  4119. _module = 'yt_dlp.extractor.kika'
  4120. IE_NAME = 'Kika'
  4121. _VALID_URL = 'https?://(?:www\\.)?kika\\.de/[\\w/-]+/videos/(?P<id>[a-z-]+\\d+)'
  4122. IE_DESC = 'KiKA.de'
  4123. _RETURN_TYPE = 'video'
  4124. class KinjaEmbedIE(LazyLoadExtractor):
  4125. _module = 'yt_dlp.extractor.kinja'
  4126. IE_NAME = 'kinja:embed'
  4127. _VALID_URL = '(?x)https?://(?:[^.]+\\.)?\n (?:\n avclub|\n clickhole|\n deadspin|\n gizmodo|\n jalopnik|\n jezebel|\n kinja|\n kotaku|\n lifehacker|\n splinternews|\n the(?:inventory|onion|root|takeout)\n )\\.com/\n (?:\n ajax/inset|\n embed/video\n )/iframe\\?.*?\\bid=\n (?P<type>\n fb|\n imgur|\n instagram|\n jwp(?:layer)?-video|\n kinjavideo|\n mcp|\n megaphone|\n soundcloud(?:-playlist)?|\n tumblr-post|\n twitch-stream|\n twitter|\n ustream-channel|\n vimeo|\n vine|\n youtube-(?:list|video)\n )-(?P<id>[^&]+)'
  4128. class KinoPoiskIE(LazyLoadExtractor):
  4129. _module = 'yt_dlp.extractor.kinopoisk'
  4130. IE_NAME = 'KinoPoisk'
  4131. _VALID_URL = 'https?://(?:www\\.)?kinopoisk\\.ru/film/(?P<id>\\d+)'
  4132. age_limit = 12
  4133. _RETURN_TYPE = 'video'
  4134. class KommunetvIE(LazyLoadExtractor):
  4135. _module = 'yt_dlp.extractor.kommunetv'
  4136. IE_NAME = 'Kommunetv'
  4137. _VALID_URL = 'https?://\\w+\\.kommunetv\\.no/archive/(?P<id>\\w+)'
  4138. _RETURN_TYPE = 'video'
  4139. class JixieBaseIE(LazyLoadExtractor):
  4140. _module = 'yt_dlp.extractor.jixie'
  4141. IE_NAME = 'JixieBase'
  4142. class KompasVideoIE(JixieBaseIE):
  4143. _module = 'yt_dlp.extractor.kompas'
  4144. IE_NAME = 'KompasVideo'
  4145. _VALID_URL = 'https?://video\\.kompas\\.com/\\w+/(?P<id>\\d+)/(?P<slug>[\\w-]+)'
  4146. _RETURN_TYPE = 'video'
  4147. class KooIE(LazyLoadExtractor):
  4148. _module = 'yt_dlp.extractor.koo'
  4149. IE_NAME = 'Koo'
  4150. _VALID_URL = 'https?://(?:www\\.)?kooapp\\.com/koo/[^/]+/(?P<id>[^/&#$?]+)'
  4151. _WORKING = False
  4152. _RETURN_TYPE = 'video'
  4153. class KrasViewIE(LazyLoadExtractor):
  4154. _module = 'yt_dlp.extractor.krasview'
  4155. IE_NAME = 'KrasView'
  4156. _VALID_URL = 'https?://krasview\\.ru/(?:video|embed)/(?P<id>\\d+)'
  4157. _WORKING = False
  4158. IE_DESC = 'Красвью'
  4159. _RETURN_TYPE = 'video'
  4160. class KTHIE(LazyLoadExtractor):
  4161. _module = 'yt_dlp.extractor.kth'
  4162. IE_NAME = 'KTH'
  4163. _VALID_URL = 'https?://play\\.kth\\.se/(?:[^/]+/)+(?P<id>[a-z0-9_]+)'
  4164. _RETURN_TYPE = 'video'
  4165. class Ku6IE(LazyLoadExtractor):
  4166. _module = 'yt_dlp.extractor.ku6'
  4167. IE_NAME = 'Ku6'
  4168. _VALID_URL = 'https?://v\\.ku6\\.com/show/(?P<id>[a-zA-Z0-9\\-\\_]+)(?:\\.)*html'
  4169. _RETURN_TYPE = 'video'
  4170. class KukuluLiveIE(LazyLoadExtractor):
  4171. _module = 'yt_dlp.extractor.kukululive'
  4172. IE_NAME = 'KukuluLive'
  4173. _VALID_URL = 'https?://live\\.erinn\\.biz/live\\.php\\?h(?P<id>\\d+)'
  4174. _RETURN_TYPE = 'video'
  4175. class KuwoAlbumIE(LazyLoadExtractor):
  4176. _module = 'yt_dlp.extractor.kuwo'
  4177. IE_NAME = 'kuwo:album'
  4178. _VALID_URL = 'https?://(?:www\\.)?kuwo\\.cn/album/(?P<id>\\d+?)/'
  4179. _WORKING = False
  4180. IE_DESC = '酷我音乐 - 专辑'
  4181. _RETURN_TYPE = 'playlist'
  4182. class KuwoCategoryIE(LazyLoadExtractor):
  4183. _module = 'yt_dlp.extractor.kuwo'
  4184. IE_NAME = 'kuwo:category'
  4185. _VALID_URL = 'https?://yinyue\\.kuwo\\.cn/yy/cinfo_(?P<id>\\d+?).htm'
  4186. _WORKING = False
  4187. IE_DESC = '酷我音乐 - 分类'
  4188. _RETURN_TYPE = 'playlist'
  4189. class KuwoChartIE(LazyLoadExtractor):
  4190. _module = 'yt_dlp.extractor.kuwo'
  4191. IE_NAME = 'kuwo:chart'
  4192. _VALID_URL = 'https?://yinyue\\.kuwo\\.cn/billboard_(?P<id>[^.]+).htm'
  4193. _WORKING = False
  4194. IE_DESC = '酷我音乐 - 排行榜'
  4195. _RETURN_TYPE = 'playlist'
  4196. class KuwoBaseIE(LazyLoadExtractor):
  4197. _module = 'yt_dlp.extractor.kuwo'
  4198. IE_NAME = 'KuwoBase'
  4199. class KuwoIE(KuwoBaseIE):
  4200. _module = 'yt_dlp.extractor.kuwo'
  4201. IE_NAME = 'kuwo:song'
  4202. _VALID_URL = 'https?://(?:www\\.)?kuwo\\.cn/yinyue/(?P<id>\\d+)'
  4203. _WORKING = False
  4204. IE_DESC = '酷我音乐'
  4205. _RETURN_TYPE = 'video'
  4206. class KuwoMvIE(KuwoBaseIE):
  4207. _module = 'yt_dlp.extractor.kuwo'
  4208. IE_NAME = 'kuwo:mv'
  4209. _VALID_URL = 'https?://(?:www\\.)?kuwo\\.cn/mv/(?P<id>\\d+?)/'
  4210. _WORKING = False
  4211. IE_DESC = '酷我音乐 - MV'
  4212. _RETURN_TYPE = 'video'
  4213. class KuwoSingerIE(LazyLoadExtractor):
  4214. _module = 'yt_dlp.extractor.kuwo'
  4215. IE_NAME = 'kuwo:singer'
  4216. _VALID_URL = 'https?://(?:www\\.)?kuwo\\.cn/mingxing/(?P<id>[^/]+)'
  4217. _WORKING = False
  4218. IE_DESC = '酷我音乐 - 歌手'
  4219. _RETURN_TYPE = 'playlist'
  4220. class LA7IE(LazyLoadExtractor):
  4221. _module = 'yt_dlp.extractor.la7'
  4222. IE_NAME = 'la7.it'
  4223. _VALID_URL = '(?x)https?://(?:\n (?:www\\.)?la7\\.it/([^/]+)/(?:rivedila7|video|news)/|\n tg\\.la7\\.it/repliche-tgla7\\?id=\n )(?P<id>.+)'
  4224. _RETURN_TYPE = 'video'
  4225. class LA7PodcastEpisodeIE(LazyLoadExtractor):
  4226. _module = 'yt_dlp.extractor.la7'
  4227. IE_NAME = 'la7.it:pod:episode'
  4228. _VALID_URL = 'https?://(?:www\\.)?la7\\.it/[^/]+/podcast/([^/]+-)?(?P<id>\\d+)'
  4229. _RETURN_TYPE = 'video'
  4230. class LA7PodcastIE(LA7PodcastEpisodeIE):
  4231. _module = 'yt_dlp.extractor.la7'
  4232. IE_NAME = 'la7.it:podcast'
  4233. _VALID_URL = 'https?://(?:www\\.)?la7\\.it/(?P<id>[^/]+)/podcast/?(?:$|[#?])'
  4234. _RETURN_TYPE = 'playlist'
  4235. class LaracastsBaseIE(LazyLoadExtractor):
  4236. _module = 'yt_dlp.extractor.laracasts'
  4237. IE_NAME = 'LaracastsBase'
  4238. class LaracastsIE(LaracastsBaseIE):
  4239. _module = 'yt_dlp.extractor.laracasts'
  4240. IE_NAME = 'laracasts'
  4241. _VALID_URL = 'https?://(?:www\\.)?laracasts\\.com/series/(?P<id>[\\w-]+/episodes/\\d+)/?(?:[?#]|$)'
  4242. _RETURN_TYPE = 'video'
  4243. class LaracastsPlaylistIE(LaracastsBaseIE):
  4244. _module = 'yt_dlp.extractor.laracasts'
  4245. IE_NAME = 'laracasts:series'
  4246. _VALID_URL = 'https?://(?:www\\.)?laracasts\\.com/series/(?P<id>[\\w-]+)/?(?:[?#]|$)'
  4247. _RETURN_TYPE = 'playlist'
  4248. class LastFMIE(LazyLoadExtractor):
  4249. _module = 'yt_dlp.extractor.lastfm'
  4250. IE_NAME = 'LastFM'
  4251. _VALID_URL = 'https?://(?:www\\.)?last\\.fm/music(?:/[^/]+){2}/(?P<id>[^/#?]+)'
  4252. _RETURN_TYPE = 'video'
  4253. class LastFMPlaylistBaseIE(LazyLoadExtractor):
  4254. _module = 'yt_dlp.extractor.lastfm'
  4255. IE_NAME = 'LastFMPlaylistBase'
  4256. class LastFMPlaylistIE(LastFMPlaylistBaseIE):
  4257. _module = 'yt_dlp.extractor.lastfm'
  4258. IE_NAME = 'LastFMPlaylist'
  4259. _VALID_URL = 'https?://(?:www\\.)?last\\.fm/(music|tag)/(?P<id>[^/]+)(?:/[^/]+)?/?(?:[?#]|$)'
  4260. _RETURN_TYPE = 'playlist'
  4261. class LastFMUserIE(LastFMPlaylistBaseIE):
  4262. _module = 'yt_dlp.extractor.lastfm'
  4263. IE_NAME = 'LastFMUser'
  4264. _VALID_URL = 'https?://(?:www\\.)?last\\.fm/user/[^/]+/playlists/(?P<id>[^/#?]+)'
  4265. _RETURN_TYPE = 'playlist'
  4266. class LaXarxaMesIE(LazyLoadExtractor):
  4267. _module = 'yt_dlp.extractor.laxarxames'
  4268. IE_NAME = 'LaXarxaMes'
  4269. _VALID_URL = 'https?://(?:www\\.)?laxarxames\\.cat/(?:[^/?#]+/)*?(player|movie-details)/(?P<id>\\d+)'
  4270. _NETRC_MACHINE = 'laxarxames'
  4271. _RETURN_TYPE = 'video'
  4272. class LBRYBaseIE(LazyLoadExtractor):
  4273. _module = 'yt_dlp.extractor.lbry'
  4274. IE_NAME = 'LBRYBase'
  4275. class LBRYIE(LBRYBaseIE):
  4276. _module = 'yt_dlp.extractor.lbry'
  4277. IE_NAME = 'lbry'
  4278. _VALID_URL = '(?x)(?:https?://(?:www\\.)?(?:lbry\\.tv|odysee\\.com)/|lbry://)\n (?:\\$/(?:download|embed)/)?\n (?P<id>\n [^$@:/?#]+/[0-9a-f]{1,40}\n |(?:@[^$@:/?#&]+(?:[:#][0-9a-f]{1,40})?/)?[^$@:/?#&]+(?:[:#][0-9a-f]{1,40})?\n )'
  4279. IE_DESC = 'odysee.com'
  4280. _RETURN_TYPE = 'video'
  4281. class LBRYChannelIE(LBRYBaseIE):
  4282. _module = 'yt_dlp.extractor.lbry'
  4283. IE_NAME = 'lbry:channel'
  4284. _VALID_URL = '(?x)(?:https?://(?:www\\.)?(?:lbry\\.tv|odysee\\.com)/|lbry://)(?P<id>@[^$@:/?#&]+(?:[:#][0-9a-f]{1,40})?)/?(?:[?&]|$)'
  4285. IE_DESC = 'odysee.com channels'
  4286. _RETURN_TYPE = 'playlist'
  4287. class LBRYPlaylistIE(LBRYBaseIE):
  4288. _module = 'yt_dlp.extractor.lbry'
  4289. IE_NAME = 'lbry:playlist'
  4290. _VALID_URL = '(?x)(?:https?://(?:www\\.)?(?:lbry\\.tv|odysee\\.com)/|lbry://)\\$/(?:play)?list/(?P<id>[0-9a-f-]+)'
  4291. IE_DESC = 'odysee.com playlists'
  4292. _RETURN_TYPE = 'playlist'
  4293. class LCIIE(LazyLoadExtractor):
  4294. _module = 'yt_dlp.extractor.lci'
  4295. IE_NAME = 'LCI'
  4296. _VALID_URL = 'https?://(?:www\\.)?(?:lci|tf1info)\\.fr/(?:[^/?#]+/)+[\\w-]+-(?P<id>\\d+)\\.html'
  4297. _RETURN_TYPE = 'video'
  4298. class LcpIE(LazyLoadExtractor):
  4299. _module = 'yt_dlp.extractor.lcp'
  4300. IE_NAME = 'Lcp'
  4301. _VALID_URL = 'https?://(?:www\\.)?lcp\\.fr/(?:[^/]+/)*(?P<id>[^/]+)'
  4302. _RETURN_TYPE = 'video'
  4303. class LcpPlayIE(ArkenaIE):
  4304. _module = 'yt_dlp.extractor.lcp'
  4305. IE_NAME = 'LcpPlay'
  4306. _VALID_URL = 'https?://play\\.lcp\\.fr/embed/(?P<id>[^/]+)/(?P<account_id>[^/]+)/[^/]+/[^/]+'
  4307. _RETURN_TYPE = 'video'
  4308. class LearningOnScreenIE(LazyLoadExtractor):
  4309. _module = 'yt_dlp.extractor.learningonscreen'
  4310. IE_NAME = 'LearningOnScreen'
  4311. _VALID_URL = 'https?://learningonscreen\\.ac\\.uk/ondemand/index\\.php/prog/(?P<id>\\w+)'
  4312. _RETURN_TYPE = 'video'
  4313. class Lecture2GoIE(LazyLoadExtractor):
  4314. _module = 'yt_dlp.extractor.lecture2go'
  4315. IE_NAME = 'Lecture2Go'
  4316. _VALID_URL = 'https?://lecture2go\\.uni-hamburg\\.de/veranstaltungen/-/v/(?P<id>\\d+)'
  4317. _WORKING = False
  4318. _RETURN_TYPE = 'video'
  4319. class LecturioBaseIE(LazyLoadExtractor):
  4320. _module = 'yt_dlp.extractor.lecturio'
  4321. IE_NAME = 'LecturioBase'
  4322. _NETRC_MACHINE = 'lecturio'
  4323. class LecturioCourseIE(LecturioBaseIE):
  4324. _module = 'yt_dlp.extractor.lecturio'
  4325. IE_NAME = 'LecturioCourse'
  4326. _VALID_URL = 'https?://app\\.lecturio\\.com/(?:[^/]+/(?P<nt>[^/?#&]+)\\.course|(?:#/)?course/c/(?P<id>\\d+))'
  4327. _NETRC_MACHINE = 'lecturio'
  4328. _RETURN_TYPE = 'playlist'
  4329. class LecturioDeCourseIE(LecturioBaseIE):
  4330. _module = 'yt_dlp.extractor.lecturio'
  4331. IE_NAME = 'LecturioDeCourse'
  4332. _VALID_URL = 'https?://(?:www\\.)?lecturio\\.de/[^/]+/(?P<id>[^/?#&]+)\\.kurs'
  4333. _NETRC_MACHINE = 'lecturio'
  4334. class LecturioIE(LecturioBaseIE):
  4335. _module = 'yt_dlp.extractor.lecturio'
  4336. IE_NAME = 'Lecturio'
  4337. _VALID_URL = '(?x)\n https://\n (?:\n app\\.lecturio\\.com/([^/?#]+/(?P<nt>[^/?#&]+)\\.lecture|(?:\\#/)?lecture/c/\\d+/(?P<id>\\d+))|\n (?:www\\.)?lecturio\\.de/(?:[^/?#]+/)+(?P<nt_de>[^/?#&]+)\\.vortrag\n )\n '
  4338. _NETRC_MACHINE = 'lecturio'
  4339. _RETURN_TYPE = 'video'
  4340. class LeIE(LazyLoadExtractor):
  4341. _module = 'yt_dlp.extractor.leeco'
  4342. IE_NAME = 'Le'
  4343. _VALID_URL = 'https?://(?:www\\.le\\.com/ptv/vplay|(?:sports\\.le|(?:www\\.)?lesports)\\.com/(?:match|video))/(?P<id>\\d+)\\.html'
  4344. IE_DESC = '乐视网'
  4345. _RETURN_TYPE = 'video'
  4346. class LePlaylistIE(LazyLoadExtractor):
  4347. _module = 'yt_dlp.extractor.leeco'
  4348. IE_NAME = 'LePlaylist'
  4349. _VALID_URL = 'https?://[a-z]+\\.le\\.com/(?!video)[a-z]+/(?P<id>[a-z0-9_]+)'
  4350. _RETURN_TYPE = 'playlist'
  4351. @classmethod
  4352. def suitable(cls, url):
  4353. return False if LeIE.suitable(url) else super().suitable(url)
  4354. class LetvCloudIE(LazyLoadExtractor):
  4355. _module = 'yt_dlp.extractor.leeco'
  4356. IE_NAME = 'LetvCloud'
  4357. _VALID_URL = 'https?://yuntv\\.letv\\.com/bcloud.html\\?.+'
  4358. IE_DESC = '乐视云'
  4359. _RETURN_TYPE = 'video'
  4360. class LeFigaroVideoEmbedIE(LazyLoadExtractor):
  4361. _module = 'yt_dlp.extractor.lefigaro'
  4362. IE_NAME = 'LeFigaroVideoEmbed'
  4363. _VALID_URL = 'https?://video\\.lefigaro\\.fr/embed/[^?#]+/(?P<id>[\\w-]+)'
  4364. _RETURN_TYPE = 'video'
  4365. class LeFigaroVideoSectionIE(LazyLoadExtractor):
  4366. _module = 'yt_dlp.extractor.lefigaro'
  4367. IE_NAME = 'LeFigaroVideoSection'
  4368. _VALID_URL = 'https?://video\\.lefigaro\\.fr/figaro/(?P<id>[\\w-]+)/?(?:[#?]|$)'
  4369. _RETURN_TYPE = 'playlist'
  4370. class LEGOIE(LazyLoadExtractor):
  4371. _module = 'yt_dlp.extractor.lego'
  4372. IE_NAME = 'LEGO'
  4373. _VALID_URL = 'https?://(?:www\\.)?lego\\.com/(?P<locale>[a-z]{2}-[a-z]{2})/(?:[^/]+/)*videos/(?:[^/]+/)*[^/?#]+-(?P<id>[0-9a-f]{32})'
  4374. age_limit = 5
  4375. _RETURN_TYPE = 'video'
  4376. class LemondeIE(LazyLoadExtractor):
  4377. _module = 'yt_dlp.extractor.lemonde'
  4378. IE_NAME = 'Lemonde'
  4379. _VALID_URL = 'https?://(?:.+?\\.)?lemonde\\.fr/(?:[^/]+/)*(?P<id>[^/]+)\\.html'
  4380. _RETURN_TYPE = 'video'
  4381. class LentaIE(LazyLoadExtractor):
  4382. _module = 'yt_dlp.extractor.lenta'
  4383. IE_NAME = 'Lenta'
  4384. _VALID_URL = 'https?://(?:www\\.)?lenta\\.ru/[^/]+/\\d+/\\d+/\\d+/(?P<id>[^/?#&]+)'
  4385. _WORKING = False
  4386. _RETURN_TYPE = 'video'
  4387. class LibraryOfCongressIE(LazyLoadExtractor):
  4388. _module = 'yt_dlp.extractor.libraryofcongress'
  4389. IE_NAME = 'loc'
  4390. _VALID_URL = 'https?://(?:www\\.)?loc\\.gov/(?:item/|today/cyberlc/feature_wdesc\\.php\\?.*\\brec=)(?P<id>[0-9a-z_.]+)'
  4391. IE_DESC = 'Library of Congress'
  4392. _RETURN_TYPE = 'video'
  4393. class LibsynIE(LazyLoadExtractor):
  4394. _module = 'yt_dlp.extractor.libsyn'
  4395. IE_NAME = 'Libsyn'
  4396. _VALID_URL = '(?P<mainurl>https?://html5-player\\.libsyn\\.com/embed/episode/id/(?P<id>[0-9]+))'
  4397. _RETURN_TYPE = 'video'
  4398. class LifeEmbedIE(LazyLoadExtractor):
  4399. _module = 'yt_dlp.extractor.lifenews'
  4400. IE_NAME = 'life:embed'
  4401. _VALID_URL = 'https?://embed\\.life\\.ru/(?:embed|video)/(?P<id>[\\da-f]{32})'
  4402. _RETURN_TYPE = 'video'
  4403. class LifeNewsIE(LazyLoadExtractor):
  4404. _module = 'yt_dlp.extractor.lifenews'
  4405. IE_NAME = 'life'
  4406. _VALID_URL = 'https?://life\\.ru/t/[^/]+/(?P<id>\\d+)'
  4407. IE_DESC = 'Life.ru'
  4408. _RETURN_TYPE = 'any'
  4409. class LikeeIE(LazyLoadExtractor):
  4410. _module = 'yt_dlp.extractor.likee'
  4411. IE_NAME = 'likee'
  4412. _VALID_URL = '(?x)https?://(www\\.)?likee\\.video/(?:(?P<channel_name>[^/]+)/video/|v/)(?P<id>\\w+)'
  4413. _RETURN_TYPE = 'video'
  4414. class LikeeUserIE(LazyLoadExtractor):
  4415. _module = 'yt_dlp.extractor.likee'
  4416. IE_NAME = 'likee:user'
  4417. _VALID_URL = 'https?://(www\\.)?likee\\.video/(?P<id>[^/]+)/?$'
  4418. _RETURN_TYPE = 'playlist'
  4419. class LimelightBaseIE(LazyLoadExtractor):
  4420. _module = 'yt_dlp.extractor.limelight'
  4421. IE_NAME = 'LimelightBase'
  4422. class LimelightChannelIE(LimelightBaseIE):
  4423. _module = 'yt_dlp.extractor.limelight'
  4424. IE_NAME = 'limelight:channel'
  4425. _VALID_URL = '(?x)\n (?:\n limelight:channel:|\n https?://\n (?:\n link\\.videoplatform\\.limelight\\.com/media/|\n assets\\.delvenetworks\\.com/player/loader\\.swf\n )\n \\?.*?\\bchannelId=\n )\n (?P<id>[a-z0-9]{32})\n '
  4426. _RETURN_TYPE = 'playlist'
  4427. class LimelightChannelListIE(LimelightBaseIE):
  4428. _module = 'yt_dlp.extractor.limelight'
  4429. IE_NAME = 'limelight:channel_list'
  4430. _VALID_URL = '(?x)\n (?:\n limelight:channel_list:|\n https?://\n (?:\n link\\.videoplatform\\.limelight\\.com/media/|\n assets\\.delvenetworks\\.com/player/loader\\.swf\n )\n \\?.*?\\bchannelListId=\n )\n (?P<id>[a-z0-9]{32})\n '
  4431. _RETURN_TYPE = 'playlist'
  4432. class LimelightMediaIE(LimelightBaseIE):
  4433. _module = 'yt_dlp.extractor.limelight'
  4434. IE_NAME = 'limelight'
  4435. _VALID_URL = '(?x)\n (?:\n limelight:media:|\n https?://\n (?:\n link\\.videoplatform\\.limelight\\.com/media/|\n assets\\.delvenetworks\\.com/player/loader\\.swf\n )\n \\?.*?\\bmediaId=\n )\n (?P<id>[a-z0-9]{32})\n '
  4436. _RETURN_TYPE = 'video'
  4437. class LinkedInBaseIE(LazyLoadExtractor):
  4438. _module = 'yt_dlp.extractor.linkedin'
  4439. IE_NAME = 'LinkedInBase'
  4440. _NETRC_MACHINE = 'linkedin'
  4441. class LinkedInIE(LinkedInBaseIE):
  4442. _module = 'yt_dlp.extractor.linkedin'
  4443. IE_NAME = 'LinkedIn'
  4444. _VALID_URL = 'https?://(?:www\\.)?linkedin\\.com/posts/[^/?#]+-(?P<id>\\d+)-\\w{4}/?(?:[?#]|$)'
  4445. _NETRC_MACHINE = 'linkedin'
  4446. _RETURN_TYPE = 'video'
  4447. class LinkedInLearningBaseIE(LinkedInBaseIE):
  4448. _module = 'yt_dlp.extractor.linkedin'
  4449. IE_NAME = 'LinkedInLearningBase'
  4450. _NETRC_MACHINE = 'linkedin'
  4451. class LinkedInLearningCourseIE(LinkedInLearningBaseIE):
  4452. _module = 'yt_dlp.extractor.linkedin'
  4453. IE_NAME = 'linkedin:learning:course'
  4454. _VALID_URL = 'https?://(?:www\\.)?linkedin\\.com/learning/(?P<id>[^/?#]+)'
  4455. _NETRC_MACHINE = 'linkedin'
  4456. _RETURN_TYPE = 'playlist'
  4457. @classmethod
  4458. def suitable(cls, url):
  4459. return False if LinkedInLearningIE.suitable(url) else super().suitable(url)
  4460. class LinkedInLearningIE(LinkedInLearningBaseIE):
  4461. _module = 'yt_dlp.extractor.linkedin'
  4462. IE_NAME = 'linkedin:learning'
  4463. _VALID_URL = 'https?://(?:www\\.)?linkedin\\.com/learning/(?P<course_slug>[^/]+)/(?P<id>[^/?#]+)'
  4464. _NETRC_MACHINE = 'linkedin'
  4465. _RETURN_TYPE = 'video'
  4466. class Liputan6IE(LazyLoadExtractor):
  4467. _module = 'yt_dlp.extractor.liputan6'
  4468. IE_NAME = 'Liputan6'
  4469. _VALID_URL = 'https?://www\\.liputan6\\.com/\\w+/read/\\d+/(?P<id>[\\w-]+)'
  4470. _RETURN_TYPE = 'video'
  4471. class ListenNotesIE(LazyLoadExtractor):
  4472. _module = 'yt_dlp.extractor.listennotes'
  4473. IE_NAME = 'ListenNotes'
  4474. _VALID_URL = 'https?://(?:www\\.)?listennotes\\.com/podcasts/[^/]+/[^/]+-(?P<id>.+)/'
  4475. _RETURN_TYPE = 'video'
  4476. class LiTVIE(LazyLoadExtractor):
  4477. _module = 'yt_dlp.extractor.litv'
  4478. IE_NAME = 'LiTV'
  4479. _VALID_URL = 'https?://(?:www\\.)?litv\\.tv/(?:[^/?#]+/watch/|vod/[^/?#]+/content\\.do\\?content_id=)(?P<id>[\\w-]+)'
  4480. _RETURN_TYPE = 'any'
  4481. class LiveJournalIE(LazyLoadExtractor):
  4482. _module = 'yt_dlp.extractor.livejournal'
  4483. IE_NAME = 'LiveJournal'
  4484. _VALID_URL = 'https?://(?:[^.]+\\.)?livejournal\\.com/video/album/\\d+.+?\\bid=(?P<id>\\d+)'
  4485. _RETURN_TYPE = 'video'
  4486. class LivestreamIE(LazyLoadExtractor):
  4487. _module = 'yt_dlp.extractor.livestream'
  4488. IE_NAME = 'livestream'
  4489. _VALID_URL = '(?x)\n https?://(?:new\\.)?livestream\\.com/\n (?:accounts/(?P<account_id>\\d+)|(?P<account_name>[^/]+))\n (?:/events/(?P<event_id>\\d+)|/(?P<event_name>[^/]+))?\n (?:/videos/(?P<id>\\d+))?\n '
  4490. _RETURN_TYPE = 'any'
  4491. class LivestreamOriginalIE(LazyLoadExtractor):
  4492. _module = 'yt_dlp.extractor.livestream'
  4493. IE_NAME = 'livestream:original'
  4494. _VALID_URL = '(?x)https?://original\\.livestream\\.com/\n (?P<user>[^/\\?#]+)(?:/(?P<type>video|folder)\n (?:(?:\\?.*?Id=|/)(?P<id>.*?)(&|$))?)?\n '
  4495. _RETURN_TYPE = 'any'
  4496. class LivestreamShortenerIE(LazyLoadExtractor):
  4497. _module = 'yt_dlp.extractor.livestream'
  4498. IE_NAME = 'livestream:shortener'
  4499. _VALID_URL = 'https?://livestre\\.am/(?P<id>.+)'
  4500. IE_DESC = False
  4501. class LivestreamfailsIE(LazyLoadExtractor):
  4502. _module = 'yt_dlp.extractor.livestreamfails'
  4503. IE_NAME = 'Livestreamfails'
  4504. _VALID_URL = 'https?://(?:www\\.)?livestreamfails\\.com/(?:clip|post)/(?P<id>[0-9]+)'
  4505. _RETURN_TYPE = 'video'
  4506. class LnkIE(LazyLoadExtractor):
  4507. _module = 'yt_dlp.extractor.lnk'
  4508. IE_NAME = 'Lnk'
  4509. _VALID_URL = 'https?://(?:www\\.)?lnk\\.lt/[^/]+/(?P<id>\\d+)'
  4510. _RETURN_TYPE = 'video'
  4511. class LoomFolderIE(LazyLoadExtractor):
  4512. _module = 'yt_dlp.extractor.loom'
  4513. IE_NAME = 'loom:folder'
  4514. _VALID_URL = 'https?://(?:www\\.)?loom\\.com/share/folder/(?P<id>[\\da-f]{32})'
  4515. _RETURN_TYPE = 'playlist'
  4516. class LoomIE(LazyLoadExtractor):
  4517. _module = 'yt_dlp.extractor.loom'
  4518. IE_NAME = 'loom'
  4519. _VALID_URL = 'https?://(?:www\\.)?loom\\.com/(?:share|embed)/(?P<id>[\\da-f]{32})'
  4520. _RETURN_TYPE = 'video'
  4521. class NuevoBaseIE(LazyLoadExtractor):
  4522. _module = 'yt_dlp.extractor.nuevo'
  4523. IE_NAME = 'NuevoBase'
  4524. class LoveHomePornIE(NuevoBaseIE):
  4525. _module = 'yt_dlp.extractor.lovehomeporn'
  4526. IE_NAME = 'LoveHomePorn'
  4527. _VALID_URL = 'https?://(?:www\\.)?lovehomeporn\\.com/video/(?P<id>\\d+)(?:/(?P<display_id>[^/?#&]+))?'
  4528. age_limit = 18
  4529. _RETURN_TYPE = 'video'
  4530. class LRTBaseIE(LazyLoadExtractor):
  4531. _module = 'yt_dlp.extractor.lrt'
  4532. IE_NAME = 'LRTBase'
  4533. class LRTVODIE(LRTBaseIE):
  4534. _module = 'yt_dlp.extractor.lrt'
  4535. IE_NAME = 'LRTVOD'
  4536. _VALID_URL = 'https?://(?:www\\.)?lrt\\.lt(?P<path>/mediateka/irasas/(?P<id>[0-9]+))'
  4537. _RETURN_TYPE = 'video'
  4538. class LRTStreamIE(LRTBaseIE):
  4539. _module = 'yt_dlp.extractor.lrt'
  4540. IE_NAME = 'LRTStream'
  4541. _VALID_URL = 'https?://(?:www\\.)?lrt\\.lt/mediateka/tiesiogiai/(?P<id>[\\w-]+)'
  4542. _RETURN_TYPE = 'video'
  4543. class LSMLREmbedIE(LazyLoadExtractor):
  4544. _module = 'yt_dlp.extractor.lsm'
  4545. IE_NAME = 'LSMLREmbed'
  4546. _VALID_URL = '(?x)\n https?://(?:\n (?:latvijasradio|lr1|lr2|klasika|lr4|naba|radioteatris)\\.lsm|\n pieci\n )\\.lv/[^/?#]+/(?:\n pleijeris|embed\n )/?\\?(?:[^#]+&)?(?:show|id)=(?P<id>\\d+)'
  4547. _RETURN_TYPE = 'any'
  4548. class LSMLTVEmbedIE(LazyLoadExtractor):
  4549. _module = 'yt_dlp.extractor.lsm'
  4550. IE_NAME = 'LSMLTVEmbed'
  4551. _VALID_URL = 'https?://ltv\\.lsm\\.lv/embed\\?(?:[^#]+&)?c=(?P<id>[^#&]+)'
  4552. _RETURN_TYPE = 'video'
  4553. class LSMReplayIE(LazyLoadExtractor):
  4554. _module = 'yt_dlp.extractor.lsm'
  4555. IE_NAME = 'LSMReplay'
  4556. _VALID_URL = 'https?://replay\\.lsm\\.lv/[^/?#]+/(?:ieraksts|statja)/[^/?#]+/(?P<id>\\d+)'
  4557. _RETURN_TYPE = 'video'
  4558. class LumniIE(FranceTVBaseInfoExtractor):
  4559. _module = 'yt_dlp.extractor.lumni'
  4560. IE_NAME = 'Lumni'
  4561. _VALID_URL = 'https?://(?:www\\.)?lumni\\.fr/video/(?P<id>[\\w-]+)'
  4562. _RETURN_TYPE = 'video'
  4563. class LyndaBaseIE(LazyLoadExtractor):
  4564. _module = 'yt_dlp.extractor.lynda'
  4565. IE_NAME = 'LyndaBase'
  4566. _NETRC_MACHINE = 'lynda'
  4567. class LyndaCourseIE(LyndaBaseIE):
  4568. _module = 'yt_dlp.extractor.lynda'
  4569. IE_NAME = 'lynda:course'
  4570. _VALID_URL = 'https?://(?:www|m)\\.(?:lynda\\.com|educourse\\.ga)/(?P<coursepath>(?:[^/]+/){2,3}(?P<courseid>\\d+))-2\\.html'
  4571. IE_DESC = 'lynda.com online courses'
  4572. _NETRC_MACHINE = 'lynda'
  4573. class LyndaIE(LyndaBaseIE):
  4574. _module = 'yt_dlp.extractor.lynda'
  4575. IE_NAME = 'lynda'
  4576. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?(?:lynda\\.com|educourse\\.ga)/\n (?:\n (?:[^/]+/){2,3}(?P<course_id>\\d+)|\n player/embed\n )/\n (?P<id>\\d+)\n '
  4577. IE_DESC = 'lynda.com videos'
  4578. _NETRC_MACHINE = 'lynda'
  4579. _RETURN_TYPE = 'video'
  4580. class MaarivIE(LazyLoadExtractor):
  4581. _module = 'yt_dlp.extractor.maariv'
  4582. IE_NAME = 'maariv.co.il'
  4583. _VALID_URL = 'https?://player\\.maariv\\.co\\.il/public/player\\.html\\?(?:[^#]+&)?media=(?P<id>\\d+)'
  4584. _RETURN_TYPE = 'video'
  4585. class MagellanTVIE(LazyLoadExtractor):
  4586. _module = 'yt_dlp.extractor.magellantv'
  4587. IE_NAME = 'MagellanTV'
  4588. _VALID_URL = 'https?://(?:www\\.)?magellantv\\.com/(?:watch|video)/(?P<id>[\\w-]+)'
  4589. age_limit = 14
  4590. _RETURN_TYPE = 'video'
  4591. class MagentaMusikIE(LazyLoadExtractor):
  4592. _module = 'yt_dlp.extractor.magentamusik'
  4593. IE_NAME = 'MagentaMusik'
  4594. _VALID_URL = 'https?://(?:www\\.)?magentamusik\\.de/(?P<id>[^/?#]+)'
  4595. _RETURN_TYPE = 'video'
  4596. class MailRuIE(LazyLoadExtractor):
  4597. _module = 'yt_dlp.extractor.mailru'
  4598. IE_NAME = 'mailru'
  4599. _VALID_URL = '(?x)\n https?://\n (?:(?:www|m|videoapi)\\.)?my\\.mail\\.ru/+\n (?:\n video/.*\\#video=/?(?P<idv1>(?:[^/]+/){3}\\d+)|\n (?:videos/embed/)?(?:(?P<idv2prefix>(?:[^/]+/+){2})(?:video/(?:embed/)?)?(?P<idv2suffix>[^/]+/\\d+))(?:\\.html)?|\n (?:video/embed|\\+/video/meta)/(?P<metaid>\\d+)\n )\n '
  4600. IE_DESC = 'Видео@Mail.Ru'
  4601. _RETURN_TYPE = 'video'
  4602. class MailRuMusicSearchBaseIE(LazyLoadExtractor):
  4603. _module = 'yt_dlp.extractor.mailru'
  4604. IE_NAME = 'MailRuMusicSearchBase'
  4605. class MailRuMusicIE(MailRuMusicSearchBaseIE):
  4606. _module = 'yt_dlp.extractor.mailru'
  4607. IE_NAME = 'mailru:music'
  4608. _VALID_URL = 'https?://my\\.mail\\.ru/+music/+songs/+[^/?#&]+-(?P<id>[\\da-f]+)'
  4609. IE_DESC = 'Музыка@Mail.Ru'
  4610. _RETURN_TYPE = 'video'
  4611. class MailRuMusicSearchIE(MailRuMusicSearchBaseIE):
  4612. _module = 'yt_dlp.extractor.mailru'
  4613. IE_NAME = 'mailru:music:search'
  4614. _VALID_URL = 'https?://my\\.mail\\.ru/+music/+search/+(?P<id>[^/?#&]+)'
  4615. IE_DESC = 'Музыка@Mail.Ru'
  4616. _RETURN_TYPE = 'playlist'
  4617. class MainStreamingIE(LazyLoadExtractor):
  4618. _module = 'yt_dlp.extractor.mainstreaming'
  4619. IE_NAME = 'MainStreaming'
  4620. _VALID_URL = 'https?://(?:webtools-?)?(?P<host>[A-Za-z0-9-]*\\.msvdn\\.net)/(?:embed|amp_embed|content)/(?P<id>\\w+)'
  4621. IE_DESC = 'MainStreaming Player'
  4622. _RETURN_TYPE = 'any'
  4623. class MangomoloBaseIE(LazyLoadExtractor):
  4624. _module = 'yt_dlp.extractor.mangomolo'
  4625. IE_NAME = 'MangomoloBase'
  4626. _VALID_URL = '(?:https?:)?//(?:admin\\.mangomolo\\.com/analytics/index\\.php/customers/embed/|player\\.mangomolo\\.com/v1/)None'
  4627. class MangomoloLiveIE(MangomoloBaseIE):
  4628. _module = 'yt_dlp.extractor.mangomolo'
  4629. IE_NAME = 'mangomolo:live'
  4630. _VALID_URL = '(?:https?:)?//(?:admin\\.mangomolo\\.com/analytics/index\\.php/customers/embed/|player\\.mangomolo\\.com/v1/)(?:live|index)\\?.*?\\bchannelid=(?P<id>(?:[A-Za-z0-9+/=]|%2B|%2F|%3D)+)'
  4631. class MangomoloVideoIE(MangomoloBaseIE):
  4632. _module = 'yt_dlp.extractor.mangomolo'
  4633. IE_NAME = 'mangomolo:video'
  4634. _VALID_URL = '(?:https?:)?//(?:admin\\.mangomolo\\.com/analytics/index\\.php/customers/embed/|player\\.mangomolo\\.com/v1/)video\\?.*?\\bid=(?P<id>\\d+)'
  4635. class ManotoTVIE(LazyLoadExtractor):
  4636. _module = 'yt_dlp.extractor.manoto'
  4637. IE_NAME = 'ManotoTV'
  4638. _VALID_URL = 'https?://(?:www\\.)?manototv\\.com/episode/(?P<id>[0-9]+)'
  4639. IE_DESC = 'Manoto TV (Episode)'
  4640. _RETURN_TYPE = 'video'
  4641. class ManotoTVLiveIE(LazyLoadExtractor):
  4642. _module = 'yt_dlp.extractor.manoto'
  4643. IE_NAME = 'ManotoTVLive'
  4644. _VALID_URL = 'https?://(?:www\\.)?manototv\\.com/live/'
  4645. IE_DESC = 'Manoto TV (Live)'
  4646. _RETURN_TYPE = 'video'
  4647. class ManotoTVShowIE(LazyLoadExtractor):
  4648. _module = 'yt_dlp.extractor.manoto'
  4649. IE_NAME = 'ManotoTVShow'
  4650. _VALID_URL = 'https?://(?:www\\.)?manototv\\.com/show/(?P<id>[0-9]+)'
  4651. IE_DESC = 'Manoto TV (Show)'
  4652. _RETURN_TYPE = 'playlist'
  4653. class ManyVidsIE(LazyLoadExtractor):
  4654. _module = 'yt_dlp.extractor.manyvids'
  4655. IE_NAME = 'ManyVids'
  4656. _VALID_URL = '(?i)https?://(?:www\\.)?manyvids\\.com/video/(?P<id>\\d+)'
  4657. _WORKING = False
  4658. _RETURN_TYPE = 'video'
  4659. class MaoriTVIE(LazyLoadExtractor):
  4660. _module = 'yt_dlp.extractor.maoritv'
  4661. IE_NAME = 'MaoriTV'
  4662. _VALID_URL = 'https?://(?:www\\.)?maoritelevision\\.com/shows/(?:[^/]+/)+(?P<id>[^/?&#]+)'
  4663. _RETURN_TYPE = 'video'
  4664. class MarkizaIE(LazyLoadExtractor):
  4665. _module = 'yt_dlp.extractor.markiza'
  4666. IE_NAME = 'Markiza'
  4667. _VALID_URL = 'https?://(?:www\\.)?videoarchiv\\.markiza\\.sk/(?:video/(?:[^/]+/)*|embed/)(?P<id>\\d+)(?:[_/]|$)'
  4668. _WORKING = False
  4669. _RETURN_TYPE = 'any'
  4670. class MarkizaPageIE(LazyLoadExtractor):
  4671. _module = 'yt_dlp.extractor.markiza'
  4672. IE_NAME = 'MarkizaPage'
  4673. _VALID_URL = 'https?://(?:www\\.)?(?:(?:[^/]+\\.)?markiza|tvnoviny)\\.sk/(?:[^/]+/)*(?P<id>\\d+)_'
  4674. _WORKING = False
  4675. _RETURN_TYPE = 'video'
  4676. @classmethod
  4677. def suitable(cls, url):
  4678. return False if MarkizaIE.suitable(url) else super().suitable(url)
  4679. class MassengeschmackTVIE(LazyLoadExtractor):
  4680. _module = 'yt_dlp.extractor.massengeschmacktv'
  4681. IE_NAME = 'massengeschmack.tv'
  4682. _VALID_URL = 'https?://(?:www\\.)?massengeschmack\\.tv/play/(?P<id>[^?&#]+)'
  4683. _RETURN_TYPE = 'video'
  4684. class MastersIE(LazyLoadExtractor):
  4685. _module = 'yt_dlp.extractor.masters'
  4686. IE_NAME = 'Masters'
  4687. _VALID_URL = 'https?://(?:www\\.)?masters\\.com/en_US/watch/(?P<date>\\d{4}-\\d{2}-\\d{2})/(?P<id>\\d+)'
  4688. _RETURN_TYPE = 'video'
  4689. class MatchTVIE(LazyLoadExtractor):
  4690. _module = 'yt_dlp.extractor.matchtv'
  4691. IE_NAME = 'MatchTV'
  4692. _VALID_URL = ['https?://matchtv\\.ru/on-air/?(?:$|[?#])', 'https?://video\\.matchtv\\.ru/iframe/channel/106/?(?:$|[?#])']
  4693. _RETURN_TYPE = 'video'
  4694. class MBNIE(LazyLoadExtractor):
  4695. _module = 'yt_dlp.extractor.mbn'
  4696. IE_NAME = 'MBN'
  4697. _VALID_URL = 'https?://(?:www\\.)?mbn\\.co\\.kr/vod/programContents/preview(?:list)?/\\d+/\\d+/(?P<id>\\d+)'
  4698. IE_DESC = 'mbn.co.kr (매일방송)'
  4699. _RETURN_TYPE = 'video'
  4700. class MDRIE(LazyLoadExtractor):
  4701. _module = 'yt_dlp.extractor.mdr'
  4702. IE_NAME = 'MDR'
  4703. _VALID_URL = 'https?://(?:www\\.)?mdr\\.de/(?:.*)/[a-z-]+-?(?P<id>\\d+)(?:_.+?)?\\.html'
  4704. IE_DESC = 'MDR.DE'
  4705. _RETURN_TYPE = 'video'
  4706. class MedalTVIE(LazyLoadExtractor):
  4707. _module = 'yt_dlp.extractor.medaltv'
  4708. IE_NAME = 'MedalTV'
  4709. _VALID_URL = 'https?://(?:www\\.)?medal\\.tv/games/[^/?#&]+/clips/(?P<id>[^/?#&]+)'
  4710. _RETURN_TYPE = 'video'
  4711. class MediaiteIE(LazyLoadExtractor):
  4712. _module = 'yt_dlp.extractor.mediaite'
  4713. IE_NAME = 'Mediaite'
  4714. _VALID_URL = 'https?://(?:www\\.)?mediaite\\.com(?!/category)(?:/[\\w-]+){2}'
  4715. _RETURN_TYPE = 'video'
  4716. class MediaKlikkIE(LazyLoadExtractor):
  4717. _module = 'yt_dlp.extractor.mediaklikk'
  4718. IE_NAME = 'MediaKlikk'
  4719. _VALID_URL = '(?x)https?://(?:www\\.)?\n (?:mediaklikk|m4sport|hirado|petofilive)\\.hu/.*?(?:videok?|cikk)/\n (?:(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/(?P<day>[0-9]{1,2})/)?\n (?P<id>[^/#?_]+)'
  4720. _RETURN_TYPE = 'video'
  4721. class MedialaanIE(LazyLoadExtractor):
  4722. _module = 'yt_dlp.extractor.medialaan'
  4723. IE_NAME = 'Medialaan'
  4724. _VALID_URL = '(?x)\n https?://\n (?:\n (?:embed\\.)?mychannels.video/embed/|\n embed\\.mychannels\\.video/(?:s(?:dk|cript)/)?production/|\n (?:www\\.)?(?:\n (?:\n 7sur7|\n demorgen|\n hln|\n joe|\n qmusic\n )\\.be|\n (?:\n [abe]d|\n bndestem|\n destentor|\n gelderlander|\n pzc|\n tubantia|\n volkskrant\n )\\.nl\n )/video/(?:[^/]+/)*[^/?&#]+~p\n )\n (?P<id>\\d+)\n '
  4725. _RETURN_TYPE = 'video'
  4726. class ThePlatformBaseIE(OnceIE):
  4727. _module = 'yt_dlp.extractor.theplatform'
  4728. IE_NAME = 'ThePlatformBase'
  4729. _VALID_URL = 'https?://.+?\\.unicornmedia\\.com/now/(?:ads/vmap/)?[^/]+/[^/]+/(?P<domain_id>[^/]+)/(?P<application_id>[^/]+)/(?:[^/]+/)?(?P<media_item_id>[^/]+)/content\\.(?:once|m3u8|mp4)'
  4730. class MediasetIE(ThePlatformBaseIE):
  4731. _module = 'yt_dlp.extractor.mediaset'
  4732. IE_NAME = 'Mediaset'
  4733. _VALID_URL = '(?x)\n (?:\n mediaset:|\n https?://\n (?:\\w+\\.)+mediaset\\.it/\n (?:\n (?:video|on-demand|movie)/(?:[^/]+/)+[^/]+_|\n player/(?:v\\d+/)?index\\.html\\?\\S*?\\bprogramGuid=\n )\n )(?P<id>F[0-9A-Z]{15})\n '
  4734. _RETURN_TYPE = 'video'
  4735. class MediasetShowIE(MediasetIE):
  4736. _module = 'yt_dlp.extractor.mediaset'
  4737. IE_NAME = 'MediasetShow'
  4738. _VALID_URL = '(?x)\n (?:\n https?://\n (\\w+\\.)+mediaset\\.it/\n (?:\n (?:fiction|programmi-tv|serie-tv|kids)/(?:.+?/)?\n (?:[a-z-]+)_SE(?P<id>\\d{12})\n (?:,ST(?P<st>\\d{12}))?\n (?:,sb(?P<sb>\\d{9}))?$\n )\n )\n '
  4739. _RETURN_TYPE = 'playlist'
  4740. class MediasiteCatalogIE(LazyLoadExtractor):
  4741. _module = 'yt_dlp.extractor.mediasite'
  4742. IE_NAME = 'MediasiteCatalog'
  4743. _VALID_URL = '(?xi)\n (?P<url>https?://[^/]+/Mediasite)\n /Catalog/Full/\n (?P<catalog_id>(?:[0-9a-f]{32,34}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12,14}))\n (?:\n /(?P<current_folder_id>(?:[0-9a-f]{32,34}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12,14}))\n /(?P<root_dynamic_folder_id>(?:[0-9a-f]{32,34}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12,14}))\n )?\n '
  4744. _RETURN_TYPE = 'playlist'
  4745. class MediasiteIE(LazyLoadExtractor):
  4746. _module = 'yt_dlp.extractor.mediasite'
  4747. IE_NAME = 'Mediasite'
  4748. _VALID_URL = '(?xi)https?://[^/]+/Mediasite/(?:Play|Showcase/[^/#?]+/Presentation)/(?P<id>(?:[0-9a-f]{32,34}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12,14}))(?P<query>\\?[^#]+|)'
  4749. _RETURN_TYPE = 'video'
  4750. class MediasiteNamedCatalogIE(LazyLoadExtractor):
  4751. _module = 'yt_dlp.extractor.mediasite'
  4752. IE_NAME = 'MediasiteNamedCatalog'
  4753. _VALID_URL = '(?xi)(?P<url>https?://[^/]+/Mediasite)/Catalog/catalogs/(?P<catalog_name>[^/?#&]+)'
  4754. class MediaStreamBaseIE(LazyLoadExtractor):
  4755. _module = 'yt_dlp.extractor.mediastream'
  4756. IE_NAME = 'MediaStreamBase'
  4757. class MediaStreamIE(MediaStreamBaseIE):
  4758. _module = 'yt_dlp.extractor.mediastream'
  4759. IE_NAME = 'MediaStream'
  4760. _VALID_URL = 'https?://mdstrm\\.com/(?:embed|live-stream)/(?P<id>\\w+)'
  4761. _RETURN_TYPE = 'video'
  4762. class WinSportsVideoIE(MediaStreamBaseIE):
  4763. _module = 'yt_dlp.extractor.mediastream'
  4764. IE_NAME = 'WinSportsVideo'
  4765. _VALID_URL = 'https?://www\\.winsports\\.co/videos/(?P<id>[\\w-]+)'
  4766. _RETURN_TYPE = 'video'
  4767. class MediaWorksNZVODIE(LazyLoadExtractor):
  4768. _module = 'yt_dlp.extractor.mediaworksnz'
  4769. IE_NAME = 'MediaWorksNZVOD'
  4770. _VALID_URL = 'https?://vodupload-api\\.mediaworks\\.nz/library/asset/published/(?P<id>[A-Za-z0-9-]+)'
  4771. _RETURN_TYPE = 'video'
  4772. class MediciIE(LazyLoadExtractor):
  4773. _module = 'yt_dlp.extractor.medici'
  4774. IE_NAME = 'Medici'
  4775. _VALID_URL = 'https?://(?:(?P<sub>www|edu)\\.)?medici\\.tv/[a-z]{2}/[\\w.-]+/(?P<id>[^/?#&]+)'
  4776. _RETURN_TYPE = 'video'
  4777. class MegaphoneIE(LazyLoadExtractor):
  4778. _module = 'yt_dlp.extractor.megaphone'
  4779. IE_NAME = 'megaphone.fm'
  4780. _VALID_URL = 'https?://player\\.megaphone\\.fm/(?P<id>[A-Z0-9]+)'
  4781. IE_DESC = 'megaphone.fm embedded players'
  4782. _RETURN_TYPE = 'video'
  4783. class MegaTVComBaseIE(LazyLoadExtractor):
  4784. _module = 'yt_dlp.extractor.megatvcom'
  4785. IE_NAME = 'MegaTVComBase'
  4786. class MegaTVComEmbedIE(MegaTVComBaseIE):
  4787. _module = 'yt_dlp.extractor.megatvcom'
  4788. IE_NAME = 'megatvcom:embed'
  4789. _VALID_URL = '(?:https?:)?//(?:www\\.)?megatv\\.com/embed/?\\?p=(?P<id>\\d+)'
  4790. IE_DESC = 'megatv.com embedded videos'
  4791. _RETURN_TYPE = 'video'
  4792. class MegaTVComIE(MegaTVComBaseIE):
  4793. _module = 'yt_dlp.extractor.megatvcom'
  4794. IE_NAME = 'megatvcom'
  4795. _VALID_URL = 'https?://(?:www\\.)?megatv\\.com/(?:\\d{4}/\\d{2}/\\d{2}|[^/]+/(?P<id>\\d+))/(?P<slug>[^/]+)'
  4796. IE_DESC = 'megatv.com videos'
  4797. _RETURN_TYPE = 'video'
  4798. class MeipaiIE(LazyLoadExtractor):
  4799. _module = 'yt_dlp.extractor.meipai'
  4800. IE_NAME = 'Meipai'
  4801. _VALID_URL = 'https?://(?:www\\.)?meipai\\.com/media/(?P<id>[0-9]+)'
  4802. IE_DESC = '美拍'
  4803. _RETURN_TYPE = 'video'
  4804. class MelonVODIE(LazyLoadExtractor):
  4805. _module = 'yt_dlp.extractor.melonvod'
  4806. IE_NAME = 'MelonVOD'
  4807. _VALID_URL = 'https?://vod\\.melon\\.com/video/detail2\\.html?\\?.*?mvId=(?P<id>[0-9]+)'
  4808. _RETURN_TYPE = 'video'
  4809. class MetacriticIE(LazyLoadExtractor):
  4810. _module = 'yt_dlp.extractor.metacritic'
  4811. IE_NAME = 'Metacritic'
  4812. _VALID_URL = 'https?://(?:www\\.)?metacritic\\.com/.+?/trailers/(?P<id>\\d+)'
  4813. _RETURN_TYPE = 'video'
  4814. class MGTVIE(LazyLoadExtractor):
  4815. _module = 'yt_dlp.extractor.mgtv'
  4816. IE_NAME = 'MangoTV'
  4817. _VALID_URL = 'https?://(?:w(?:ww)?\\.)?mgtv\\.com/[bv]/(?:[^/]+/)*(?P<id>\\d+)\\.html'
  4818. IE_DESC = '芒果TV'
  4819. _RETURN_TYPE = 'video'
  4820. class MicrosoftBuildIE(LazyLoadExtractor):
  4821. _module = 'yt_dlp.extractor.microsoftembed'
  4822. IE_NAME = 'MicrosoftBuild'
  4823. _VALID_URL = ['https?://build\\.microsoft\\.com/[\\w-]+/sessions/(?P<id>[\\da-f-]+)', 'https?://build\\.microsoft\\.com/[\\w-]+/(?P<id>sessions)/?(?:[?#]|$)']
  4824. _RETURN_TYPE = 'any'
  4825. class MicrosoftEmbedIE(LazyLoadExtractor):
  4826. _module = 'yt_dlp.extractor.microsoftembed'
  4827. IE_NAME = 'MicrosoftEmbed'
  4828. _VALID_URL = 'https?://(?:www\\.)?microsoft\\.com/(?:[^/]+/)?videoplayer/embed/(?P<id>[a-z0-9A-Z]+)'
  4829. _RETURN_TYPE = 'video'
  4830. class MicrosoftMediusBaseIE(LazyLoadExtractor):
  4831. _module = 'yt_dlp.extractor.microsoftembed'
  4832. IE_NAME = 'MicrosoftMediusBase'
  4833. class MicrosoftLearnEpisodeIE(MicrosoftMediusBaseIE):
  4834. _module = 'yt_dlp.extractor.microsoftembed'
  4835. IE_NAME = 'MicrosoftLearnEpisode'
  4836. _VALID_URL = 'https?://learn\\.microsoft\\.com/(?:[\\w-]+/)?shows/[\\w-]+/(?P<id>[^?#/]+)'
  4837. _RETURN_TYPE = 'video'
  4838. class MicrosoftLearnPlaylistIE(LazyLoadExtractor):
  4839. _module = 'yt_dlp.extractor.microsoftembed'
  4840. IE_NAME = 'MicrosoftLearnPlaylist'
  4841. _VALID_URL = 'https?://learn\\.microsoft\\.com/(?:[\\w-]+/)?(?P<type>shows|events)/(?P<id>[\\w-]+)/?(?:[?#]|$)'
  4842. _RETURN_TYPE = 'playlist'
  4843. class MicrosoftLearnSessionIE(LazyLoadExtractor):
  4844. _module = 'yt_dlp.extractor.microsoftembed'
  4845. IE_NAME = 'MicrosoftLearnSession'
  4846. _VALID_URL = 'https?://learn\\.microsoft\\.com/(?:[\\w-]+/)?events/[\\w-]+/(?P<id>[^?#/]+)'
  4847. _RETURN_TYPE = 'video'
  4848. class MicrosoftMediusIE(MicrosoftMediusBaseIE):
  4849. _module = 'yt_dlp.extractor.microsoftembed'
  4850. IE_NAME = 'MicrosoftMedius'
  4851. _VALID_URL = 'https?://medius\\.microsoft\\.com/Embed/(?:Video\\?id=|video-nc/|VideoDetails/)(?P<id>[\\da-f-]+)'
  4852. _RETURN_TYPE = 'video'
  4853. class MicrosoftStreamIE(LazyLoadExtractor):
  4854. _module = 'yt_dlp.extractor.microsoftstream'
  4855. IE_NAME = 'microsoftstream'
  4856. _VALID_URL = 'https?://(?:web|www|msit)\\.microsoftstream\\.com/video/(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  4857. IE_DESC = 'Microsoft Stream'
  4858. class MindsBaseIE(LazyLoadExtractor):
  4859. _module = 'yt_dlp.extractor.minds'
  4860. IE_NAME = 'MindsBase'
  4861. class MindsFeedBaseIE(MindsBaseIE):
  4862. _module = 'yt_dlp.extractor.minds'
  4863. IE_NAME = 'MindsFeedBase'
  4864. class MindsChannelIE(MindsFeedBaseIE):
  4865. _module = 'yt_dlp.extractor.minds'
  4866. IE_NAME = 'minds:channel'
  4867. _VALID_URL = 'https?://(?:www\\.)?minds\\.com/(?!(?:newsfeed|media|api|archive|groups)/)(?P<id>[^/?&#]+)'
  4868. _RETURN_TYPE = 'playlist'
  4869. class MindsGroupIE(MindsFeedBaseIE):
  4870. _module = 'yt_dlp.extractor.minds'
  4871. IE_NAME = 'minds:group'
  4872. _VALID_URL = 'https?://(?:www\\.)?minds\\.com/groups/profile/(?P<id>[0-9]+)'
  4873. _RETURN_TYPE = 'playlist'
  4874. class MindsIE(MindsBaseIE):
  4875. _module = 'yt_dlp.extractor.minds'
  4876. IE_NAME = 'minds'
  4877. _VALID_URL = 'https?://(?:www\\.)?minds\\.com/(?:media|newsfeed|archive/view)/(?P<id>[0-9]+)'
  4878. _RETURN_TYPE = 'video'
  4879. class MinotoIE(LazyLoadExtractor):
  4880. _module = 'yt_dlp.extractor.minoto'
  4881. IE_NAME = 'Minoto'
  4882. _VALID_URL = '(?:minoto:|https?://(?:play|iframe|embed)\\.minoto-video\\.com/(?P<player_id>[0-9]+)/)(?P<id>[a-zA-Z0-9]+)'
  4883. class MirrativBaseIE(LazyLoadExtractor):
  4884. _module = 'yt_dlp.extractor.mirrativ'
  4885. IE_NAME = 'MirrativBase'
  4886. class MirrativIE(MirrativBaseIE):
  4887. _module = 'yt_dlp.extractor.mirrativ'
  4888. IE_NAME = 'mirrativ'
  4889. _VALID_URL = 'https?://(?:www\\.)?mirrativ\\.com/live/(?P<id>[^/?#&]+)'
  4890. class MirrativUserIE(MirrativBaseIE):
  4891. _module = 'yt_dlp.extractor.mirrativ'
  4892. IE_NAME = 'mirrativ:user'
  4893. _VALID_URL = 'https?://(?:www\\.)?mirrativ\\.com/user/(?P<id>\\d+)'
  4894. class MirrorCoUKIE(LazyLoadExtractor):
  4895. _module = 'yt_dlp.extractor.mirrorcouk'
  4896. IE_NAME = 'MirrorCoUK'
  4897. _VALID_URL = 'https?://(?:www\\.)?mirror\\.co\\.uk/[/+[\\w-]+-(?P<id>\\d+)'
  4898. _RETURN_TYPE = 'video'
  4899. class OCWMITIE(LazyLoadExtractor):
  4900. _module = 'yt_dlp.extractor.mit'
  4901. IE_NAME = 'ocw.mit.edu'
  4902. _VALID_URL = 'https?://ocw\\.mit\\.edu/courses/(?P<topic>[a-z0-9\\-]+)'
  4903. _RETURN_TYPE = 'video'
  4904. class TechTVMITIE(LazyLoadExtractor):
  4905. _module = 'yt_dlp.extractor.mit'
  4906. IE_NAME = 'techtv.mit.edu'
  4907. _VALID_URL = 'https?://techtv\\.mit\\.edu/(?:videos|embeds)/(?P<id>\\d+)'
  4908. _RETURN_TYPE = 'video'
  4909. class TelecincoBaseIE(LazyLoadExtractor):
  4910. _module = 'yt_dlp.extractor.telecinco'
  4911. IE_NAME = 'TelecincoBase'
  4912. class MiTeleIE(TelecincoBaseIE):
  4913. _module = 'yt_dlp.extractor.mitele'
  4914. IE_NAME = 'MiTele'
  4915. _VALID_URL = 'https?://(?:www\\.)?mitele\\.es/(?:[^/]+/)+(?P<id>[^/]+)/player'
  4916. IE_DESC = 'mitele.es'
  4917. age_limit = 16
  4918. _RETURN_TYPE = 'video'
  4919. class MixchArchiveIE(LazyLoadExtractor):
  4920. _module = 'yt_dlp.extractor.mixch'
  4921. IE_NAME = 'mixch:archive'
  4922. _VALID_URL = 'https?://mixch\\.tv/archive/(?P<id>\\d+)'
  4923. _RETURN_TYPE = 'video'
  4924. class MixchIE(LazyLoadExtractor):
  4925. _module = 'yt_dlp.extractor.mixch'
  4926. IE_NAME = 'mixch'
  4927. _VALID_URL = 'https?://mixch\\.tv/u/(?P<id>\\d+)'
  4928. _RETURN_TYPE = 'video'
  4929. class MixchMovieIE(LazyLoadExtractor):
  4930. _module = 'yt_dlp.extractor.mixch'
  4931. IE_NAME = 'mixch:movie'
  4932. _VALID_URL = 'https?://mixch\\.tv/m/(?P<id>\\w+)'
  4933. _RETURN_TYPE = 'video'
  4934. class MixcloudBaseIE(LazyLoadExtractor):
  4935. _module = 'yt_dlp.extractor.mixcloud'
  4936. IE_NAME = 'MixcloudBase'
  4937. class MixcloudIE(MixcloudBaseIE):
  4938. _module = 'yt_dlp.extractor.mixcloud'
  4939. IE_NAME = 'mixcloud'
  4940. _VALID_URL = 'https?://(?:(?:www|beta|m)\\.)?mixcloud\\.com/([^/]+)/(?!stream|uploads|favorites|listens|playlists)([^/]+)'
  4941. _RETURN_TYPE = 'video'
  4942. class MixcloudPlaylistBaseIE(MixcloudBaseIE):
  4943. _module = 'yt_dlp.extractor.mixcloud'
  4944. IE_NAME = 'MixcloudPlaylistBase'
  4945. class MixcloudPlaylistIE(MixcloudPlaylistBaseIE):
  4946. _module = 'yt_dlp.extractor.mixcloud'
  4947. IE_NAME = 'mixcloud:playlist'
  4948. _VALID_URL = 'https?://(?:www\\.)?mixcloud\\.com/(?P<user>[^/]+)/playlists/(?P<playlist>[^/]+)/?$'
  4949. _RETURN_TYPE = 'playlist'
  4950. class MixcloudUserIE(MixcloudPlaylistBaseIE):
  4951. _module = 'yt_dlp.extractor.mixcloud'
  4952. IE_NAME = 'mixcloud:user'
  4953. _VALID_URL = 'https?://(?:www\\.)?mixcloud\\.com/(?P<id>[^/]+)/(?P<type>uploads|favorites|listens|stream)?/?$'
  4954. _RETURN_TYPE = 'playlist'
  4955. class MLBBaseIE(LazyLoadExtractor):
  4956. _module = 'yt_dlp.extractor.mlb'
  4957. IE_NAME = 'MLBBase'
  4958. class MLBIE(MLBBaseIE):
  4959. _module = 'yt_dlp.extractor.mlb'
  4960. IE_NAME = 'MLB'
  4961. _VALID_URL = '(?x)\n https?://\n (?:[\\da-z_-]+\\.)*mlb\\.com/\n (?:\n (?:\n (?:[^/]+/)*video/[^/]+/c-|\n (?:\n shared/video/embed/(?:embed|m-internal-embed)\\.html|\n (?:[^/]+/)+(?:play|index)\\.jsp|\n )\\?.*?\\bcontent_id=\n )\n (?P<id>\\d+)\n )\n '
  4962. _RETURN_TYPE = 'video'
  4963. class MLBTVIE(LazyLoadExtractor):
  4964. _module = 'yt_dlp.extractor.mlb'
  4965. IE_NAME = 'MLBTV'
  4966. _VALID_URL = 'https?://(?:www\\.)?mlb\\.com/tv/g(?P<id>\\d{6})'
  4967. _NETRC_MACHINE = 'mlb'
  4968. _RETURN_TYPE = 'video'
  4969. class MLBArticleIE(LazyLoadExtractor):
  4970. _module = 'yt_dlp.extractor.mlb'
  4971. IE_NAME = 'MLBArticle'
  4972. _VALID_URL = 'https?://www\\.mlb\\.com/news/(?P<id>[\\w-]+)'
  4973. _RETURN_TYPE = 'playlist'
  4974. class MLBVideoIE(MLBBaseIE):
  4975. _module = 'yt_dlp.extractor.mlb'
  4976. IE_NAME = 'MLBVideo'
  4977. _VALID_URL = 'https?://(?:www\\.)?mlb\\.com/(?:[^/]+/)*video/(?P<id>[^/?&#]+)'
  4978. _RETURN_TYPE = 'video'
  4979. @classmethod
  4980. def suitable(cls, url):
  4981. return False if MLBIE.suitable(url) else super().suitable(url)
  4982. class MLSSoccerIE(LazyLoadExtractor):
  4983. _module = 'yt_dlp.extractor.mlssoccer'
  4984. IE_NAME = 'MLSSoccer'
  4985. _VALID_URL = 'https?://(?:www\\.)?(?:(?:cfmontreal|intermiamicf|lagalaxy|lafc|houstondynamofc|dcunited|atlutd|mlssoccer|fcdallas|columbuscrew|coloradorapids|fccincinnati|chicagofirefc|austinfc|nashvillesc|whitecapsfc|sportingkc|soundersfc|sjearthquakes|rsl|timbers|philadelphiaunion|orlandocitysc|newyorkredbulls|nycfc)\\.com|(?:torontofc)\\.ca|(?:revolutionsoccer)\\.net)/video/#?(?P<id>[^/&$#?]+)'
  4986. _RETURN_TYPE = 'video'
  4987. class MochaVideoIE(LazyLoadExtractor):
  4988. _module = 'yt_dlp.extractor.mocha'
  4989. IE_NAME = 'MochaVideo'
  4990. _VALID_URL = 'https?://video\\.mocha\\.com\\.vn/(?P<video_slug>[\\w-]+)'
  4991. _RETURN_TYPE = 'video'
  4992. class MojevideoIE(LazyLoadExtractor):
  4993. _module = 'yt_dlp.extractor.mojevideo'
  4994. IE_NAME = 'Mojevideo'
  4995. _VALID_URL = 'https?://(?:www\\.)?mojevideo\\.sk/video/(?P<id>\\w+)/(?P<display_id>[\\w()]+?)\\.html'
  4996. IE_DESC = 'mojevideo.sk'
  4997. _RETURN_TYPE = 'video'
  4998. class MojvideoIE(LazyLoadExtractor):
  4999. _module = 'yt_dlp.extractor.mojvideo'
  5000. IE_NAME = 'Mojvideo'
  5001. _VALID_URL = 'https?://(?:www\\.)?mojvideo\\.com/video-(?P<display_id>[^/]+)/(?P<id>[a-f0-9]+)'
  5002. _RETURN_TYPE = 'video'
  5003. class MonstercatIE(LazyLoadExtractor):
  5004. _module = 'yt_dlp.extractor.monstercat'
  5005. IE_NAME = 'Monstercat'
  5006. _VALID_URL = 'https?://www\\.monstercat\\.com/release/(?P<id>\\d+)'
  5007. _RETURN_TYPE = 'playlist'
  5008. class MotherlessPaginatedIE(LazyLoadExtractor):
  5009. _module = 'yt_dlp.extractor.motherless'
  5010. IE_NAME = 'MotherlessPaginated'
  5011. class MotherlessGalleryIE(MotherlessPaginatedIE):
  5012. _module = 'yt_dlp.extractor.motherless'
  5013. IE_NAME = 'MotherlessGallery'
  5014. _VALID_URL = 'https?://(?:www\\.)?motherless\\.com/G[VIG]?(?P<id>[A-F0-9]+)/?(?:$|[#?])'
  5015. _RETURN_TYPE = 'playlist'
  5016. class MotherlessGroupIE(MotherlessPaginatedIE):
  5017. _module = 'yt_dlp.extractor.motherless'
  5018. IE_NAME = 'MotherlessGroup'
  5019. _VALID_URL = 'https?://(?:www\\.)?motherless\\.com/g[vifm]?/(?P<id>[a-z0-9_]+)/?(?:$|[#?])'
  5020. _RETURN_TYPE = 'playlist'
  5021. class MotherlessIE(LazyLoadExtractor):
  5022. _module = 'yt_dlp.extractor.motherless'
  5023. IE_NAME = 'Motherless'
  5024. _VALID_URL = 'https?://(?:www\\.)?motherless\\.com/(?:g/[a-z0-9_]+/|G[VIG]?[A-F0-9]+/)?(?P<id>[A-F0-9]+)'
  5025. age_limit = 18
  5026. _RETURN_TYPE = 'video'
  5027. class MotherlessUploaderIE(MotherlessPaginatedIE):
  5028. _module = 'yt_dlp.extractor.motherless'
  5029. IE_NAME = 'MotherlessUploader'
  5030. _VALID_URL = 'https?://(?:www\\.)?motherless\\.com/u/(?P<id>\\w+)/?(?:$|[?#])'
  5031. _RETURN_TYPE = 'playlist'
  5032. class MotorsportIE(LazyLoadExtractor):
  5033. _module = 'yt_dlp.extractor.motorsport'
  5034. IE_NAME = 'Motorsport'
  5035. _VALID_URL = 'https?://(?:www\\.)?motorsport\\.com/[^/?#]+/video/(?:[^/?#]+/)(?P<id>[^/]+)/?(?:$|[?#])'
  5036. _WORKING = False
  5037. IE_DESC = 'motorsport.com'
  5038. _RETURN_TYPE = 'video'
  5039. class MoviepilotIE(LazyLoadExtractor):
  5040. _module = 'yt_dlp.extractor.moviepilot'
  5041. IE_NAME = 'Moviepilot'
  5042. _VALID_URL = 'https?://(?:www\\.)?moviepilot\\.de/movies/(?P<id>[^/]+)'
  5043. _RETURN_TYPE = 'video'
  5044. class MoviewPlayIE(JixieBaseIE):
  5045. _module = 'yt_dlp.extractor.moview'
  5046. IE_NAME = 'MoviewPlay'
  5047. _VALID_URL = 'https?://www\\.moview\\.id/play/\\d+/(?P<id>[\\w-]+)'
  5048. _RETURN_TYPE = 'video'
  5049. class MoviezineIE(LazyLoadExtractor):
  5050. _module = 'yt_dlp.extractor.moviezine'
  5051. IE_NAME = 'Moviezine'
  5052. _VALID_URL = 'https?://(?:www\\.)?moviezine\\.se/video/(?P<id>[^?#]+)'
  5053. _RETURN_TYPE = 'video'
  5054. class MovingImageIE(LazyLoadExtractor):
  5055. _module = 'yt_dlp.extractor.movingimage'
  5056. IE_NAME = 'MovingImage'
  5057. _VALID_URL = 'https?://movingimage\\.nls\\.uk/film/(?P<id>\\d+)'
  5058. _RETURN_TYPE = 'video'
  5059. class MSNIE(LazyLoadExtractor):
  5060. _module = 'yt_dlp.extractor.msn'
  5061. IE_NAME = 'MSN'
  5062. _VALID_URL = 'https?://(?:(?:www|preview)\\.)?msn\\.com/(?:[^/]+/)+(?P<display_id>[^/]+)/[a-z]{2}-(?P<id>[\\da-zA-Z]+)'
  5063. _WORKING = False
  5064. _RETURN_TYPE = 'any'
  5065. class MTVDEIE(MTVServicesInfoExtractor):
  5066. _module = 'yt_dlp.extractor.mtv'
  5067. IE_NAME = 'mtv.de'
  5068. _VALID_URL = 'https?://(?:www\\.)?mtv\\.de/(?:musik/videoclips|folgen|news)/(?P<id>[0-9a-z]+)'
  5069. _WORKING = False
  5070. _RETURN_TYPE = 'video'
  5071. class MTVIE(MTVServicesInfoExtractor):
  5072. _module = 'yt_dlp.extractor.mtv'
  5073. IE_NAME = 'mtv'
  5074. _VALID_URL = 'https?://(?:www\\.)?mtv\\.com/(?:video-clips|(?:full-)?episodes)/(?P<id>[^/?#.]+)'
  5075. _RETURN_TYPE = 'video'
  5076. class CMTIE(MTVIE):
  5077. _module = 'yt_dlp.extractor.cmt'
  5078. IE_NAME = 'cmt.com'
  5079. _VALID_URL = 'https?://(?:www\\.)?cmt\\.com/(?:videos|shows|(?:full-)?episodes|video-clips)/(?P<id>[^/]+)'
  5080. _WORKING = False
  5081. _RETURN_TYPE = 'video'
  5082. class MTVItaliaIE(MTVServicesInfoExtractor):
  5083. _module = 'yt_dlp.extractor.mtv'
  5084. IE_NAME = 'mtv.it'
  5085. _VALID_URL = 'https?://(?:www\\.)?mtv\\.it/(?:episodi|video|musica)/(?P<id>[0-9a-z]+)'
  5086. _RETURN_TYPE = 'video'
  5087. class MTVItaliaProgrammaIE(MTVItaliaIE):
  5088. _module = 'yt_dlp.extractor.mtv'
  5089. IE_NAME = 'mtv.it:programma'
  5090. _VALID_URL = 'https?://(?:www\\.)?mtv\\.it/(?:programmi|playlist)/(?P<id>[0-9a-z]+)'
  5091. _RETURN_TYPE = 'playlist'
  5092. class MTVJapanIE(MTVServicesInfoExtractor):
  5093. _module = 'yt_dlp.extractor.mtv'
  5094. IE_NAME = 'mtvjapan'
  5095. _VALID_URL = 'https?://(?:www\\.)?mtvjapan\\.com/videos/(?P<id>[0-9a-z]+)'
  5096. _RETURN_TYPE = 'video'
  5097. class MTVServicesEmbeddedIE(MTVServicesInfoExtractor):
  5098. _module = 'yt_dlp.extractor.mtv'
  5099. IE_NAME = 'mtvservices:embedded'
  5100. _VALID_URL = 'https?://media\\.mtvnservices\\.com/embed/(?P<mgid>.+?)(\\?|/|$)'
  5101. _RETURN_TYPE = 'video'
  5102. class MTVVideoIE(MTVServicesInfoExtractor):
  5103. _module = 'yt_dlp.extractor.mtv'
  5104. IE_NAME = 'mtv:video'
  5105. _VALID_URL = '(?x)^https?://\n (?:(?:www\\.)?mtv\\.com/videos/.+?/(?P<videoid>[0-9]+)/[^/]+$|\n m\\.mtv\\.com/videos/video\\.rbml\\?.*?id=(?P<mgid>[^&]+))'
  5106. _RETURN_TYPE = 'video'
  5107. class MuenchenTVIE(LazyLoadExtractor):
  5108. _module = 'yt_dlp.extractor.muenchentv'
  5109. IE_NAME = 'MuenchenTV'
  5110. _VALID_URL = 'https?://(?:www\\.)?muenchen\\.tv/livestream'
  5111. _WORKING = False
  5112. IE_DESC = 'münchen.tv'
  5113. _RETURN_TYPE = 'video'
  5114. class MurrtubeIE(LazyLoadExtractor):
  5115. _module = 'yt_dlp.extractor.murrtube'
  5116. IE_NAME = 'Murrtube'
  5117. _VALID_URL = '(?x)\n (?:\n murrtube:|\n https?://murrtube\\.net/(?:v/|videos/(?P<slug>[a-z0-9-]+?)-)\n )\n (?P<id>[A-Z0-9]{4}|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})\n '
  5118. age_limit = 18
  5119. _RETURN_TYPE = 'video'
  5120. class MurrtubeUserIE(LazyLoadExtractor):
  5121. _module = 'yt_dlp.extractor.murrtube'
  5122. IE_NAME = 'MurrtubeUser'
  5123. _VALID_URL = 'https?://murrtube\\.net/(?P<id>[^/]+)$'
  5124. _WORKING = False
  5125. IE_DESC = 'Murrtube user profile'
  5126. _RETURN_TYPE = 'playlist'
  5127. class MuseAIIE(LazyLoadExtractor):
  5128. _module = 'yt_dlp.extractor.museai'
  5129. IE_NAME = 'MuseAI'
  5130. _VALID_URL = 'https?://(?:www\\.)?muse\\.ai/(?:v|embed)/(?P<id>\\w+)'
  5131. _RETURN_TYPE = 'video'
  5132. class MuseScoreIE(LazyLoadExtractor):
  5133. _module = 'yt_dlp.extractor.musescore'
  5134. IE_NAME = 'MuseScore'
  5135. _VALID_URL = 'https?://(?:www\\.)?musescore\\.com/(?:user/\\d+|[^/]+)(?:/scores)?/(?P<id>[^#&?]+)'
  5136. _RETURN_TYPE = 'video'
  5137. class MusicdexBaseIE(LazyLoadExtractor):
  5138. _module = 'yt_dlp.extractor.musicdex'
  5139. IE_NAME = 'MusicdexBase'
  5140. class MusicdexAlbumIE(MusicdexBaseIE):
  5141. _module = 'yt_dlp.extractor.musicdex'
  5142. IE_NAME = 'MusicdexAlbum'
  5143. _VALID_URL = 'https?://(?:www\\.)?musicdex\\.org/album/(?P<id>\\d+)'
  5144. _RETURN_TYPE = 'playlist'
  5145. class MusicdexPageIE(MusicdexBaseIE):
  5146. _module = 'yt_dlp.extractor.musicdex'
  5147. IE_NAME = 'MusicdexPage'
  5148. class MusicdexArtistIE(MusicdexPageIE):
  5149. _module = 'yt_dlp.extractor.musicdex'
  5150. IE_NAME = 'MusicdexArtist'
  5151. _VALID_URL = 'https?://(?:www\\.)?musicdex\\.org/artist/(?P<id>\\d+)'
  5152. _RETURN_TYPE = 'playlist'
  5153. class MusicdexPlaylistIE(MusicdexPageIE):
  5154. _module = 'yt_dlp.extractor.musicdex'
  5155. IE_NAME = 'MusicdexPlaylist'
  5156. _VALID_URL = 'https?://(?:www\\.)?musicdex\\.org/playlist/(?P<id>\\d+)'
  5157. _RETURN_TYPE = 'playlist'
  5158. class MusicdexSongIE(MusicdexBaseIE):
  5159. _module = 'yt_dlp.extractor.musicdex'
  5160. IE_NAME = 'MusicdexSong'
  5161. _VALID_URL = 'https?://(?:www\\.)?musicdex\\.org/track/(?P<id>\\d+)'
  5162. _RETURN_TYPE = 'video'
  5163. class Mx3BaseIE(LazyLoadExtractor):
  5164. _module = 'yt_dlp.extractor.mx3'
  5165. IE_NAME = 'Mx3Base'
  5166. class Mx3IE(Mx3BaseIE):
  5167. _module = 'yt_dlp.extractor.mx3'
  5168. IE_NAME = 'Mx3'
  5169. _VALID_URL = 'https?://(?:www\\.)?mx3\\.ch/t/(?P<id>\\w+)'
  5170. _RETURN_TYPE = 'video'
  5171. class Mx3NeoIE(Mx3BaseIE):
  5172. _module = 'yt_dlp.extractor.mx3'
  5173. IE_NAME = 'Mx3Neo'
  5174. _VALID_URL = 'https?://(?:www\\.)?neo\\.mx3\\.ch/t/(?P<id>\\w+)'
  5175. _RETURN_TYPE = 'video'
  5176. class Mx3VolksmusikIE(Mx3BaseIE):
  5177. _module = 'yt_dlp.extractor.mx3'
  5178. IE_NAME = 'Mx3Volksmusik'
  5179. _VALID_URL = 'https?://(?:www\\.)?volksmusik\\.mx3\\.ch/t/(?P<id>\\w+)'
  5180. _RETURN_TYPE = 'video'
  5181. class MxplayerIE(LazyLoadExtractor):
  5182. _module = 'yt_dlp.extractor.mxplayer'
  5183. IE_NAME = 'Mxplayer'
  5184. _VALID_URL = 'https?://(?:www\\.)?mxplayer\\.in/(?P<type>movie|show/[-\\w]+/[-\\w]+)/(?P<display_id>[-\\w]+)-(?P<id>\\w+)'
  5185. _RETURN_TYPE = 'video'
  5186. class MxplayerShowIE(LazyLoadExtractor):
  5187. _module = 'yt_dlp.extractor.mxplayer'
  5188. IE_NAME = 'MxplayerShow'
  5189. _VALID_URL = 'https?://(?:www\\.)?mxplayer\\.in/show/(?P<display_id>[-\\w]+)-(?P<id>\\w+)/?(?:$|[#?])'
  5190. _RETURN_TYPE = 'playlist'
  5191. class MySpaceAlbumIE(LazyLoadExtractor):
  5192. _module = 'yt_dlp.extractor.myspace'
  5193. IE_NAME = 'MySpace:album'
  5194. _VALID_URL = 'https?://myspace\\.com/([^/]+)/music/album/(?P<title>.*-)(?P<id>\\d+)'
  5195. _RETURN_TYPE = 'playlist'
  5196. class MySpaceIE(LazyLoadExtractor):
  5197. _module = 'yt_dlp.extractor.myspace'
  5198. IE_NAME = 'MySpace'
  5199. _VALID_URL = '(?x)\n https?://\n myspace\\.com/[^/]+/\n (?P<mediatype>\n video/[^/]+/(?P<video_id>\\d+)|\n music/song/[^/?#&]+-(?P<song_id>\\d+)-\\d+(?:[/?#&]|$)\n )\n '
  5200. _RETURN_TYPE = 'video'
  5201. class MySpassIE(LazyLoadExtractor):
  5202. _module = 'yt_dlp.extractor.myspass'
  5203. IE_NAME = 'MySpass'
  5204. _VALID_URL = 'https?://(?:www\\.)?myspass\\.de/(?:[^/]+/)*(?P<id>\\d+)/?[^/]*$'
  5205. _RETURN_TYPE = 'video'
  5206. class MyVideoGeIE(LazyLoadExtractor):
  5207. _module = 'yt_dlp.extractor.myvideoge'
  5208. IE_NAME = 'MyVideoGe'
  5209. _VALID_URL = 'https?://(?:www\\.)?myvideo\\.ge/v/(?P<id>[0-9]+)'
  5210. _RETURN_TYPE = 'video'
  5211. class MyVidsterIE(LazyLoadExtractor):
  5212. _module = 'yt_dlp.extractor.myvidster'
  5213. IE_NAME = 'MyVidster'
  5214. _VALID_URL = 'https?://(?:www\\.)?myvidster\\.com/video/(?P<id>\\d+)'
  5215. age_limit = 18
  5216. _RETURN_TYPE = 'video'
  5217. class MzaaloIE(LazyLoadExtractor):
  5218. _module = 'yt_dlp.extractor.mzaalo'
  5219. IE_NAME = 'Mzaalo'
  5220. _VALID_URL = '(?i)https?://(?:www\\.)?mzaalo\\.com/(?:play|watch)/(?P<type>movie|original|clip)/(?P<id>[a-f0-9-]+)/[\\w-]+'
  5221. age_limit = 13
  5222. _RETURN_TYPE = 'video'
  5223. class N1InfoAssetIE(LazyLoadExtractor):
  5224. _module = 'yt_dlp.extractor.n1'
  5225. IE_NAME = 'N1InfoAsset'
  5226. _VALID_URL = 'https?://best-vod\\.umn\\.cdn\\.united\\.cloud/stream\\?asset=(?P<id>[^&]+)'
  5227. _RETURN_TYPE = 'video'
  5228. class N1InfoIIE(LazyLoadExtractor):
  5229. _module = 'yt_dlp.extractor.n1'
  5230. IE_NAME = 'N1Info:article'
  5231. _VALID_URL = 'https?://(?:(?:\\w+\\.)?n1info\\.\\w+|nova\\.rs)/(?:[^/?#]+/){1,2}(?P<id>[^/?#]+)'
  5232. _RETURN_TYPE = 'video'
  5233. class NateIE(LazyLoadExtractor):
  5234. _module = 'yt_dlp.extractor.nate'
  5235. IE_NAME = 'Nate'
  5236. _VALID_URL = 'https?://tv\\.nate\\.com/clip/(?P<id>[0-9]+)'
  5237. age_limit = 15
  5238. _RETURN_TYPE = 'video'
  5239. class NateProgramIE(LazyLoadExtractor):
  5240. _module = 'yt_dlp.extractor.nate'
  5241. IE_NAME = 'NateProgram'
  5242. _VALID_URL = 'https?://tv\\.nate\\.com/program/clips/(?P<id>[0-9]+)'
  5243. _RETURN_TYPE = 'playlist'
  5244. class NationalGeographicTVIE(FOXIE):
  5245. _module = 'yt_dlp.extractor.nationalgeographic'
  5246. IE_NAME = 'NationalGeographicTV'
  5247. _VALID_URL = 'https?://(?:www\\.)?nationalgeographic\\.com/tv/watch/(?P<id>[\\da-fA-F]+)'
  5248. age_limit = 14
  5249. _RETURN_TYPE = 'video'
  5250. class NationalGeographicVideoIE(LazyLoadExtractor):
  5251. _module = 'yt_dlp.extractor.nationalgeographic'
  5252. IE_NAME = 'natgeo:video'
  5253. _VALID_URL = 'https?://video\\.nationalgeographic\\.com/.*?'
  5254. _RETURN_TYPE = 'video'
  5255. class NaverBaseIE(LazyLoadExtractor):
  5256. _module = 'yt_dlp.extractor.naver'
  5257. IE_NAME = 'NaverBase'
  5258. class NaverIE(NaverBaseIE):
  5259. _module = 'yt_dlp.extractor.naver'
  5260. IE_NAME = 'Naver'
  5261. _VALID_URL = 'https?://(?:m\\.)?tv(?:cast)?\\.naver\\.com/(?:v|embed)/(?P<id>\\d+)'
  5262. _RETURN_TYPE = 'video'
  5263. class NaverLiveIE(NaverBaseIE):
  5264. _module = 'yt_dlp.extractor.naver'
  5265. IE_NAME = 'Naver:live'
  5266. _VALID_URL = 'https?://(?:m\\.)?tv(?:cast)?\\.naver\\.com/l/(?P<id>\\d+)'
  5267. _RETURN_TYPE = 'video'
  5268. class NaverNowIE(NaverBaseIE):
  5269. _module = 'yt_dlp.extractor.naver'
  5270. IE_NAME = 'navernow'
  5271. _VALID_URL = 'https?://now\\.naver\\.com/s/now\\.(?P<id>\\w+)'
  5272. _RETURN_TYPE = 'any'
  5273. class NBACVPBaseIE(TurnerBaseIE):
  5274. _module = 'yt_dlp.extractor.nba'
  5275. IE_NAME = 'NBACVPBase'
  5276. class NBABaseIE(NBACVPBaseIE):
  5277. _module = 'yt_dlp.extractor.nba'
  5278. IE_NAME = 'NBABase'
  5279. class NBAIE(NBABaseIE):
  5280. _module = 'yt_dlp.extractor.nba'
  5281. IE_NAME = 'nba'
  5282. _VALID_URL = '(?x)\n https?://(?:www\\.)?nba\\.com/\n (?P<team>\n blazers|\n bucks|\n bulls|\n cavaliers|\n celtics|\n clippers|\n grizzlies|\n hawks|\n heat|\n hornets|\n jazz|\n kings|\n knicks|\n lakers|\n magic|\n mavericks|\n nets|\n nuggets|\n pacers|\n pelicans|\n pistons|\n raptors|\n rockets|\n sixers|\n spurs|\n suns|\n thunder|\n timberwolves|\n warriors|\n wizards\n )\n (?:/play\\#)?/(?!video/channel|series)video/(?P<id>(?:[^/]+/)*[^/?#&]+)'
  5283. _RETURN_TYPE = 'video'
  5284. class NBAChannelIE(NBABaseIE):
  5285. _module = 'yt_dlp.extractor.nba'
  5286. IE_NAME = 'nba:channel'
  5287. _VALID_URL = '(?x)\n https?://(?:www\\.)?nba\\.com/\n (?P<team>\n blazers|\n bucks|\n bulls|\n cavaliers|\n celtics|\n clippers|\n grizzlies|\n hawks|\n heat|\n hornets|\n jazz|\n kings|\n knicks|\n lakers|\n magic|\n mavericks|\n nets|\n nuggets|\n pacers|\n pelicans|\n pistons|\n raptors|\n rockets|\n sixers|\n spurs|\n suns|\n thunder|\n timberwolves|\n warriors|\n wizards\n )\n (?:/play\\#)?/(?:video/channel|series)/(?P<id>[^/?#&]+)'
  5288. _RETURN_TYPE = 'playlist'
  5289. class NBAEmbedIE(NBABaseIE):
  5290. _module = 'yt_dlp.extractor.nba'
  5291. IE_NAME = 'nba:embed'
  5292. _VALID_URL = 'https?://secure\\.nba\\.com/assets/amp/include/video/(?:topI|i)frame\\.html\\?.*?\\bcontentId=(?P<id>[^?#&]+)'
  5293. class NBAWatchBaseIE(NBACVPBaseIE):
  5294. _module = 'yt_dlp.extractor.nba'
  5295. IE_NAME = 'NBAWatchBase'
  5296. class NBAWatchCollectionIE(NBAWatchBaseIE):
  5297. _module = 'yt_dlp.extractor.nba'
  5298. IE_NAME = 'nba:watch:collection'
  5299. _VALID_URL = 'https?://(?:(?:www\\.)?nba\\.com(?:/watch)?|watch\\.nba\\.com)/list/collection/(?P<id>[^/?#&]+)'
  5300. _RETURN_TYPE = 'playlist'
  5301. class NBAWatchEmbedIE(NBAWatchBaseIE):
  5302. _module = 'yt_dlp.extractor.nba'
  5303. IE_NAME = 'nba:watch:embed'
  5304. _VALID_URL = 'https?://(?:(?:www\\.)?nba\\.com(?:/watch)?|watch\\.nba\\.com)/embed\\?.*?\\bid=(?P<id>\\d+)'
  5305. _RETURN_TYPE = 'video'
  5306. class NBAWatchIE(NBAWatchBaseIE):
  5307. _module = 'yt_dlp.extractor.nba'
  5308. IE_NAME = 'nba:watch'
  5309. _VALID_URL = 'https?://(?:(?:www\\.)?nba\\.com(?:/watch)?|watch\\.nba\\.com)/(?:nba/)?video/(?P<id>.+?(?=/index\\.html)|(?:[^/]+/)*[^/?#&]+)'
  5310. _RETURN_TYPE = 'video'
  5311. class NBCOlympicsIE(LazyLoadExtractor):
  5312. _module = 'yt_dlp.extractor.nbc'
  5313. IE_NAME = 'nbcolympics'
  5314. _VALID_URL = 'https?://www\\.nbcolympics\\.com/videos?/(?P<id>[0-9a-z-]+)'
  5315. _RETURN_TYPE = 'video'
  5316. class NBCOlympicsStreamIE(AdobePassIE):
  5317. _module = 'yt_dlp.extractor.nbc'
  5318. IE_NAME = 'nbcolympics:stream'
  5319. _VALID_URL = 'https?://stream\\.nbcolympics\\.com/(?P<id>[0-9a-z-]+)'
  5320. _RETURN_TYPE = 'video'
  5321. class NBCSportsIE(LazyLoadExtractor):
  5322. _module = 'yt_dlp.extractor.nbc'
  5323. IE_NAME = 'NBCSports'
  5324. _VALID_URL = 'https?://(?:www\\.)?nbcsports\\.com//?(?!vplayer/)(?:[^/]+/)+(?P<id>[0-9a-z-]+)'
  5325. _RETURN_TYPE = 'video'
  5326. class NBCSportsStreamIE(AdobePassIE):
  5327. _module = 'yt_dlp.extractor.nbc'
  5328. IE_NAME = 'NBCSportsStream'
  5329. _VALID_URL = 'https?://stream\\.nbcsports\\.com/.+?\\bpid=(?P<id>\\d+)'
  5330. _RETURN_TYPE = 'video'
  5331. class NBCSportsVPlayerIE(LazyLoadExtractor):
  5332. _module = 'yt_dlp.extractor.nbc'
  5333. IE_NAME = 'NBCSportsVPlayer'
  5334. _VALID_URL = 'https?://(?:vplayer\\.nbcsports\\.com|(?:www\\.)?nbcsports\\.com/vplayer)/(?:[^/]+/)+(?P<id>[0-9a-zA-Z_]+)'
  5335. _RETURN_TYPE = 'video'
  5336. class NBCStationsIE(LazyLoadExtractor):
  5337. _module = 'yt_dlp.extractor.nbc'
  5338. IE_NAME = 'NBCStations'
  5339. _VALID_URL = 'https?://(?:www\\.)?(?P<site>nbcbayarea|nbcboston|nbcchicago|nbcconnecticut|nbcdfw|nbclosangeles|nbcmiami|nbcnewyork|nbcphiladelphia|nbcsandiego|nbcwashington|necn|telemundo52|telemundoarizona|telemundochicago|telemundonuevainglaterra)\\.com/(?:[^/?#]+/)*(?P<id>[^/?#]+)/?(?:$|[#?])'
  5340. _RETURN_TYPE = 'video'
  5341. class NDRBaseIE(LazyLoadExtractor):
  5342. _module = 'yt_dlp.extractor.ndr'
  5343. IE_NAME = 'NDRBase'
  5344. class NDRIE(NDRBaseIE):
  5345. _module = 'yt_dlp.extractor.ndr'
  5346. IE_NAME = 'ndr'
  5347. _VALID_URL = 'https?://(?:\\w+\\.)*ndr\\.de/(?:[^/]+/)*(?P<id>[^/?#]+),[\\da-z]+\\.html'
  5348. IE_DESC = 'NDR.de - Norddeutscher Rundfunk'
  5349. _RETURN_TYPE = 'video'
  5350. class NDREmbedBaseIE(LazyLoadExtractor):
  5351. _module = 'yt_dlp.extractor.ndr'
  5352. IE_NAME = 'ndr:embed:base'
  5353. _VALID_URL = '(?:ndr:(?P<id_s>[\\da-z]+)|https?://www\\.ndr\\.de/(?P<id>[\\da-z]+)-ppjson\\.json)'
  5354. class NDREmbedIE(NDREmbedBaseIE):
  5355. _module = 'yt_dlp.extractor.ndr'
  5356. IE_NAME = 'ndr:embed'
  5357. _VALID_URL = 'https?://(?:\\w+\\.)*ndr\\.de/(?:[^/]+/)*(?P<id>[\\da-z]+)-(?:(?:ard)?player|externalPlayer)\\.html'
  5358. _RETURN_TYPE = 'video'
  5359. class NJoyEmbedIE(NDREmbedBaseIE):
  5360. _module = 'yt_dlp.extractor.ndr'
  5361. IE_NAME = 'njoy:embed'
  5362. _VALID_URL = 'https?://(?:www\\.)?n-joy\\.de/(?:[^/]+/)*(?P<id>[\\da-z]+)-(?:player|externalPlayer)_[^/]+\\.html'
  5363. _RETURN_TYPE = 'video'
  5364. class NJoyIE(NDRBaseIE):
  5365. _module = 'yt_dlp.extractor.ndr'
  5366. IE_NAME = 'njoy'
  5367. _VALID_URL = 'https?://(?:www\\.)?n-joy\\.de/(?:[^/]+/)*(?:(?P<display_id>[^/?#]+),)?(?P<id>[\\da-z]+)\\.html'
  5368. IE_DESC = 'N-JOY'
  5369. _RETURN_TYPE = 'video'
  5370. class NDTVIE(LazyLoadExtractor):
  5371. _module = 'yt_dlp.extractor.ndtv'
  5372. IE_NAME = 'NDTV'
  5373. _VALID_URL = 'https?://(?:[^/]+\\.)?ndtv\\.com/(?:[^/]+/)*videos?/?(?:[^/]+/)*[^/?^&]+-(?P<id>\\d+)'
  5374. _WORKING = False
  5375. _RETURN_TYPE = 'video'
  5376. class NebulaBaseIE(LazyLoadExtractor):
  5377. _module = 'yt_dlp.extractor.nebula'
  5378. IE_NAME = 'NebulaBase'
  5379. _NETRC_MACHINE = 'watchnebula'
  5380. class NebulaChannelIE(NebulaBaseIE):
  5381. _module = 'yt_dlp.extractor.nebula'
  5382. IE_NAME = 'nebula:channel'
  5383. _VALID_URL = 'https?://(?:www\\.|beta\\.)?(?:watchnebula\\.com|nebula\\.app|nebula\\.tv)/(?!myshows|library|videos)(?P<id>[\\w-]+)/?(?:$|[?#])'
  5384. _NETRC_MACHINE = 'watchnebula'
  5385. _RETURN_TYPE = 'playlist'
  5386. class NebulaClassIE(NebulaBaseIE):
  5387. _module = 'yt_dlp.extractor.nebula'
  5388. IE_NAME = 'nebula:media'
  5389. _VALID_URL = 'https?://(?:www\\.|beta\\.)?(?:watchnebula\\.com|nebula\\.app|nebula\\.tv)/(?!(?:myshows|library|videos)/)(?P<id>[\\w-]+)/(?P<ep>[\\w-]+)/?(?:$|[?#])'
  5390. _NETRC_MACHINE = 'watchnebula'
  5391. _RETURN_TYPE = 'video'
  5392. class NebulaIE(NebulaBaseIE):
  5393. _module = 'yt_dlp.extractor.nebula'
  5394. IE_NAME = 'nebula:video'
  5395. _VALID_URL = 'https?://(?:www\\.|beta\\.)?(?:watchnebula\\.com|nebula\\.app|nebula\\.tv)/videos/(?P<id>[\\w-]+)'
  5396. _NETRC_MACHINE = 'watchnebula'
  5397. _RETURN_TYPE = 'video'
  5398. class NebulaSubscriptionsIE(NebulaBaseIE):
  5399. _module = 'yt_dlp.extractor.nebula'
  5400. IE_NAME = 'nebula:subscriptions'
  5401. _VALID_URL = 'https?://(?:www\\.|beta\\.)?(?:watchnebula\\.com|nebula\\.app|nebula\\.tv)/(?P<id>myshows|library/latest-videos)/?(?:$|[?#])'
  5402. _NETRC_MACHINE = 'watchnebula'
  5403. _RETURN_TYPE = 'playlist'
  5404. class NekoHackerIE(LazyLoadExtractor):
  5405. _module = 'yt_dlp.extractor.nekohacker'
  5406. IE_NAME = 'NekoHacker'
  5407. _VALID_URL = 'https?://(?:www\\.)?nekohacker\\.com/(?P<id>(?!free-dl)[\\w-]+)'
  5408. _RETURN_TYPE = 'playlist'
  5409. class NerdCubedFeedIE(LazyLoadExtractor):
  5410. _module = 'yt_dlp.extractor.nerdcubed'
  5411. IE_NAME = 'NerdCubedFeed'
  5412. _VALID_URL = 'https?://(?:www\\.)?nerdcubed\\.co\\.uk/?(?:$|[#?])'
  5413. _RETURN_TYPE = 'playlist'
  5414. class NetEaseMusicBaseIE(LazyLoadExtractor):
  5415. _module = 'yt_dlp.extractor.neteasemusic'
  5416. IE_NAME = 'NetEaseMusicBase'
  5417. class NetEaseMusicAlbumIE(NetEaseMusicBaseIE):
  5418. _module = 'yt_dlp.extractor.neteasemusic'
  5419. IE_NAME = 'netease:album'
  5420. _VALID_URL = 'https?://music\\.163\\.com/(?:#/)?album\\?id=(?P<id>[0-9]+)'
  5421. IE_DESC = '网易云音乐 - 专辑'
  5422. _RETURN_TYPE = 'playlist'
  5423. class NetEaseMusicDjRadioIE(NetEaseMusicBaseIE):
  5424. _module = 'yt_dlp.extractor.neteasemusic'
  5425. IE_NAME = 'netease:djradio'
  5426. _VALID_URL = 'https?://music\\.163\\.com/(?:#/)?djradio\\?id=(?P<id>[0-9]+)'
  5427. IE_DESC = '网易云音乐 - 电台'
  5428. _RETURN_TYPE = 'playlist'
  5429. class NetEaseMusicIE(NetEaseMusicBaseIE):
  5430. _module = 'yt_dlp.extractor.neteasemusic'
  5431. IE_NAME = 'netease:song'
  5432. _VALID_URL = 'https?://(?:y\\.)?music\\.163\\.com/(?:[#m]/)?song\\?.*?\\bid=(?P<id>[0-9]+)'
  5433. IE_DESC = '网易云音乐'
  5434. _RETURN_TYPE = 'video'
  5435. class NetEaseMusicListIE(NetEaseMusicBaseIE):
  5436. _module = 'yt_dlp.extractor.neteasemusic'
  5437. IE_NAME = 'netease:playlist'
  5438. _VALID_URL = 'https?://music\\.163\\.com/(?:#/)?(?:playlist|discover/toplist)\\?id=(?P<id>[0-9]+)'
  5439. IE_DESC = '网易云音乐 - 歌单'
  5440. _RETURN_TYPE = 'playlist'
  5441. class NetEaseMusicMvIE(NetEaseMusicBaseIE):
  5442. _module = 'yt_dlp.extractor.neteasemusic'
  5443. IE_NAME = 'netease:mv'
  5444. _VALID_URL = 'https?://music\\.163\\.com/(?:#/)?mv\\?id=(?P<id>[0-9]+)'
  5445. IE_DESC = '网易云音乐 - MV'
  5446. _RETURN_TYPE = 'video'
  5447. class NetEaseMusicProgramIE(NetEaseMusicBaseIE):
  5448. _module = 'yt_dlp.extractor.neteasemusic'
  5449. IE_NAME = 'netease:program'
  5450. _VALID_URL = 'https?://music\\.163\\.com/(?:#/)?program\\?id=(?P<id>[0-9]+)'
  5451. IE_DESC = '网易云音乐 - 电台节目'
  5452. _RETURN_TYPE = 'any'
  5453. class NetEaseMusicSingerIE(NetEaseMusicBaseIE):
  5454. _module = 'yt_dlp.extractor.neteasemusic'
  5455. IE_NAME = 'netease:singer'
  5456. _VALID_URL = 'https?://music\\.163\\.com/(?:#/)?artist\\?id=(?P<id>[0-9]+)'
  5457. IE_DESC = '网易云音乐 - 歌手'
  5458. _RETURN_TYPE = 'playlist'
  5459. class NetverseBaseIE(LazyLoadExtractor):
  5460. _module = 'yt_dlp.extractor.netverse'
  5461. IE_NAME = 'NetverseBase'
  5462. class NetverseIE(NetverseBaseIE):
  5463. _module = 'yt_dlp.extractor.netverse'
  5464. IE_NAME = 'Netverse'
  5465. _VALID_URL = 'https?://(?:\\w+\\.)?netverse\\.id/(?P<type>watch|video)/(?P<display_id>[^/?#&]+)'
  5466. _RETURN_TYPE = 'video'
  5467. class NetversePlaylistIE(NetverseBaseIE):
  5468. _module = 'yt_dlp.extractor.netverse'
  5469. IE_NAME = 'NetversePlaylist'
  5470. _VALID_URL = 'https?://(?:\\w+\\.)?netverse\\.id/(?P<type>webseries)/(?P<display_id>[^/?#&]+)'
  5471. _RETURN_TYPE = 'playlist'
  5472. class NetverseSearchIE(LazyLoadSearchExtractor):
  5473. _module = 'yt_dlp.extractor.netverse'
  5474. IE_NAME = 'NetverseSearch'
  5475. _VALID_URL = 'netsearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  5476. SEARCH_KEY = 'netsearch'
  5477. _RETURN_TYPE = 'playlist'
  5478. class NetzkinoIE(LazyLoadExtractor):
  5479. _module = 'yt_dlp.extractor.netzkino'
  5480. IE_NAME = 'Netzkino'
  5481. _VALID_URL = 'https?://(?:www\\.)?netzkino\\.de/\\#!/[^/]+/(?P<id>[^/]+)'
  5482. _WORKING = False
  5483. age_limit = 18
  5484. _RETURN_TYPE = 'video'
  5485. class NewgroundsIE(LazyLoadExtractor):
  5486. _module = 'yt_dlp.extractor.newgrounds'
  5487. IE_NAME = 'Newgrounds'
  5488. _VALID_URL = 'https?://(?:www\\.)?newgrounds\\.com/(?:audio/listen|portal/view)/(?P<id>\\d+)(?:/format/flash)?'
  5489. _NETRC_MACHINE = 'newgrounds'
  5490. age_limit = 18
  5491. _RETURN_TYPE = 'video'
  5492. class NewgroundsPlaylistIE(LazyLoadExtractor):
  5493. _module = 'yt_dlp.extractor.newgrounds'
  5494. IE_NAME = 'Newgrounds:playlist'
  5495. _VALID_URL = 'https?://(?:www\\.)?newgrounds\\.com/(?:collection|[^/]+/search/[^/]+)/(?P<id>[^/?#&]+)'
  5496. _RETURN_TYPE = 'playlist'
  5497. class NewgroundsUserIE(LazyLoadExtractor):
  5498. _module = 'yt_dlp.extractor.newgrounds'
  5499. IE_NAME = 'Newgrounds:user'
  5500. _VALID_URL = 'https?://(?P<id>[^\\.]+)\\.newgrounds\\.com/(?:movies|audio)/?(?:[#?]|$)'
  5501. _RETURN_TYPE = 'playlist'
  5502. class NewsPicksIE(LazyLoadExtractor):
  5503. _module = 'yt_dlp.extractor.newspicks'
  5504. IE_NAME = 'NewsPicks'
  5505. _VALID_URL = 'https?://newspicks\\.com/movie-series/(?P<channel_id>\\d+)\\?movieId=(?P<id>\\d+)'
  5506. _RETURN_TYPE = 'video'
  5507. class NewsyIE(LazyLoadExtractor):
  5508. _module = 'yt_dlp.extractor.newsy'
  5509. IE_NAME = 'Newsy'
  5510. _VALID_URL = 'https?://(?:www\\.)?newsy\\.com/stories/(?P<id>[^/?#$&]+)'
  5511. _RETURN_TYPE = 'video'
  5512. class NextMediaIE(LazyLoadExtractor):
  5513. _module = 'yt_dlp.extractor.nextmedia'
  5514. IE_NAME = 'NextMedia'
  5515. _VALID_URL = 'https?://hk\\.apple\\.nextmedia\\.com/[^/]+/[^/]+/(?P<date>\\d+)/(?P<id>\\d+)'
  5516. IE_DESC = '蘋果日報'
  5517. _RETURN_TYPE = 'video'
  5518. class AppleDailyIE(NextMediaIE):
  5519. _module = 'yt_dlp.extractor.nextmedia'
  5520. IE_NAME = 'AppleDaily'
  5521. _VALID_URL = 'https?://(www|ent)\\.appledaily\\.com\\.tw/[^/]+/[^/]+/[^/]+/(?P<date>\\d+)/(?P<id>\\d+)(/.*)?'
  5522. IE_DESC = '臺灣蘋果日報'
  5523. _RETURN_TYPE = 'video'
  5524. class NextMediaActionNewsIE(NextMediaIE):
  5525. _module = 'yt_dlp.extractor.nextmedia'
  5526. IE_NAME = 'NextMediaActionNews'
  5527. _VALID_URL = 'https?://hk\\.dv\\.nextmedia\\.com/actionnews/[^/]+/(?P<date>\\d+)/(?P<id>\\d+)/\\d+'
  5528. IE_DESC = '蘋果日報 - 動新聞'
  5529. _RETURN_TYPE = 'video'
  5530. class NextTVIE(LazyLoadExtractor):
  5531. _module = 'yt_dlp.extractor.nextmedia'
  5532. IE_NAME = 'NextTV'
  5533. _ENABLED = None
  5534. _VALID_URL = 'https?://(?:www\\.)?nexttv\\.com\\.tw/(?:[^/]+/)+(?P<id>\\d+)'
  5535. _WORKING = False
  5536. IE_DESC = '壹電視'
  5537. _RETURN_TYPE = 'video'
  5538. class NexxEmbedIE(LazyLoadExtractor):
  5539. _module = 'yt_dlp.extractor.nexx'
  5540. IE_NAME = 'NexxEmbed'
  5541. _VALID_URL = 'https?://embed\\.nexx(?:\\.cloud|cdn\\.com)/\\d+/(?:video/)?(?P<id>[^/?#&]+)'
  5542. _RETURN_TYPE = 'video'
  5543. class NexxIE(LazyLoadExtractor):
  5544. _module = 'yt_dlp.extractor.nexx'
  5545. IE_NAME = 'Nexx'
  5546. _VALID_URL = '(?x)\n (?:\n https?://api\\.nexx(?:\\.cloud|cdn\\.com)/v3(?:\\.\\d)?/(?P<domain_id>\\d+)/videos/byid/|\n nexx:(?:(?P<domain_id_s>\\d+):)?|\n https?://arc\\.nexx\\.cloud/api/video/\n )\n (?P<id>\\d+)\n '
  5547. _RETURN_TYPE = 'video'
  5548. class NFBBaseIE(LazyLoadExtractor):
  5549. _module = 'yt_dlp.extractor.nfb'
  5550. IE_NAME = 'NFBBase'
  5551. class NFBIE(NFBBaseIE):
  5552. _module = 'yt_dlp.extractor.nfb'
  5553. IE_NAME = 'nfb'
  5554. _VALID_URL = ['https?://(?:www\\.)?(?P<site>nfb|onf)\\.ca/(?P<type>film)/(?P<id>[^/?#&]+)', 'https?://(?:www\\.)?(?P<site>nfb|onf)\\.ca/(?P<type>series?)/(?P<id>[^/?#&]+/s(?:ea|ai)son\\d+/episode\\d+)']
  5555. IE_DESC = 'nfb.ca and onf.ca films and episodes'
  5556. _RETURN_TYPE = 'video'
  5557. class NFBSeriesIE(NFBBaseIE):
  5558. _module = 'yt_dlp.extractor.nfb'
  5559. IE_NAME = 'nfb:series'
  5560. _VALID_URL = 'https?://(?:www\\.)?(?P<site>nfb|onf)\\.ca/(?P<type>series?)/(?P<id>[^/?#&]+)/?(?:[?#]|$)'
  5561. IE_DESC = 'nfb.ca and onf.ca series'
  5562. _RETURN_TYPE = 'playlist'
  5563. class NFHSNetworkIE(LazyLoadExtractor):
  5564. _module = 'yt_dlp.extractor.nfhsnetwork'
  5565. IE_NAME = 'NFHSNetwork'
  5566. _VALID_URL = 'https?://(?:www\\.)?nfhsnetwork\\.com/events/[\\w-]+/(?P<id>(?:gam|evt|dd|)?[\\w\\d]{0,10})'
  5567. _RETURN_TYPE = 'video'
  5568. class NFLBaseIE(LazyLoadExtractor):
  5569. _module = 'yt_dlp.extractor.nfl'
  5570. IE_NAME = 'NFLBase'
  5571. class NFLIE(NFLBaseIE):
  5572. _module = 'yt_dlp.extractor.nfl'
  5573. IE_NAME = 'nfl.com'
  5574. _VALID_URL = '(?x)\n https?://\n (?P<host>\n (?:www\\.)?\n (?:\n (?:\n nfl|\n buffalobills|\n miamidolphins|\n patriots|\n newyorkjets|\n baltimoreravens|\n bengals|\n clevelandbrowns|\n steelers|\n houstontexans|\n colts|\n jaguars|\n (?:titansonline|tennesseetitans)|\n denverbroncos|\n (?:kc)?chiefs|\n raiders|\n chargers|\n dallascowboys|\n giants|\n philadelphiaeagles|\n (?:redskins|washingtonfootball)|\n chicagobears|\n detroitlions|\n packers|\n vikings|\n atlantafalcons|\n panthers|\n neworleanssaints|\n buccaneers|\n azcardinals|\n (?:stlouis|the)rams|\n 49ers|\n seahawks\n )\\.com|\n .+?\\.clubs\\.nfl\\.com\n )\n )/\n (?:videos?|listen|audio)/(?P<id>[^/#?&]+)'
  5575. _RETURN_TYPE = 'video'
  5576. class NFLArticleIE(NFLBaseIE):
  5577. _module = 'yt_dlp.extractor.nfl'
  5578. IE_NAME = 'nfl.com:article'
  5579. _VALID_URL = '(?x)\n https?://\n (?P<host>\n (?:www\\.)?\n (?:\n (?:\n nfl|\n buffalobills|\n miamidolphins|\n patriots|\n newyorkjets|\n baltimoreravens|\n bengals|\n clevelandbrowns|\n steelers|\n houstontexans|\n colts|\n jaguars|\n (?:titansonline|tennesseetitans)|\n denverbroncos|\n (?:kc)?chiefs|\n raiders|\n chargers|\n dallascowboys|\n giants|\n philadelphiaeagles|\n (?:redskins|washingtonfootball)|\n chicagobears|\n detroitlions|\n packers|\n vikings|\n atlantafalcons|\n panthers|\n neworleanssaints|\n buccaneers|\n azcardinals|\n (?:stlouis|the)rams|\n 49ers|\n seahawks\n )\\.com|\n .+?\\.clubs\\.nfl\\.com\n )\n )/\n news/(?P<id>[^/#?&]+)'
  5580. _RETURN_TYPE = 'playlist'
  5581. class NFLPlusEpisodeIE(NFLBaseIE):
  5582. _module = 'yt_dlp.extractor.nfl'
  5583. IE_NAME = 'nfl.com:plus:episode'
  5584. _VALID_URL = 'https?://(?:www\\.)?nfl\\.com/plus/episodes/(?P<id>[\\w-]+)'
  5585. _RETURN_TYPE = 'video'
  5586. class NFLPlusReplayIE(NFLBaseIE):
  5587. _module = 'yt_dlp.extractor.nfl'
  5588. IE_NAME = 'nfl.com:plus:replay'
  5589. _VALID_URL = 'https?://(?:www\\.)?nfl\\.com/plus/games/(?P<slug>[\\w-]+)(?:/(?P<id>\\d+))?'
  5590. _RETURN_TYPE = 'any'
  5591. class NhkForSchoolBangumiIE(LazyLoadExtractor):
  5592. _module = 'yt_dlp.extractor.nhk'
  5593. IE_NAME = 'NhkForSchoolBangumi'
  5594. _VALID_URL = 'https?://www2\\.nhk\\.or\\.jp/school/movie/(?P<type>bangumi|clip)\\.cgi\\?das_id=(?P<id>[a-zA-Z0-9_-]+)'
  5595. _RETURN_TYPE = 'video'
  5596. class NhkForSchoolProgramListIE(LazyLoadExtractor):
  5597. _module = 'yt_dlp.extractor.nhk'
  5598. IE_NAME = 'NhkForSchoolProgramList'
  5599. _VALID_URL = 'https?://www\\.nhk\\.or\\.jp/school/(?P<id>(?:rika|syakai|kokugo|sansuu|seikatsu|doutoku|ongaku|taiiku|zukou|gijutsu|katei|sougou|eigo|tokkatsu|tokushi|sonota)/[a-zA-Z0-9_-]+)'
  5600. _RETURN_TYPE = 'playlist'
  5601. class NhkForSchoolSubjectIE(LazyLoadExtractor):
  5602. _module = 'yt_dlp.extractor.nhk'
  5603. IE_NAME = 'NhkForSchoolSubject'
  5604. _VALID_URL = 'https?://www\\.nhk\\.or\\.jp/school/(?P<id>rika|syakai|kokugo|sansuu|seikatsu|doutoku|ongaku|taiiku|zukou|gijutsu|katei|sougou|eigo|tokkatsu|tokushi|sonota)/?(?:[\\?#].*)?$'
  5605. IE_DESC = 'Portal page for each school subjects, like Japanese (kokugo, 国語) or math (sansuu/suugaku or 算数・数学)'
  5606. _RETURN_TYPE = 'playlist'
  5607. class NhkRadioNewsPageIE(LazyLoadExtractor):
  5608. _module = 'yt_dlp.extractor.nhk'
  5609. IE_NAME = 'NhkRadioNewsPage'
  5610. _VALID_URL = 'https?://www\\.nhk\\.or\\.jp/radionews/?(?:$|[?#])'
  5611. _RETURN_TYPE = 'playlist'
  5612. class NhkRadiruIE(LazyLoadExtractor):
  5613. _module = 'yt_dlp.extractor.nhk'
  5614. IE_NAME = 'NhkRadiru'
  5615. _VALID_URL = 'https?://www\\.nhk\\.or\\.jp/radio/(?:player/ondemand|ondemand/detail)\\.html\\?p=(?P<site>[\\da-zA-Z]+)_(?P<corner>[\\da-zA-Z]+)(?:_(?P<headline>[\\da-zA-Z]+))?'
  5616. IE_DESC = 'NHK らじる (Radiru/Rajiru)'
  5617. _RETURN_TYPE = 'any'
  5618. class NhkRadiruLiveIE(LazyLoadExtractor):
  5619. _module = 'yt_dlp.extractor.nhk'
  5620. IE_NAME = 'NhkRadiruLive'
  5621. _VALID_URL = 'https?://www\\.nhk\\.or\\.jp/radio/player/\\?ch=(?P<id>r[12]|fm)'
  5622. _RETURN_TYPE = 'video'
  5623. class NhkBaseIE(LazyLoadExtractor):
  5624. _module = 'yt_dlp.extractor.nhk'
  5625. IE_NAME = 'NhkBase'
  5626. class NhkVodIE(NhkBaseIE):
  5627. _module = 'yt_dlp.extractor.nhk'
  5628. IE_NAME = 'NhkVod'
  5629. _VALID_URL = ['https?://www3\\.nhk\\.or\\.jp/nhkworld/(?P<lang>[a-z]{2})/shows/(?:(?P<type>video)/)?(?P<id>\\d{4}[\\da-z]\\d+)/?(?:$|[?#])', 'https?://www3\\.nhk\\.or\\.jp/nhkworld/(?P<lang>[a-z]{2})/(?:ondemand|shows)/(?P<type>audio)/(?P<id>[^/?#]+?-\\d{8}-[\\da-z]+)', 'https?://www3\\.nhk\\.or\\.jp/nhkworld/(?P<lang>[a-z]{2})/ondemand/(?P<type>video)/(?P<id>\\d{4}[\\da-z]\\d+)']
  5630. _RETURN_TYPE = 'video'
  5631. class NhkVodProgramIE(NhkBaseIE):
  5632. _module = 'yt_dlp.extractor.nhk'
  5633. IE_NAME = 'NhkVodProgram'
  5634. _VALID_URL = '(?x)\n https?://www3\\.nhk\\.or\\.jp/nhkworld/(?P<lang>[a-z]{2})/(?:shows|tv)/\n (?:(?P<type>audio)/programs/)?(?P<id>\\w+)/?\n (?:\\?(?:[^#]+&)?type=(?P<episode_type>clip|(?:radio|tv)Episode))?'
  5635. _RETURN_TYPE = 'playlist'
  5636. @classmethod
  5637. def suitable(cls, url):
  5638. return False if NhkVodIE.suitable(url) else super().suitable(url)
  5639. class NHLBaseIE(LazyLoadExtractor):
  5640. _module = 'yt_dlp.extractor.nhl'
  5641. IE_NAME = 'NHLBase'
  5642. class NHLIE(NHLBaseIE):
  5643. _module = 'yt_dlp.extractor.nhl'
  5644. IE_NAME = 'nhl.com'
  5645. _VALID_URL = 'https?://(?:www\\.)?(?P<site>nhl|wch2016)\\.com/(?:[^/]+/)*c-(?P<id>\\d+)'
  5646. _RETURN_TYPE = 'video'
  5647. class NickBrIE(MTVServicesInfoExtractor):
  5648. _module = 'yt_dlp.extractor.nick'
  5649. IE_NAME = 'nickelodeon:br'
  5650. _VALID_URL = '(?x)\n https?://\n (?:\n (?P<domain>(?:www\\.)?nickjr|mundonick\\.uol)\\.com\\.br|\n (?:www\\.)?nickjr\\.[a-z]{2}|\n (?:www\\.)?nickelodeonjunior\\.fr\n )\n /(?:programas/)?[^/]+/videos/(?:episodios/)?(?P<id>[^/?\\#.]+)\n '
  5651. class NickDeIE(MTVServicesInfoExtractor):
  5652. _module = 'yt_dlp.extractor.nick'
  5653. IE_NAME = 'nick.de'
  5654. _VALID_URL = 'https?://(?:www\\.)?(?P<host>nick\\.(?:de|com\\.pl|ch)|nickelodeon\\.(?:nl|be|at|dk|no|se))/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  5655. class NickIE(MTVServicesInfoExtractor):
  5656. _module = 'yt_dlp.extractor.nick'
  5657. IE_NAME = 'nick.com'
  5658. _VALID_URL = 'https?://(?P<domain>(?:www\\.)?nick(?:jr)?\\.com)/(?:[^/]+/)?(?P<type>videos/clip|[^/]+/videos|episodes/[^/]+)/(?P<id>[^/?#.]+)'
  5659. _RETURN_TYPE = 'any'
  5660. class NickRuIE(MTVServicesInfoExtractor):
  5661. _module = 'yt_dlp.extractor.nick'
  5662. IE_NAME = 'nickelodeonru'
  5663. _VALID_URL = 'https?://(?:www\\.)nickelodeon\\.(?:ru|fr|es|pt|ro|hu|com\\.tr)/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  5664. class NiconicoPlaylistBaseIE(LazyLoadExtractor):
  5665. _module = 'yt_dlp.extractor.niconico'
  5666. IE_NAME = 'NiconicoPlaylistBase'
  5667. class NiconicoHistoryIE(NiconicoPlaylistBaseIE):
  5668. _module = 'yt_dlp.extractor.niconico'
  5669. IE_NAME = 'niconico:history'
  5670. _VALID_URL = 'https?://(?:www\\.|sp\\.)?nicovideo\\.jp/my/(?P<id>history(?:/like)?)'
  5671. IE_DESC = 'NicoNico user history or likes. Requires cookies.'
  5672. class NiconicoIE(LazyLoadExtractor):
  5673. _module = 'yt_dlp.extractor.niconico'
  5674. IE_NAME = 'niconico'
  5675. _VALID_URL = 'https?://(?:(?:www\\.|secure\\.|sp\\.)?nicovideo\\.jp/watch|nico\\.ms)/(?P<id>(?:[a-z]{2})?[0-9]+)'
  5676. IE_DESC = 'ニコニコ動画'
  5677. _NETRC_MACHINE = 'niconico'
  5678. _RETURN_TYPE = 'video'
  5679. class NiconicoLiveIE(LazyLoadExtractor):
  5680. _module = 'yt_dlp.extractor.niconico'
  5681. IE_NAME = 'niconico:live'
  5682. _VALID_URL = 'https?://(?:sp\\.)?live2?\\.nicovideo\\.jp/(?:watch|gate)/(?P<id>lv\\d+)'
  5683. IE_DESC = 'ニコニコ生放送'
  5684. _RETURN_TYPE = 'video'
  5685. class NiconicoPlaylistIE(NiconicoPlaylistBaseIE):
  5686. _module = 'yt_dlp.extractor.niconico'
  5687. IE_NAME = 'niconico:playlist'
  5688. _VALID_URL = 'https?://(?:(?:www\\.|sp\\.)?nicovideo\\.jp|nico\\.ms)/(?:user/\\d+/)?(?:my/)?mylist/(?:#/)?(?P<id>\\d+)'
  5689. _RETURN_TYPE = 'playlist'
  5690. class NiconicoSeriesIE(LazyLoadExtractor):
  5691. _module = 'yt_dlp.extractor.niconico'
  5692. IE_NAME = 'niconico:series'
  5693. _VALID_URL = 'https?://(?:(?:www\\.|sp\\.)?nicovideo\\.jp(?:/user/\\d+)?|nico\\.ms)/series/(?P<id>\\d+)'
  5694. _RETURN_TYPE = 'playlist'
  5695. class NiconicoUserIE(LazyLoadExtractor):
  5696. _module = 'yt_dlp.extractor.niconico'
  5697. IE_NAME = 'NiconicoUser'
  5698. _VALID_URL = 'https?://(?:www\\.)?nicovideo\\.jp/user/(?P<id>\\d+)(?:/video)?/?(?:$|[#?])'
  5699. _RETURN_TYPE = 'playlist'
  5700. class NicovideoSearchBaseIE(LazyLoadExtractor):
  5701. _module = 'yt_dlp.extractor.niconico'
  5702. IE_NAME = 'NicovideoSearchBase'
  5703. class NicovideoSearchDateIE(NicovideoSearchBaseIE, LazyLoadSearchExtractor):
  5704. _module = 'yt_dlp.extractor.niconico'
  5705. IE_NAME = 'nicovideo:search:date'
  5706. _VALID_URL = 'nicosearchdate(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  5707. IE_DESC = 'Nico video search, newest first'
  5708. SEARCH_KEY = 'nicosearchdate'
  5709. _RETURN_TYPE = 'playlist'
  5710. class NicovideoSearchIE(NicovideoSearchBaseIE, LazyLoadSearchExtractor):
  5711. _module = 'yt_dlp.extractor.niconico'
  5712. IE_NAME = 'nicovideo:search'
  5713. _VALID_URL = 'nicosearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  5714. IE_DESC = 'Nico video search'
  5715. SEARCH_KEY = 'nicosearch'
  5716. _RETURN_TYPE = 'playlist'
  5717. class NicovideoSearchURLIE(NicovideoSearchBaseIE):
  5718. _module = 'yt_dlp.extractor.niconico'
  5719. IE_NAME = 'nicovideo:search_url'
  5720. _VALID_URL = 'https?://(?:www\\.)?nicovideo\\.jp/search/(?P<id>[^?#&]+)?'
  5721. IE_DESC = 'Nico video search URLs'
  5722. _RETURN_TYPE = 'playlist'
  5723. class NicovideoTagURLIE(NicovideoSearchBaseIE):
  5724. _module = 'yt_dlp.extractor.niconico'
  5725. IE_NAME = 'niconico:tag'
  5726. _VALID_URL = 'https?://(?:www\\.)?nicovideo\\.jp/tag/(?P<id>[^?#&]+)?'
  5727. IE_DESC = 'NicoNico video tag URLs'
  5728. _RETURN_TYPE = 'playlist'
  5729. class NiconicoChannelPlusBaseIE(LazyLoadExtractor):
  5730. _module = 'yt_dlp.extractor.niconicochannelplus'
  5731. IE_NAME = 'NiconicoChannelPlusBase'
  5732. class NiconicoChannelPlusChannelBaseIE(NiconicoChannelPlusBaseIE):
  5733. _module = 'yt_dlp.extractor.niconicochannelplus'
  5734. IE_NAME = 'NiconicoChannelPlusChannelBase'
  5735. class NiconicoChannelPlusChannelLivesIE(NiconicoChannelPlusChannelBaseIE):
  5736. _module = 'yt_dlp.extractor.niconicochannelplus'
  5737. IE_NAME = 'NiconicoChannelPlus:channel:lives'
  5738. _VALID_URL = 'https?://nicochannel\\.jp/(?P<id>[a-z\\d\\._-]+)/lives'
  5739. IE_DESC = 'ニコニコチャンネルプラス - チャンネル - ライブリスト. nicochannel.jp/channel/lives'
  5740. _RETURN_TYPE = 'playlist'
  5741. class NiconicoChannelPlusChannelVideosIE(NiconicoChannelPlusChannelBaseIE):
  5742. _module = 'yt_dlp.extractor.niconicochannelplus'
  5743. IE_NAME = 'NiconicoChannelPlus:channel:videos'
  5744. _VALID_URL = 'https?://nicochannel\\.jp/(?P<id>[a-z\\d\\._-]+)/videos(?:\\?.*)?'
  5745. IE_DESC = 'ニコニコチャンネルプラス - チャンネル - 動画リスト. nicochannel.jp/channel/videos'
  5746. _RETURN_TYPE = 'playlist'
  5747. class NiconicoChannelPlusIE(NiconicoChannelPlusBaseIE):
  5748. _module = 'yt_dlp.extractor.niconicochannelplus'
  5749. IE_NAME = 'NiconicoChannelPlus'
  5750. _VALID_URL = 'https?://nicochannel\\.jp/(?P<channel>[\\w.-]+)/(?:video|live)/(?P<code>sm\\w+)'
  5751. IE_DESC = 'ニコニコチャンネルプラス'
  5752. age_limit = 18
  5753. _RETURN_TYPE = 'video'
  5754. class NinaProtocolIE(LazyLoadExtractor):
  5755. _module = 'yt_dlp.extractor.ninaprotocol'
  5756. IE_NAME = 'NinaProtocol'
  5757. _VALID_URL = 'https?://(?:www\\.)?ninaprotocol\\.com/releases/(?P<id>[^/#?]+)'
  5758. _RETURN_TYPE = 'playlist'
  5759. class CPTwentyFourIE(LazyLoadExtractor):
  5760. _module = 'yt_dlp.extractor.ninecninemedia'
  5761. IE_NAME = 'cp24'
  5762. _VALID_URL = 'https?://(?:www\\.)?cp24\\.com/news/(?P<id>[^?#]+)'
  5763. _RETURN_TYPE = 'video'
  5764. class NineCNineMediaIE(LazyLoadExtractor):
  5765. _module = 'yt_dlp.extractor.ninecninemedia'
  5766. IE_NAME = '9c9media'
  5767. _VALID_URL = '9c9media:(?P<destination_code>[^:]+):(?P<id>\\d+)'
  5768. class NineGagIE(LazyLoadExtractor):
  5769. _module = 'yt_dlp.extractor.ninegag'
  5770. IE_NAME = '9gag'
  5771. _VALID_URL = 'https?://(?:www\\.)?9gag\\.com/gag/(?P<id>[^/?&#]+)'
  5772. IE_DESC = '9GAG'
  5773. _RETURN_TYPE = 'video'
  5774. class NineNewsIE(LazyLoadExtractor):
  5775. _module = 'yt_dlp.extractor.ninenews'
  5776. IE_NAME = '9News'
  5777. _VALID_URL = 'https?://(?:www\\.)?9news\\.com\\.au/(?:[\\w-]+/){2,3}(?P<id>[\\w-]+)/?(?:$|[?#])'
  5778. _RETURN_TYPE = 'video'
  5779. class NineNowIE(LazyLoadExtractor):
  5780. _module = 'yt_dlp.extractor.ninenow'
  5781. IE_NAME = '9now.com.au'
  5782. _VALID_URL = 'https?://(?:www\\.)?9now\\.com\\.au/(?:[^/]+/){2}(?P<id>[^/?#]+)'
  5783. _RETURN_TYPE = 'video'
  5784. class NintendoIE(LazyLoadExtractor):
  5785. _module = 'yt_dlp.extractor.nintendo'
  5786. IE_NAME = 'Nintendo'
  5787. _VALID_URL = 'https?://(?:www\\.)?nintendo\\.com/(?:(?P<locale>\\w{2}(?:-\\w{2})?)/)?nintendo-direct/(?P<slug>[^/?#]+)'
  5788. age_limit = 17
  5789. _RETURN_TYPE = 'video'
  5790. class NitterIE(LazyLoadExtractor):
  5791. _module = 'yt_dlp.extractor.nitter'
  5792. IE_NAME = 'Nitter'
  5793. _VALID_URL = 'https?://(?:3nzoldnxplag42gqjs23xvghtzf6t6yzssrtytnntc6ppc7xxuoneoad\\.onion|nitter\\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\\.onion|nitter7bryz3jv7e3uekphigvmoyoem4al3fynerxkj22dmoxoq553qd\\.onion|npf37k3mtzwxreiw52ccs5ay4e6qt2fkcs2ndieurdyn2cuzzsfyfvid\\.onion|nitter\\.v6vgyqpa7yefkorazmg5d5fimstmvm2vtbirt6676mt7qmllrcnwycqd\\.onion|i23nv6w3juvzlw32xzoxcqzktegd4i4fu3nmnc2ewv4ggiu4ledwklad\\.onion|26oq3gioiwcmfojub37nz5gzbkdiqp7fue5kvye7d4txv4ny6fb4wwid\\.onion|vfaomgh4jxphpbdfizkm5gbtjahmei234giqj4facbwhrfjtcldauqad\\.onion|iwgu3cv7ywf3gssed5iqtavmrlszgsxazkmwwnt4h2kdait75thdyrqd\\.onion|erpnncl5nhyji3c32dcfmztujtl3xaddqb457jsbkulq24zqq7ifdgad\\.onion|ckzuw5misyahmg7j5t5xwwuj3bwy62jfolxyux4brfflramzsvvd3syd\\.onion|jebqj47jgxleaiosfcxfibx2xdahjettuydlxbg64azd4khsxv6kawid\\.onion|nttr2iupbb6fazdpr2rgbooon2tzbbsvvkagkgkwohhodjzj43stxhad\\.onion|nitraeju2mipeziu2wtcrqsxg7h62v5y4eqgwi75uprynkj74gevvuqd\\.onion|nitter\\.lqs5fjmajyp7rvp4qvyubwofzi6d4imua7vs237rkc4m5qogitqwrgyd\\.onion|ibsboeui2im5o7dxnik3s5yghufumgy5abevtij5nbizequfpu4qi4ad\\.onion|ec5nvbycpfa5k6ro77blxgkyrzbkv7uy6r5cngcbkadtjj2733nm3uyd\\.onion|nitter\\.i2p|u6ikd6zndl3c4dsdq4mmujpntgeevdk5qzkfb57r4tnfeccrn2qa\\.b32\\.i2p|nitterlgj3n5fgwesu3vxc5h67ruku33nqaoeoocae2mvlzhsu6k7fqd\\.onion|nitter\\.lacontrevoie\\.fr|nitter\\.fdn\\.fr|nitter\\.1d4\\.us|nitter\\.kavin\\.rocks|nitter\\.unixfox\\.eu|nitter\\.domain\\.glass|nitter\\.namazso\\.eu|birdsite\\.xanny\\.family|nitter\\.moomoo\\.me|bird\\.trom\\.tf|nitter\\.it|twitter\\.censors\\.us|nitter\\.grimneko\\.de|twitter\\.076\\.ne\\.jp|nitter\\.fly\\.dev|notabird\\.site|nitter\\.weiler\\.rocks|nitter\\.sethforprivacy\\.com|nitter\\.cutelab\\.space|nitter\\.nl|nitter\\.mint\\.lgbt|nitter\\.bus\\-hit\\.me|nitter\\.esmailelbob\\.xyz|tw\\.artemislena\\.eu|nitter\\.winscloud\\.net|nitter\\.tiekoetter\\.com|nitter\\.spaceint\\.fr|nitter\\.privacy\\.com\\.de|nitter\\.poast\\.org|nitter\\.bird\\.froth\\.zone|nitter\\.dcs0\\.hu|twitter\\.dr460nf1r3\\.org|nitter\\.garudalinux\\.org|twitter\\.femboy\\.hu|nitter\\.cz|nitter\\.privacydev\\.net|nitter\\.evil\\.site|tweet\\.lambda\\.dance|nitter\\.kylrth\\.com|nitter\\.foss\\.wtf|nitter\\.priv\\.pw|nitter\\.tokhmi\\.xyz|nitter\\.catalyst\\.sx|unofficialbird\\.com|nitter\\.projectsegfau\\.lt|nitter\\.eu\\.projectsegfau\\.lt|singapore\\.unofficialbird\\.com|canada\\.unofficialbird\\.com|india\\.unofficialbird\\.com|nederland\\.unofficialbird\\.com|uk\\.unofficialbird\\.com|n\\.l5\\.ca|nitter\\.slipfox\\.xyz|nitter\\.soopy\\.moe|nitter\\.qwik\\.space|read\\.whatever\\.social|nitter\\.rawbit\\.ninja|nt\\.vern\\.cc|ntr\\.odyssey346\\.dev|nitter\\.ir|nitter\\.privacytools\\.io|nitter\\.sneed\\.network|n\\.sneed\\.network|nitter\\.manasiwibi\\.com|nitter\\.smnz\\.de|nitter\\.twei\\.space|nitter\\.inpt\\.fr|nitter\\.d420\\.de|nitter\\.caioalonso\\.com|nitter\\.at|nitter\\.drivet\\.xyz|nitter\\.pw|nitter\\.nicfab\\.eu|bird\\.habedieeh\\.re|nitter\\.hostux\\.net|nitter\\.adminforge\\.de|nitter\\.platypush\\.tech|nitter\\.mask\\.sh|nitter\\.pufe\\.org|nitter\\.us\\.projectsegfau\\.lt|nitter\\.arcticfoxes\\.net|t\\.com\\.sb|nitter\\.kling\\.gg|nitter\\.ktachibana\\.party|nitter\\.riverside\\.rocks|nitter\\.girlboss\\.ceo|nitter\\.lunar\\.icu|twitter\\.moe\\.ngo|nitter\\.freedit\\.eu|ntr\\.frail\\.duckdns\\.org|nitter\\.librenode\\.org|n\\.opnxng\\.com|nitter\\.plus\\.st|nitter\\.ethibox\\.fr|nitter\\.net|is\\-nitter\\.resolv\\.ee|lu\\-nitter\\.resolv\\.ee|nitter\\.13ad\\.de|nitter\\.40two\\.app|nitter\\.cattube\\.org|nitter\\.cc|nitter\\.dark\\.fail|nitter\\.himiko\\.cloud|nitter\\.koyu\\.space|nitter\\.mailstation\\.de|nitter\\.mastodont\\.cat|nitter\\.tedomum\\.net|nitter\\.tokhmi\\.xyz|nitter\\.weaponizedhumiliation\\.com|nitter\\.vxempire\\.xyz|tweet\\.lambda\\.dance|nitter\\.ca|nitter\\.42l\\.fr|nitter\\.pussthecat\\.org|nitter\\.nixnet\\.services|nitter\\.eu|nitter\\.actionsack\\.com|nitter\\.hu|twitr\\.gq|nittereu\\.moomoo\\.me|bird\\.from\\.tf|twitter\\.grimneko\\.de|nitter\\.alefvanoon\\.xyz|n\\.hyperborea\\.cloud|twitter\\.mstdn\\.social|nitter\\.silkky\\.cloud|nttr\\.stream|fuckthesacklers\\.network|nitter\\.govt\\.land|nitter\\.datatunnel\\.xyz|de\\.nttr\\.stream|twtr\\.bch\\.bar|nitter\\.exonip\\.de|nitter\\.mastodon\\.pro|nitter\\.notraxx\\.ch|nitter\\.skrep\\.in|nitter\\.snopyta\\.org)/(?P<uploader_id>.+)/status/(?P<id>[0-9]+)(#.)?'
  5794. _RETURN_TYPE = 'video'
  5795. class NobelPrizeIE(LazyLoadExtractor):
  5796. _module = 'yt_dlp.extractor.nobelprize'
  5797. IE_NAME = 'NobelPrize'
  5798. _VALID_URL = 'https?://(?:www\\.)?nobelprize\\.org/mediaplayer.*?\\bid=(?P<id>\\d+)'
  5799. _WORKING = False
  5800. _RETURN_TYPE = 'video'
  5801. class NoicePodcastIE(LazyLoadExtractor):
  5802. _module = 'yt_dlp.extractor.noice'
  5803. IE_NAME = 'NoicePodcast'
  5804. _VALID_URL = 'https?://open\\.noice\\.id/content/(?P<id>[a-fA-F0-9-]+)'
  5805. _RETURN_TYPE = 'video'
  5806. class NonkTubeIE(NuevoBaseIE):
  5807. _module = 'yt_dlp.extractor.nonktube'
  5808. IE_NAME = 'NonkTube'
  5809. _VALID_URL = 'https?://(?:www\\.)?nonktube\\.com/(?:(?:video|embed)/|media/nuevo/embed\\.php\\?.*?\\bid=)(?P<id>\\d+)'
  5810. age_limit = 18
  5811. _RETURN_TYPE = 'video'
  5812. class NoodleMagazineIE(LazyLoadExtractor):
  5813. _module = 'yt_dlp.extractor.noodlemagazine'
  5814. IE_NAME = 'NoodleMagazine'
  5815. _VALID_URL = 'https?://(?:www|adult\\.)?noodlemagazine\\.com/watch/(?P<id>[0-9-_]+)'
  5816. age_limit = 18
  5817. _RETURN_TYPE = 'video'
  5818. class NoovoIE(LazyLoadExtractor):
  5819. _module = 'yt_dlp.extractor.noovo'
  5820. IE_NAME = 'Noovo'
  5821. _VALID_URL = 'https?://(?:[^/]+\\.)?noovo\\.ca/videos/(?P<id>[^/]+/[^/?#&]+)'
  5822. _RETURN_TYPE = 'video'
  5823. class NOSNLArticleIE(LazyLoadExtractor):
  5824. _module = 'yt_dlp.extractor.nosnl'
  5825. IE_NAME = 'NOSNLArticle'
  5826. _VALID_URL = 'https?://nos\\.nl/(?P<type>video|(\\w+/)?\\w+)/?\\d+-(?P<display_id>[\\w-]+)'
  5827. _RETURN_TYPE = 'any'
  5828. class NovaEmbedIE(LazyLoadExtractor):
  5829. _module = 'yt_dlp.extractor.nova'
  5830. IE_NAME = 'NovaEmbed'
  5831. _VALID_URL = 'https?://media(?:tn)?\\.cms\\.nova\\.cz/embed/(?P<id>[^/?#&]+)'
  5832. _RETURN_TYPE = 'video'
  5833. class NovaIE(LazyLoadExtractor):
  5834. _module = 'yt_dlp.extractor.nova'
  5835. IE_NAME = 'Nova'
  5836. _VALID_URL = 'https?://(?:[^.]+\\.)?(?P<site>tv(?:noviny)?|tn|novaplus|vymena|fanda|krasna|doma|prask)\\.nova\\.cz/(?:[^/]+/)+(?P<id>[^/]+?)(?:\\.html|/|$)'
  5837. IE_DESC = 'TN.cz, Prásk.tv, Nova.cz, Novaplus.cz, FANDA.tv, Krásná.cz and Doma.cz'
  5838. _RETURN_TYPE = 'video'
  5839. class NovaPlayIE(LazyLoadExtractor):
  5840. _module = 'yt_dlp.extractor.novaplay'
  5841. IE_NAME = 'NovaPlay'
  5842. _VALID_URL = 'https?://play\\.nova\\.bg/video/[^?#]+/(?P<id>\\d+)'
  5843. _RETURN_TYPE = 'video'
  5844. class NownessBaseIE(LazyLoadExtractor):
  5845. _module = 'yt_dlp.extractor.nowness'
  5846. IE_NAME = 'NownessBase'
  5847. class NownessIE(NownessBaseIE):
  5848. _module = 'yt_dlp.extractor.nowness'
  5849. IE_NAME = 'nowness'
  5850. _VALID_URL = 'https?://(?:(?:www|cn)\\.)?nowness\\.com/(?:story|(?:series|category)/[^/]+)/(?P<id>[^/]+?)(?:$|[?#])'
  5851. _RETURN_TYPE = 'video'
  5852. class NownessPlaylistIE(NownessBaseIE):
  5853. _module = 'yt_dlp.extractor.nowness'
  5854. IE_NAME = 'nowness:playlist'
  5855. _VALID_URL = 'https?://(?:(?:www|cn)\\.)?nowness\\.com/playlist/(?P<id>\\d+)'
  5856. _RETURN_TYPE = 'playlist'
  5857. class NownessSeriesIE(NownessBaseIE):
  5858. _module = 'yt_dlp.extractor.nowness'
  5859. IE_NAME = 'nowness:series'
  5860. _VALID_URL = 'https?://(?:(?:www|cn)\\.)?nowness\\.com/series/(?P<id>[^/]+?)(?:$|[?#])'
  5861. _RETURN_TYPE = 'playlist'
  5862. class NozIE(LazyLoadExtractor):
  5863. _module = 'yt_dlp.extractor.noz'
  5864. IE_NAME = 'Noz'
  5865. _VALID_URL = 'https?://(?:www\\.)?noz\\.de/video/(?P<id>[0-9]+)/'
  5866. _WORKING = False
  5867. _RETURN_TYPE = 'video'
  5868. class NPOIE(LazyLoadExtractor):
  5869. _module = 'yt_dlp.extractor.npo'
  5870. IE_NAME = 'npo'
  5871. _VALID_URL = '(?x)\n (?:\n npo:|\n https?://\n (?:www\\.)?\n (?:\n npo\\.nl/(?:[^/]+/)*|\n (?:ntr|npostart)\\.nl/(?:[^/]+/){2,}|\n omroepwnl\\.nl/video/fragment/[^/]+__|\n (?:zapp|npo3)\\.nl/(?:[^/]+/){2,}\n )\n )\n (?P<id>[^/?#]+)\n '
  5872. IE_DESC = 'npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl'
  5873. _RETURN_TYPE = 'video'
  5874. @classmethod
  5875. def suitable(cls, url):
  5876. return (False if any(ie.suitable(url)
  5877. for ie in (NPOLiveIE, NPORadioIE, NPORadioFragmentIE))
  5878. else super().suitable(url))
  5879. class NPOPlaylistBaseIE(NPOIE):
  5880. _module = 'yt_dlp.extractor.npo'
  5881. IE_NAME = 'npo'
  5882. _VALID_URL = '(?x)\n (?:\n npo:|\n https?://\n (?:www\\.)?\n (?:\n npo\\.nl/(?:[^/]+/)*|\n (?:ntr|npostart)\\.nl/(?:[^/]+/){2,}|\n omroepwnl\\.nl/video/fragment/[^/]+__|\n (?:zapp|npo3)\\.nl/(?:[^/]+/){2,}\n )\n )\n (?P<id>[^/?#]+)\n '
  5883. IE_DESC = 'npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl'
  5884. @classmethod
  5885. def suitable(cls, url):
  5886. return (False if any(ie.suitable(url)
  5887. for ie in (NPOLiveIE, NPORadioIE, NPORadioFragmentIE))
  5888. else super().suitable(url))
  5889. class VPROIE(NPOPlaylistBaseIE):
  5890. _module = 'yt_dlp.extractor.npo'
  5891. IE_NAME = 'vpro'
  5892. _VALID_URL = 'https?://(?:www\\.)?(?:(?:tegenlicht\\.)?vpro|2doc)\\.nl/(?:[^/]+/)*(?P<id>[^/]+)\\.html'
  5893. IE_DESC = 'npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl'
  5894. _RETURN_TYPE = 'any'
  5895. @classmethod
  5896. def suitable(cls, url):
  5897. return (False if any(ie.suitable(url)
  5898. for ie in (NPOLiveIE, NPORadioIE, NPORadioFragmentIE))
  5899. else super().suitable(url))
  5900. class WNLIE(NPOPlaylistBaseIE):
  5901. _module = 'yt_dlp.extractor.npo'
  5902. IE_NAME = 'wnl'
  5903. _VALID_URL = 'https?://(?:www\\.)?omroepwnl\\.nl/video/detail/(?P<id>[^/]+)__\\d+'
  5904. IE_DESC = 'npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl'
  5905. _RETURN_TYPE = 'playlist'
  5906. @classmethod
  5907. def suitable(cls, url):
  5908. return (False if any(ie.suitable(url)
  5909. for ie in (NPOLiveIE, NPORadioIE, NPORadioFragmentIE))
  5910. else super().suitable(url))
  5911. class AndereTijdenIE(NPOPlaylistBaseIE):
  5912. _module = 'yt_dlp.extractor.npo'
  5913. IE_NAME = 'anderetijden'
  5914. _VALID_URL = 'https?://(?:www\\.)?anderetijden\\.nl/programma/(?:[^/]+/)+(?P<id>[^/?#&]+)'
  5915. IE_DESC = 'npo.nl, ntr.nl, omroepwnl.nl, zapp.nl and npo3.nl'
  5916. _RETURN_TYPE = 'playlist'
  5917. @classmethod
  5918. def suitable(cls, url):
  5919. return (False if any(ie.suitable(url)
  5920. for ie in (NPOLiveIE, NPORadioIE, NPORadioFragmentIE))
  5921. else super().suitable(url))
  5922. class NPODataMidEmbedIE(LazyLoadExtractor):
  5923. _module = 'yt_dlp.extractor.npo'
  5924. IE_NAME = 'NPODataMidEmbed'
  5925. class HetKlokhuisIE(NPODataMidEmbedIE):
  5926. _module = 'yt_dlp.extractor.npo'
  5927. IE_NAME = 'hetklokhuis'
  5928. _VALID_URL = 'https?://(?:www\\.)?hetklokhuis\\.nl/[^/]+/\\d+/(?P<id>[^/?#&]+)'
  5929. _RETURN_TYPE = 'video'
  5930. class NPOLiveIE(LazyLoadExtractor):
  5931. _module = 'yt_dlp.extractor.npo'
  5932. IE_NAME = 'npo.nl:live'
  5933. _VALID_URL = 'https?://(?:www\\.)?npo(?:start)?\\.nl/live(?:/(?P<id>[^/?#&]+))?'
  5934. _RETURN_TYPE = 'video'
  5935. class NPORadioFragmentIE(LazyLoadExtractor):
  5936. _module = 'yt_dlp.extractor.npo'
  5937. IE_NAME = 'npo.nl:radio:fragment'
  5938. _VALID_URL = 'https?://(?:www\\.)?npo\\.nl/radio/[^/]+/fragment/(?P<id>\\d+)'
  5939. _RETURN_TYPE = 'video'
  5940. class NPORadioIE(LazyLoadExtractor):
  5941. _module = 'yt_dlp.extractor.npo'
  5942. IE_NAME = 'npo.nl:radio'
  5943. _VALID_URL = 'https?://(?:www\\.)?npo\\.nl/radio/(?P<id>[^/]+)'
  5944. _RETURN_TYPE = 'video'
  5945. @classmethod
  5946. def suitable(cls, url):
  5947. return False if NPORadioFragmentIE.suitable(url) else super().suitable(url)
  5948. class SchoolTVIE(NPODataMidEmbedIE):
  5949. _module = 'yt_dlp.extractor.npo'
  5950. IE_NAME = 'schooltv'
  5951. _VALID_URL = 'https?://(?:www\\.)?schooltv\\.nl/video/(?P<id>[^/?#&]+)'
  5952. _RETURN_TYPE = 'video'
  5953. class NprIE(LazyLoadExtractor):
  5954. _module = 'yt_dlp.extractor.npr'
  5955. IE_NAME = 'Npr'
  5956. _VALID_URL = 'https?://(?:www\\.)?npr\\.org/(?:sections/[^/]+/)?\\d{4}/\\d{2}/\\d{2}/(?P<id>\\d+)'
  5957. _RETURN_TYPE = 'any'
  5958. class NRKBaseIE(LazyLoadExtractor):
  5959. _module = 'yt_dlp.extractor.nrk'
  5960. IE_NAME = 'NRKBase'
  5961. class NRKIE(NRKBaseIE):
  5962. _module = 'yt_dlp.extractor.nrk'
  5963. IE_NAME = 'NRK'
  5964. _VALID_URL = '(?x)\n (?:\n nrk:|\n https?://\n (?:\n (?:www\\.)?nrk\\.no/video/(?:PS\\*|[^_]+_)|\n v8[-.]psapi\\.nrk\\.no/mediaelement/\n )\n )\n (?P<id>[^?\\#&]+)\n '
  5965. _RETURN_TYPE = 'video'
  5966. class NRKTVIE(LazyLoadExtractor):
  5967. _module = 'yt_dlp.extractor.nrk'
  5968. IE_NAME = 'NRKTV'
  5969. _VALID_URL = 'https?://(?:tv|radio)\\.nrk(?:super)?\\.no/(?:[^/]+/)*(?P<id>[a-zA-Z]{4}\\d{8})'
  5970. IE_DESC = 'NRK TV and NRK Radio'
  5971. age_limit = 6
  5972. _RETURN_TYPE = 'video'
  5973. class NRKPlaylistBaseIE(LazyLoadExtractor):
  5974. _module = 'yt_dlp.extractor.nrk'
  5975. IE_NAME = 'NRKPlaylistBase'
  5976. class NRKPlaylistIE(NRKPlaylistBaseIE):
  5977. _module = 'yt_dlp.extractor.nrk'
  5978. IE_NAME = 'NRKPlaylist'
  5979. _VALID_URL = 'https?://(?:www\\.)?nrk\\.no/(?!video|skole)(?:[^/]+/)+(?P<id>[^/]+)'
  5980. _RETURN_TYPE = 'playlist'
  5981. class NRKRadioPodkastIE(LazyLoadExtractor):
  5982. _module = 'yt_dlp.extractor.nrk'
  5983. IE_NAME = 'NRKRadioPodkast'
  5984. _VALID_URL = 'https?://radio\\.nrk\\.no/pod[ck]ast/(?:[^/]+/)+(?P<id>l_[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  5985. _RETURN_TYPE = 'video'
  5986. class NRKSkoleIE(LazyLoadExtractor):
  5987. _module = 'yt_dlp.extractor.nrk'
  5988. IE_NAME = 'NRKSkole'
  5989. _VALID_URL = 'https?://(?:www\\.)?nrk\\.no/skole/?\\?.*\\bmediaId=(?P<id>\\d+)'
  5990. IE_DESC = 'NRK Skole'
  5991. _RETURN_TYPE = 'video'
  5992. class NRKTVDirekteIE(NRKTVIE):
  5993. _module = 'yt_dlp.extractor.nrk'
  5994. IE_NAME = 'NRKTVDirekte'
  5995. _VALID_URL = 'https?://(?:tv|radio)\\.nrk\\.no/direkte/(?P<id>[^/?#&]+)'
  5996. IE_DESC = 'NRK TV Direkte and NRK Radio Direkte'
  5997. class NRKTVEpisodeIE(LazyLoadExtractor):
  5998. _module = 'yt_dlp.extractor.nrk'
  5999. IE_NAME = 'NRKTVEpisode'
  6000. _VALID_URL = 'https?://tv\\.nrk\\.no/serie/(?P<id>[^/]+/sesong/(?P<season_number>\\d+)/episode/(?P<episode_number>\\d+))'
  6001. age_limit = 6
  6002. _RETURN_TYPE = 'video'
  6003. class NRKTVEpisodesIE(NRKPlaylistBaseIE):
  6004. _module = 'yt_dlp.extractor.nrk'
  6005. IE_NAME = 'NRKTVEpisodes'
  6006. _VALID_URL = 'https?://tv\\.nrk\\.no/program/[Ee]pisodes/[^/]+/(?P<id>\\d+)'
  6007. _RETURN_TYPE = 'playlist'
  6008. class NRKTVSerieBaseIE(NRKBaseIE):
  6009. _module = 'yt_dlp.extractor.nrk'
  6010. IE_NAME = 'NRKTVSerieBase'
  6011. class NRKTVSeasonIE(NRKTVSerieBaseIE):
  6012. _module = 'yt_dlp.extractor.nrk'
  6013. IE_NAME = 'NRKTVSeason'
  6014. _VALID_URL = '(?x)\n https?://\n (?P<domain>tv|radio)\\.nrk\\.no/\n (?P<serie_kind>serie|pod[ck]ast)/\n (?P<serie>[^/]+)/\n (?:\n (?:sesong/)?(?P<id>\\d+)|\n sesong/(?P<id_2>[^/?#&]+)\n )\n '
  6015. _RETURN_TYPE = 'playlist'
  6016. @classmethod
  6017. def suitable(cls, url):
  6018. return (False if NRKTVIE.suitable(url) or NRKTVEpisodeIE.suitable(url) or NRKRadioPodkastIE.suitable(url)
  6019. else super().suitable(url))
  6020. class NRKTVSeriesIE(NRKTVSerieBaseIE):
  6021. _module = 'yt_dlp.extractor.nrk'
  6022. IE_NAME = 'NRKTVSeries'
  6023. _VALID_URL = 'https?://(?P<domain>(?:tv|radio)\\.nrk|(?:tv\\.)?nrksuper)\\.no/(?P<serie_kind>serie|pod[ck]ast)/(?P<id>[^/]+)'
  6024. _RETURN_TYPE = 'playlist'
  6025. @classmethod
  6026. def suitable(cls, url):
  6027. return (
  6028. False if any(ie.suitable(url)
  6029. for ie in (NRKTVIE, NRKTVEpisodeIE, NRKRadioPodkastIE, NRKTVSeasonIE))
  6030. else super().suitable(url))
  6031. class NRLTVIE(LazyLoadExtractor):
  6032. _module = 'yt_dlp.extractor.nrl'
  6033. IE_NAME = 'NRLTV'
  6034. _VALID_URL = 'https?://(?:www\\.)?nrl\\.com/tv(/[^/]+)*/(?P<id>[^/?&#]+)'
  6035. _WORKING = False
  6036. _RETURN_TYPE = 'video'
  6037. class NTSLiveIE(LazyLoadExtractor):
  6038. _module = 'yt_dlp.extractor.nts'
  6039. IE_NAME = 'nts.live'
  6040. _VALID_URL = 'https?://(?:www\\.)?nts\\.live/shows/[^/?#]+/episodes/(?P<id>[^/?#]+)'
  6041. _RETURN_TYPE = 'video'
  6042. class NTVCoJpCUIE(LazyLoadExtractor):
  6043. _module = 'yt_dlp.extractor.ntvcojp'
  6044. IE_NAME = 'cu.ntv.co.jp'
  6045. _VALID_URL = 'https?://cu\\.ntv\\.co\\.jp/(?!program)(?P<id>[^/?&#]+)'
  6046. IE_DESC = 'Nippon Television Network'
  6047. _RETURN_TYPE = 'video'
  6048. class NTVDeIE(LazyLoadExtractor):
  6049. _module = 'yt_dlp.extractor.ntvde'
  6050. IE_NAME = 'n-tv.de'
  6051. _VALID_URL = 'https?://(?:www\\.)?n-tv\\.de/mediathek/(?:videos|magazine)/[^/?#]+/[^/?#]+-article(?P<id>[^/?#]+)\\.html'
  6052. _RETURN_TYPE = 'video'
  6053. class NTVRuIE(LazyLoadExtractor):
  6054. _module = 'yt_dlp.extractor.ntvru'
  6055. IE_NAME = 'ntv.ru'
  6056. _VALID_URL = 'https?://(?:www\\.)?ntv\\.ru/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  6057. _RETURN_TYPE = 'video'
  6058. class NubilesPornIE(LazyLoadExtractor):
  6059. _module = 'yt_dlp.extractor.nubilesporn'
  6060. IE_NAME = 'NubilesPorn'
  6061. _VALID_URL = '(?x)\n https://members\\.nubiles-porn\\.com/video/watch/(?P<id>\\d+)\n (?:/(?P<display_id>[\\w\\-]+-s(?P<season>\\d+)e(?P<episode>\\d+)))?\n '
  6062. _NETRC_MACHINE = 'nubiles-porn'
  6063. age_limit = 18
  6064. _RETURN_TYPE = 'video'
  6065. class NuumBaseIE(LazyLoadExtractor):
  6066. _module = 'yt_dlp.extractor.nuum'
  6067. IE_NAME = 'NuumBase'
  6068. class NuumLiveIE(NuumBaseIE):
  6069. _module = 'yt_dlp.extractor.nuum'
  6070. IE_NAME = 'nuum:live'
  6071. _VALID_URL = 'https?://nuum\\.ru/channel/(?P<id>[^/#?]+)/?(?:$|[#?])'
  6072. class NuumMediaIE(NuumBaseIE):
  6073. _module = 'yt_dlp.extractor.nuum'
  6074. IE_NAME = 'nuum:media'
  6075. _VALID_URL = 'https?://nuum\\.ru/(?:streams|videos|clips)/(?P<id>[\\d]+)'
  6076. _RETURN_TYPE = 'video'
  6077. class NuumTabIE(NuumBaseIE):
  6078. _module = 'yt_dlp.extractor.nuum'
  6079. IE_NAME = 'nuum:tab'
  6080. _VALID_URL = 'https?://nuum\\.ru/channel/(?P<id>[^/#?]+)/(?P<type>streams|videos|clips)'
  6081. _RETURN_TYPE = 'playlist'
  6082. class NuvidIE(LazyLoadExtractor):
  6083. _module = 'yt_dlp.extractor.nuvid'
  6084. IE_NAME = 'Nuvid'
  6085. _VALID_URL = 'https?://(?:www|m)\\.nuvid\\.com/video/(?P<id>[0-9]+)'
  6086. age_limit = 18
  6087. _RETURN_TYPE = 'video'
  6088. class NYTimesBaseIE(LazyLoadExtractor):
  6089. _module = 'yt_dlp.extractor.nytimes'
  6090. IE_NAME = 'NYTimesBase'
  6091. class NYTimesArticleIE(NYTimesBaseIE):
  6092. _module = 'yt_dlp.extractor.nytimes'
  6093. IE_NAME = 'NYTimesArticle'
  6094. _VALID_URL = 'https?://(?:www\\.)?nytimes\\.com/\\d{4}/\\d{2}/\\d{2}/(?!books|podcasts)[^/?#]+/(?:\\w+/)?(?P<id>[^./?#]+)(?:\\.html)?'
  6095. _RETURN_TYPE = 'any'
  6096. class NYTimesCookingIE(NYTimesBaseIE):
  6097. _module = 'yt_dlp.extractor.nytimes'
  6098. IE_NAME = 'NYTimesCookingGuide'
  6099. _VALID_URL = 'https?://cooking\\.nytimes\\.com/guides/(?P<id>[\\w-]+)'
  6100. _RETURN_TYPE = 'any'
  6101. class NYTimesCookingRecipeIE(LazyLoadExtractor):
  6102. _module = 'yt_dlp.extractor.nytimes'
  6103. IE_NAME = 'NYTimesCookingRecipe'
  6104. _VALID_URL = 'https?://cooking\\.nytimes\\.com/recipes/(?P<id>\\d+)'
  6105. _RETURN_TYPE = 'video'
  6106. class NYTimesIE(NYTimesBaseIE):
  6107. _module = 'yt_dlp.extractor.nytimes'
  6108. IE_NAME = 'NYTimes'
  6109. _VALID_URL = 'https?://(?:(?:www\\.)?nytimes\\.com/video/(?:[^/]+/)+?|graphics8\\.nytimes\\.com/bcvideo/\\d+(?:\\.\\d+)?/iframe/embed\\.html\\?videoId=)(?P<id>\\d+)'
  6110. _RETURN_TYPE = 'video'
  6111. class NZHeraldIE(LazyLoadExtractor):
  6112. _module = 'yt_dlp.extractor.nzherald'
  6113. IE_NAME = 'nzherald'
  6114. _VALID_URL = 'https?://(?:www\\.)?nzherald\\.co\\.nz/[\\w\\/-]+\\/(?P<id>[A-Z0-9]+)'
  6115. _RETURN_TYPE = 'video'
  6116. class NZOnScreenIE(LazyLoadExtractor):
  6117. _module = 'yt_dlp.extractor.nzonscreen'
  6118. IE_NAME = 'NZOnScreen'
  6119. _VALID_URL = 'https?://www\\.nzonscreen\\.com/title/(?P<id>[^/?#]+)'
  6120. _RETURN_TYPE = 'video'
  6121. class NZZIE(LazyLoadExtractor):
  6122. _module = 'yt_dlp.extractor.nzz'
  6123. IE_NAME = 'NZZ'
  6124. _VALID_URL = 'https?://(?:www\\.)?nzz\\.ch/(?:[^/]+/)*[^/?#]+-ld\\.(?P<id>\\d+)'
  6125. _RETURN_TYPE = 'playlist'
  6126. class OnDemandChinaEpisodeIE(LazyLoadExtractor):
  6127. _module = 'yt_dlp.extractor.odkmedia'
  6128. IE_NAME = 'OnDemandChinaEpisode'
  6129. _VALID_URL = 'https?://www\\.ondemandchina\\.com/\\w+/watch/(?P<series>[\\w-]+)/(?P<id>ep-(?P<ep>\\d+))'
  6130. _RETURN_TYPE = 'video'
  6131. class OdnoklassnikiIE(LazyLoadExtractor):
  6132. _module = 'yt_dlp.extractor.odnoklassniki'
  6133. IE_NAME = 'Odnoklassniki'
  6134. _VALID_URL = '(?x)\n https?://\n (?:(?:www|m|mobile)\\.)?\n (?:odnoklassniki|ok)\\.ru/\n (?:\n video(?P<embed>embed)?/|\n web-api/video/moviePlayer/|\n live/|\n dk\\?.*?st\\.mvId=\n )\n (?P<id>[\\d-]+)\n '
  6135. _RETURN_TYPE = 'video'
  6136. class OfTVIE(LazyLoadExtractor):
  6137. _module = 'yt_dlp.extractor.oftv'
  6138. IE_NAME = 'OfTV'
  6139. _VALID_URL = 'https?://(?:www\\.)?of\\.tv/video/(?P<id>\\w+)'
  6140. _RETURN_TYPE = 'video'
  6141. class OfTVPlaylistIE(LazyLoadExtractor):
  6142. _module = 'yt_dlp.extractor.oftv'
  6143. IE_NAME = 'OfTVPlaylist'
  6144. _VALID_URL = 'https?://(?:www\\.)?of\\.tv/creators/(?P<id>[a-zA-Z0-9-]+)/?(?:$|[?#])'
  6145. _RETURN_TYPE = 'playlist'
  6146. class OktoberfestTVIE(LazyLoadExtractor):
  6147. _module = 'yt_dlp.extractor.oktoberfesttv'
  6148. IE_NAME = 'OktoberfestTV'
  6149. _VALID_URL = 'https?://(?:www\\.)?oktoberfest-tv\\.de/[^/]+/[^/]+/video/(?P<id>[^/?#]+)'
  6150. _RETURN_TYPE = 'video'
  6151. class OlympicsReplayIE(LazyLoadExtractor):
  6152. _module = 'yt_dlp.extractor.olympics'
  6153. IE_NAME = 'OlympicsReplay'
  6154. _VALID_URL = 'https?://(?:www\\.)?olympics\\.com/[a-z]{2}/(?:paris-2024/)?(?:replay|videos?|original-series/episode)/(?P<id>[\\w-]+)'
  6155. _RETURN_TYPE = 'video'
  6156. class On24IE(LazyLoadExtractor):
  6157. _module = 'yt_dlp.extractor.on24'
  6158. IE_NAME = 'on24'
  6159. _VALID_URL = '(?x)\n https?://event\\.on24\\.com/(?:\n wcc/r/(?P<id_1>\\d{7})/(?P<key_1>[0-9A-F]{32})|\n eventRegistration/(?:console/EventConsoleApollo|EventLobbyServlet\\?target=lobby30)\n \\.jsp\\?(?:[^/#?]*&)?eventid=(?P<id_2>\\d{7})[^/#?]*&key=(?P<key_2>[0-9A-F]{32})\n )'
  6160. IE_DESC = 'ON24'
  6161. _RETURN_TYPE = 'video'
  6162. class OnDemandKoreaIE(LazyLoadExtractor):
  6163. _module = 'yt_dlp.extractor.ondemandkorea'
  6164. IE_NAME = 'OnDemandKorea'
  6165. _VALID_URL = 'https?://(?:www\\.)?ondemandkorea\\.com/(?:en/)?player/vod/[a-z0-9-]+\\?(?:[^#]+&)?contentId=(?P<id>\\d+)'
  6166. age_limit = 18
  6167. _RETURN_TYPE = 'video'
  6168. class OnDemandKoreaProgramIE(LazyLoadExtractor):
  6169. _module = 'yt_dlp.extractor.ondemandkorea'
  6170. IE_NAME = 'OnDemandKoreaProgram'
  6171. _VALID_URL = 'https?://(?:www\\.)?ondemandkorea\\.com/(?:en/)?player/vod/(?P<id>[a-z0-9-]+)(?:$|#)'
  6172. _RETURN_TYPE = 'playlist'
  6173. class OneFootballIE(LazyLoadExtractor):
  6174. _module = 'yt_dlp.extractor.onefootball'
  6175. IE_NAME = 'OneFootball'
  6176. _VALID_URL = 'https?://(?:www\\.)?onefootball\\.com/[a-z]{2}/video/[^/&?#]+-(?P<id>\\d+)'
  6177. _RETURN_TYPE = 'video'
  6178. class OneNewsNZIE(LazyLoadExtractor):
  6179. _module = 'yt_dlp.extractor.onenewsnz'
  6180. IE_NAME = '1News'
  6181. _VALID_URL = 'https?://(?:www\\.)?(?:1|one)news\\.co\\.nz/\\d+/\\d+/\\d+/(?P<id>[^/?#&]+)'
  6182. IE_DESC = '1news.co.nz article videos'
  6183. _RETURN_TYPE = 'playlist'
  6184. class OnePlacePodcastIE(LazyLoadExtractor):
  6185. _module = 'yt_dlp.extractor.oneplace'
  6186. IE_NAME = 'OnePlacePodcast'
  6187. _VALID_URL = 'https?://www\\.oneplace\\.com/[\\w]+/[^/]+/listen/[\\w-]+-(?P<id>\\d+)'
  6188. _RETURN_TYPE = 'video'
  6189. class OnetChannelIE(OnetBaseIE):
  6190. _module = 'yt_dlp.extractor.onet'
  6191. IE_NAME = 'onet.tv:channel'
  6192. _VALID_URL = 'https?://(?:(?:www\\.)?onet\\.tv|onet100\\.vod\\.pl)/[a-z]/(?P<id>[a-z]+)(?:[?#]|$)'
  6193. _RETURN_TYPE = 'playlist'
  6194. class OnetIE(OnetBaseIE):
  6195. _module = 'yt_dlp.extractor.onet'
  6196. IE_NAME = 'onet.tv'
  6197. _VALID_URL = 'https?://(?:(?:www\\.)?onet\\.tv|onet100\\.vod\\.pl)/[a-z]/[a-z]+/(?P<display_id>[0-9a-z-]+)/(?P<id>[0-9a-z]+)'
  6198. _RETURN_TYPE = 'video'
  6199. class OnetMVPIE(OnetBaseIE):
  6200. _module = 'yt_dlp.extractor.onet'
  6201. IE_NAME = 'OnetMVP'
  6202. _VALID_URL = 'onetmvp:(?P<id>\\d+\\.\\d+)'
  6203. class OnetPlIE(LazyLoadExtractor):
  6204. _module = 'yt_dlp.extractor.onet'
  6205. IE_NAME = 'onet.pl'
  6206. _VALID_URL = 'https?://(?:[^/]+\\.)?(?:onet|businessinsider\\.com|plejada)\\.pl/(?:[^/]+/)+(?P<id>[0-9a-z]+)'
  6207. _RETURN_TYPE = 'video'
  6208. class OnionStudiosIE(LazyLoadExtractor):
  6209. _module = 'yt_dlp.extractor.onionstudios'
  6210. IE_NAME = 'OnionStudios'
  6211. _VALID_URL = 'https?://(?:www\\.)?onionstudios\\.com/(?:video(?:s/[^/]+-|/)|embed\\?.*\\bid=)(?P<id>\\d+)(?!-)'
  6212. _RETURN_TYPE = 'video'
  6213. class OpencastBaseIE(LazyLoadExtractor):
  6214. _module = 'yt_dlp.extractor.opencast'
  6215. IE_NAME = 'OpencastBase'
  6216. class OpencastIE(OpencastBaseIE):
  6217. _module = 'yt_dlp.extractor.opencast'
  6218. IE_NAME = 'Opencast'
  6219. _VALID_URL = '(?x)\n https?://(?P<host>(?:\n opencast\\.informatik\\.kit\\.edu|\n electures\\.uni-muenster\\.de|\n oc-presentation\\.ltcc\\.tuwien\\.ac\\.at|\n medien\\.ph-noe\\.ac\\.at|\n oc-video\\.ruhr-uni-bochum\\.de|\n oc-video1\\.ruhr-uni-bochum\\.de|\n opencast\\.informatik\\.uni-goettingen\\.de|\n heicast\\.uni-heidelberg\\.de|\n opencast\\.hawk\\.de:8080|\n opencast\\.hs-osnabrueck\\.de|\n video[0-9]+\\.virtuos\\.uni-osnabrueck\\.de|\n opencast\\.uni-koeln\\.de|\n media\\.opencast\\.hochschule-rhein-waal\\.de|\n matterhorn\\.dce\\.harvard\\.edu|\n hs-harz\\.opencast\\.uni-halle\\.de|\n videocampus\\.urz\\.uni-leipzig\\.de|\n media\\.uct\\.ac\\.za|\n vid\\.igb\\.illinois\\.edu|\n cursosabertos\\.c3sl\\.ufpr\\.br|\n mcmedia\\.missioncollege\\.org|\n clases\\.odon\\.edu\\.uy\n ))/paella/ui/watch\\.html\\?\n (?:[^#]+&)?id=(?P<id>[\\da-fA-F]{8}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{12})'
  6220. _RETURN_TYPE = 'video'
  6221. class OpencastPlaylistIE(OpencastBaseIE):
  6222. _module = 'yt_dlp.extractor.opencast'
  6223. IE_NAME = 'OpencastPlaylist'
  6224. _VALID_URL = '(?x)\n https?://(?P<host>(?:\n opencast\\.informatik\\.kit\\.edu|\n electures\\.uni-muenster\\.de|\n oc-presentation\\.ltcc\\.tuwien\\.ac\\.at|\n medien\\.ph-noe\\.ac\\.at|\n oc-video\\.ruhr-uni-bochum\\.de|\n oc-video1\\.ruhr-uni-bochum\\.de|\n opencast\\.informatik\\.uni-goettingen\\.de|\n heicast\\.uni-heidelberg\\.de|\n opencast\\.hawk\\.de:8080|\n opencast\\.hs-osnabrueck\\.de|\n video[0-9]+\\.virtuos\\.uni-osnabrueck\\.de|\n opencast\\.uni-koeln\\.de|\n media\\.opencast\\.hochschule-rhein-waal\\.de|\n matterhorn\\.dce\\.harvard\\.edu|\n hs-harz\\.opencast\\.uni-halle\\.de|\n videocampus\\.urz\\.uni-leipzig\\.de|\n media\\.uct\\.ac\\.za|\n vid\\.igb\\.illinois\\.edu|\n cursosabertos\\.c3sl\\.ufpr\\.br|\n mcmedia\\.missioncollege\\.org|\n clases\\.odon\\.edu\\.uy\n ))(?:\n /engage/ui/index\\.html\\?(?:[^#]+&)?epFrom=|\n /ltitools/index\\.html\\?(?:[^#]+&)?series=\n )(?P<id>[\\da-fA-F]{8}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{12})'
  6225. _RETURN_TYPE = 'playlist'
  6226. class OpenRecBaseIE(LazyLoadExtractor):
  6227. _module = 'yt_dlp.extractor.openrec'
  6228. IE_NAME = 'OpenRecBase'
  6229. class OpenRecCaptureIE(OpenRecBaseIE):
  6230. _module = 'yt_dlp.extractor.openrec'
  6231. IE_NAME = 'openrec:capture'
  6232. _VALID_URL = 'https?://(?:www\\.)?openrec\\.tv/capture/(?P<id>[^/]+)'
  6233. _RETURN_TYPE = 'video'
  6234. class OpenRecIE(OpenRecBaseIE):
  6235. _module = 'yt_dlp.extractor.openrec'
  6236. IE_NAME = 'openrec'
  6237. _VALID_URL = 'https?://(?:www\\.)?openrec\\.tv/live/(?P<id>[^/]+)'
  6238. class OpenRecMovieIE(OpenRecBaseIE):
  6239. _module = 'yt_dlp.extractor.openrec'
  6240. IE_NAME = 'openrec:movie'
  6241. _VALID_URL = 'https?://(?:www\\.)?openrec\\.tv/movie/(?P<id>[^/]+)'
  6242. _RETURN_TYPE = 'video'
  6243. class OraTVIE(LazyLoadExtractor):
  6244. _module = 'yt_dlp.extractor.ora'
  6245. IE_NAME = 'OraTV'
  6246. _VALID_URL = 'https?://(?:www\\.)?(?:ora\\.tv|unsafespeech\\.com)/([^/]+/)*(?P<id>[^/\\?#]+)'
  6247. _RETURN_TYPE = 'video'
  6248. class ORFIPTVIE(LazyLoadExtractor):
  6249. _module = 'yt_dlp.extractor.orf'
  6250. IE_NAME = 'orf:iptv'
  6251. _VALID_URL = 'https?://iptv\\.orf\\.at/(?:#/)?stories/(?P<id>\\d+)'
  6252. IE_DESC = 'iptv.ORF.at'
  6253. _RETURN_TYPE = 'video'
  6254. class ORFONIE(LazyLoadExtractor):
  6255. _module = 'yt_dlp.extractor.orf'
  6256. IE_NAME = 'orf:on'
  6257. _VALID_URL = 'https?://on\\.orf\\.at/video/(?P<id>\\d+)(?:/(?P<segment>\\d+))?'
  6258. _RETURN_TYPE = 'any'
  6259. class ORFFM4StoryIE(LazyLoadExtractor):
  6260. _module = 'yt_dlp.extractor.orf'
  6261. IE_NAME = 'orf:fm4:story'
  6262. _VALID_URL = 'https?://fm4\\.orf\\.at/stories/(?P<id>\\d+)'
  6263. IE_DESC = 'fm4.orf.at stories'
  6264. _RETURN_TYPE = 'playlist'
  6265. class ORFPodcastIE(LazyLoadExtractor):
  6266. _module = 'yt_dlp.extractor.orf'
  6267. IE_NAME = 'orf:podcast'
  6268. _VALID_URL = 'https?://sound\\.orf\\.at/podcast/(?P<station>bgl|fm4|ktn|noe|oe1|oe3|ooe|sbg|stm|tir|tv|vbg|wie)/(?P<show>[\\w-]+)/(?P<id>[\\w-]+)'
  6269. _RETURN_TYPE = 'video'
  6270. class ORFRadioIE(LazyLoadExtractor):
  6271. _module = 'yt_dlp.extractor.orf'
  6272. IE_NAME = 'orf:radio'
  6273. _VALID_URL = '(?x)\n https?://(?:\n (?P<station>fm4|noe|wien|burgenland|ooe|steiermark|kaernten|salzburg|tirol|vorarlberg|oe3|oe1)\\.orf\\.at/player|\n radiothek\\.orf\\.at/(?P<station2>fm4|noe|wien|burgenland|ooe|steiermark|kaernten|salzburg|tirol|vorarlberg|oe3|oe1)\n )/(?P<date>[0-9]+)/(?P<show>\\w+)'
  6274. _RETURN_TYPE = 'any'
  6275. class OutsideTVIE(LazyLoadExtractor):
  6276. _module = 'yt_dlp.extractor.outsidetv'
  6277. IE_NAME = 'OutsideTV'
  6278. _VALID_URL = 'https?://(?:www\\.)?outsidetv\\.com/(?:[^/]+/)*?play/[a-zA-Z0-9]{8}/\\d+/\\d+/(?P<id>[a-zA-Z0-9]{8})'
  6279. _RETURN_TYPE = 'video'
  6280. class OwnCloudIE(LazyLoadExtractor):
  6281. _module = 'yt_dlp.extractor.owncloud'
  6282. IE_NAME = 'OwnCloud'
  6283. _VALID_URL = 'https?://(?:(?:[^\\.]+\\.)?sciebo\\.de|cloud\\.uni-koblenz-landau\\.de)/s/(?P<id>[\\w.-]+)'
  6284. _RETURN_TYPE = 'video'
  6285. class PacktPubBaseIE(LazyLoadExtractor):
  6286. _module = 'yt_dlp.extractor.packtpub'
  6287. IE_NAME = 'PacktPubBase'
  6288. class PacktPubCourseIE(PacktPubBaseIE):
  6289. _module = 'yt_dlp.extractor.packtpub'
  6290. IE_NAME = 'PacktPubCourse'
  6291. _VALID_URL = '(?P<url>https?://(?:(?:www\\.)?packtpub\\.com/mapt|subscription\\.packtpub\\.com)/video/[^/]+/(?P<id>\\d+))'
  6292. _RETURN_TYPE = 'playlist'
  6293. @classmethod
  6294. def suitable(cls, url):
  6295. return False if PacktPubIE.suitable(url) else super().suitable(url)
  6296. class PacktPubIE(PacktPubBaseIE):
  6297. _module = 'yt_dlp.extractor.packtpub'
  6298. IE_NAME = 'PacktPub'
  6299. _VALID_URL = 'https?://(?:(?:www\\.)?packtpub\\.com/mapt|subscription\\.packtpub\\.com)/video/[^/]+/(?P<course_id>\\d+)/(?P<chapter_id>[^/]+)/(?P<id>[^/]+)(?:/(?P<display_id>[^/?&#]+))?'
  6300. _NETRC_MACHINE = 'packtpub'
  6301. _RETURN_TYPE = 'video'
  6302. class PalcoMP3BaseIE(LazyLoadExtractor):
  6303. _module = 'yt_dlp.extractor.palcomp3'
  6304. IE_NAME = 'PalcoMP3Base'
  6305. class PalcoMP3ArtistIE(PalcoMP3BaseIE):
  6306. _module = 'yt_dlp.extractor.palcomp3'
  6307. IE_NAME = 'PalcoMP3:artist'
  6308. _VALID_URL = 'https?://(?:www\\.)?palcomp3\\.com(?:\\.br)?/(?P<id>[^/?&#]+)'
  6309. _RETURN_TYPE = 'playlist'
  6310. @classmethod
  6311. def suitable(cls, url):
  6312. return False if PalcoMP3IE._match_valid_url(url) else super().suitable(url)
  6313. class PalcoMP3IE(PalcoMP3BaseIE):
  6314. _module = 'yt_dlp.extractor.palcomp3'
  6315. IE_NAME = 'PalcoMP3:song'
  6316. _VALID_URL = 'https?://(?:www\\.)?palcomp3\\.com(?:\\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)'
  6317. _RETURN_TYPE = 'video'
  6318. @classmethod
  6319. def suitable(cls, url):
  6320. return False if PalcoMP3VideoIE.suitable(url) else super().suitable(url)
  6321. class PalcoMP3VideoIE(PalcoMP3BaseIE):
  6322. _module = 'yt_dlp.extractor.palcomp3'
  6323. IE_NAME = 'PalcoMP3:video'
  6324. _VALID_URL = 'https?://(?:www\\.)?palcomp3\\.com(?:\\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)/?#clipe'
  6325. _RETURN_TYPE = 'video'
  6326. class PanoptoBaseIE(LazyLoadExtractor):
  6327. _module = 'yt_dlp.extractor.panopto'
  6328. IE_NAME = 'PanoptoBase'
  6329. class PanoptoIE(PanoptoBaseIE):
  6330. _module = 'yt_dlp.extractor.panopto'
  6331. IE_NAME = 'Panopto'
  6332. _VALID_URL = '(?P<base_url>https?://[\\w.-]+\\.panopto.(?:com|eu)/Panopto)/Pages/(Viewer|Embed)\\.aspx.*(?:\\?|&)id=(?P<id>[a-f0-9-]+)'
  6333. _RETURN_TYPE = 'video'
  6334. @classmethod
  6335. def suitable(cls, url):
  6336. return False if PanoptoPlaylistIE.suitable(url) else super().suitable(url)
  6337. class PanoptoListIE(PanoptoBaseIE):
  6338. _module = 'yt_dlp.extractor.panopto'
  6339. IE_NAME = 'PanoptoList'
  6340. _VALID_URL = '(?P<base_url>https?://[\\w.-]+\\.panopto.(?:com|eu)/Panopto)/Pages/Sessions/List\\.aspx'
  6341. _RETURN_TYPE = 'playlist'
  6342. class PanoptoPlaylistIE(PanoptoBaseIE):
  6343. _module = 'yt_dlp.extractor.panopto'
  6344. IE_NAME = 'PanoptoPlaylist'
  6345. _VALID_URL = '(?P<base_url>https?://[\\w.-]+\\.panopto.(?:com|eu)/Panopto)/Pages/(Viewer|Embed)\\.aspx.*(?:\\?|&)pid=(?P<id>[a-f0-9-]+)'
  6346. _RETURN_TYPE = 'playlist'
  6347. class ParamountPlusSeriesIE(LazyLoadExtractor):
  6348. _module = 'yt_dlp.extractor.paramountplus'
  6349. IE_NAME = 'ParamountPlusSeries'
  6350. _VALID_URL = 'https?://(?:www\\.)?paramountplus\\.com/shows/(?P<id>[a-zA-Z0-9-_]+)/?(?:[#?]|$)'
  6351. _RETURN_TYPE = 'playlist'
  6352. class ParlerIE(LazyLoadExtractor):
  6353. _module = 'yt_dlp.extractor.parler'
  6354. IE_NAME = 'Parler'
  6355. _VALID_URL = 'https?://parler\\.com/feed/(?P<id>[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12})'
  6356. IE_DESC = 'Posts on parler.com'
  6357. _RETURN_TYPE = 'video'
  6358. class ParlviewIE(LazyLoadExtractor):
  6359. _module = 'yt_dlp.extractor.parlview'
  6360. IE_NAME = 'Parlview'
  6361. _VALID_URL = 'https?://(?:www\\.)?parlview\\.aph\\.gov\\.au/(?:[^/]+)?\\bvideoID=(?P<id>\\d{6})'
  6362. _WORKING = False
  6363. _RETURN_TYPE = 'video'
  6364. class PatreonBaseIE(LazyLoadExtractor):
  6365. _module = 'yt_dlp.extractor.patreon'
  6366. IE_NAME = 'PatreonBase'
  6367. class PatreonCampaignIE(PatreonBaseIE):
  6368. _module = 'yt_dlp.extractor.patreon'
  6369. IE_NAME = 'patreon:campaign'
  6370. _VALID_URL = '(?x)\n https?://(?:www\\.)?patreon\\.com/(?:\n (?:m|api/campaigns)/(?P<campaign_id>\\d+)|\n (?:c/)?(?P<vanity>(?!creation[?/]|posts/|rss[?/])[\\w-]+)\n )(?:/posts)?/?(?:$|[?#])'
  6371. _RETURN_TYPE = 'playlist'
  6372. class PatreonIE(PatreonBaseIE):
  6373. _module = 'yt_dlp.extractor.patreon'
  6374. IE_NAME = 'patreon'
  6375. _VALID_URL = 'https?://(?:www\\.)?patreon\\.com/(?:creation\\?hid=|posts/(?:[\\w-]+-)?)(?P<id>\\d+)'
  6376. _RETURN_TYPE = 'video'
  6377. class PBSIE(LazyLoadExtractor):
  6378. _module = 'yt_dlp.extractor.pbs'
  6379. IE_NAME = 'pbs'
  6380. _VALID_URL = '(?x)https?://\n (?:\n # Direct video URL\n (?:(?:video|www|player)\\.pbs\\.org|video\\.aptv\\.org|video\\.gpb\\.org|video\\.mpbonline\\.org|video\\.wnpt\\.org|video\\.wfsu\\.org|video\\.wsre\\.org|video\\.wtcitv\\.org|video\\.pba\\.org|video\\.alaskapublic\\.org|video\\.azpbs\\.org|portal\\.knme\\.org|video\\.vegaspbs\\.org|watch\\.aetn\\.org|video\\.ket\\.org|video\\.wkno\\.org|video\\.lpb\\.org|videos\\.oeta\\.tv|video\\.optv\\.org|watch\\.wsiu\\.org|video\\.keet\\.org|pbs\\.kixe\\.org|video\\.kpbs\\.org|video\\.kqed\\.org|vids\\.kvie\\.org|video\\.pbssocal\\.org|video\\.valleypbs\\.org|video\\.cptv\\.org|watch\\.knpb\\.org|video\\.soptv\\.org|video\\.rmpbs\\.org|video\\.kenw\\.org|video\\.kued\\.org|video\\.wyomingpbs\\.org|video\\.cpt12\\.org|video\\.kbyueleven\\.org|video\\.thirteen\\.org|video\\.wgbh\\.org|video\\.wgby\\.org|watch\\.njtvonline\\.org|watch\\.wliw\\.org|video\\.mpt\\.tv|watch\\.weta\\.org|video\\.whyy\\.org|video\\.wlvt\\.org|video\\.wvpt\\.net|video\\.whut\\.org|video\\.wedu\\.org|video\\.wgcu\\.org|video\\.wpbt2\\.org|video\\.wucftv\\.org|video\\.wuft\\.org|watch\\.wxel\\.org|video\\.wlrn\\.org|video\\.wusf\\.usf\\.edu|video\\.scetv\\.org|video\\.unctv\\.org|video\\.pbshawaii\\.org|video\\.idahoptv\\.org|video\\.ksps\\.org|watch\\.opb\\.org|watch\\.nwptv\\.org|video\\.will\\.illinois\\.edu|video\\.networkknowledge\\.tv|video\\.wttw\\.com|video\\.iptv\\.org|video\\.ninenet\\.org|video\\.wfwa\\.org|video\\.wfyi\\.org|video\\.mptv\\.org|video\\.wnin\\.org|video\\.wnit\\.org|video\\.wpt\\.org|video\\.wvut\\.org|video\\.weiu\\.net|video\\.wqpt\\.org|video\\.wycc\\.org|video\\.wipb\\.org|video\\.indianapublicmedia\\.org|watch\\.cetconnect\\.org|video\\.thinktv\\.org|video\\.wbgu\\.org|video\\.wgvu\\.org|video\\.netnebraska\\.org|video\\.pioneer\\.org|watch\\.sdpb\\.org|video\\.tpt\\.org|watch\\.ksmq\\.org|watch\\.kpts\\.org|watch\\.ktwu\\.org|watch\\.easttennesseepbs\\.org|video\\.wcte\\.tv|video\\.wljt\\.org|video\\.wosu\\.org|video\\.woub\\.org|video\\.wvpublic\\.org|video\\.wkyupbs\\.org|video\\.kera\\.org|video\\.mpbn\\.net|video\\.mountainlake\\.org|video\\.nhptv\\.org|video\\.vpt\\.org|video\\.witf\\.org|watch\\.wqed\\.org|video\\.wmht\\.org|video\\.deltabroadcasting\\.org|video\\.dptv\\.org|video\\.wcmu\\.org|video\\.wkar\\.org|wnmuvideo\\.nmu\\.edu|video\\.wdse\\.org|video\\.wgte\\.org|video\\.lptv\\.org|video\\.kmos\\.org|watch\\.montanapbs\\.org|video\\.krwg\\.org|video\\.kacvtv\\.org|video\\.kcostv\\.org|video\\.wcny\\.org|video\\.wned\\.org|watch\\.wpbstv\\.org|video\\.wskg\\.org|video\\.wxxi\\.org|video\\.wpsu\\.org|on-demand\\.wvia\\.org|video\\.wtvi\\.org|video\\.westernreservepublicmedia\\.org|video\\.ideastream\\.org|video\\.kcts9\\.org|video\\.basinpbs\\.org|video\\.houstonpbs\\.org|video\\.klrn\\.org|video\\.klru\\.tv|video\\.wtjx\\.org|video\\.ideastations\\.org|video\\.kbtc\\.org)/(?:(?:vir|port)alplayer|video)/(?P<id>[0-9]+)(?:[?/]|$) |\n # Article with embedded player (or direct video)\n (?:www\\.)?pbs\\.org/(?:[^/]+/){1,5}(?P<presumptive_id>[^/]+?)(?:\\.html)?/?(?:$|[?\\#]) |\n # Player\n (?:video|player)\\.pbs\\.org/(?:widget/)?partnerplayer/(?P<player_id>[^/]+)\n )\n '
  6381. IE_DESC = 'Public Broadcasting Service (PBS) and member stations: PBS: Public Broadcasting Service, APT - Alabama Public Television (WBIQ), GPB/Georgia Public Broadcasting (WGTV), Mississippi Public Broadcasting (WMPN), Nashville Public Television (WNPT), WFSU-TV (WFSU), WSRE (WSRE), WTCI (WTCI), WPBA/Channel 30 (WPBA), Alaska Public Media (KAKM), Arizona PBS (KAET), KNME-TV/Channel 5 (KNME), Vegas PBS (KLVX), AETN/ARKANSAS ETV NETWORK (KETS), KET (WKLE), WKNO/Channel 10 (WKNO), LPB/LOUISIANA PUBLIC BROADCASTING (WLPB), OETA (KETA), Ozarks Public Television (KOZK), WSIU Public Broadcasting (WSIU), KEET TV (KEET), KIXE/Channel 9 (KIXE), KPBS San Diego (KPBS), KQED (KQED), KVIE Public Television (KVIE), PBS SoCal/KOCE (KOCE), ValleyPBS (KVPT), CONNECTICUT PUBLIC TELEVISION (WEDH), KNPB Channel 5 (KNPB), SOPTV (KSYS), Rocky Mountain PBS (KRMA), KENW-TV3 (KENW), KUED Channel 7 (KUED), Wyoming PBS (KCWC), Colorado Public Television / KBDI 12 (KBDI), KBYU-TV (KBYU), Thirteen/WNET New York (WNET), WGBH/Channel 2 (WGBH), WGBY (WGBY), NJTV Public Media NJ (WNJT), WLIW21 (WLIW), mpt/Maryland Public Television (WMPB), WETA Television and Radio (WETA), WHYY (WHYY), PBS 39 (WLVT), WVPT - Your Source for PBS and More! (WVPT), Howard University Television (WHUT), WEDU PBS (WEDU), WGCU Public Media (WGCU), WPBT2 (WPBT), WUCF TV (WUCF), WUFT/Channel 5 (WUFT), WXEL/Channel 42 (WXEL), WLRN/Channel 17 (WLRN), WUSF Public Broadcasting (WUSF), ETV (WRLK), UNC-TV (WUNC), PBS Hawaii - Oceanic Cable Channel 10 (KHET), Idaho Public Television (KAID), KSPS (KSPS), OPB (KOPB), KWSU/Channel 10 & KTNW/Channel 31 (KWSU), WILL-TV (WILL), Network Knowledge - WSEC/Springfield (WSEC), WTTW11 (WTTW), Iowa Public Television/IPTV (KDIN), Nine Network (KETC), PBS39 Fort Wayne (WFWA), WFYI Indianapolis (WFYI), Milwaukee Public Television (WMVS), WNIN (WNIN), WNIT Public Television (WNIT), WPT (WPNE), WVUT/Channel 22 (WVUT), WEIU/Channel 51 (WEIU), WQPT-TV (WQPT), WYCC PBS Chicago (WYCC), WIPB-TV (WIPB), WTIU (WTIU), CET (WCET), ThinkTVNetwork (WPTD), WBGU-TV (WBGU), WGVU TV (WGVU), NET1 (KUON), Pioneer Public Television (KWCM), SDPB Television (KUSD), TPT (KTCA), KSMQ (KSMQ), KPTS/Channel 8 (KPTS), KTWU/Channel 11 (KTWU), East Tennessee PBS (WSJK), WCTE-TV (WCTE), WLJT, Channel 11 (WLJT), WOSU TV (WOSU), WOUB/WOUC (WOUB), WVPB (WVPB), WKYU-PBS (WKYU), KERA 13 (KERA), MPBN (WCBB), Mountain Lake PBS (WCFE), NHPTV (WENH), Vermont PBS (WETK), witf (WITF), WQED Multimedia (WQED), WMHT Educational Telecommunications (WMHT), Q-TV (WDCQ), WTVS Detroit Public TV (WTVS), CMU Public Television (WCMU), WKAR-TV (WKAR), WNMU-TV Public TV 13 (WNMU), WDSE - WRPT (WDSE), WGTE TV (WGTE), Lakeland Public Television (KAWE), KMOS-TV - Channels 6.1, 6.2 and 6.3 (KMOS), MontanaPBS (KUSM), KRWG/Channel 22 (KRWG), KACV (KACV), KCOS/Channel 13 (KCOS), WCNY/Channel 24 (WCNY), WNED (WNED), WPBS (WPBS), WSKG Public TV (WSKG), WXXI (WXXI), WPSU (WPSU), WVIA Public Media Studios (WVIA), WTVI (WTVI), Western Reserve PBS (WNEO), WVIZ/PBS ideastream (WVIZ), KCTS 9 (KCTS), Basin PBS (KPBT), KUHT / Channel 8 (KUHT), KLRN (KLRN), KLRU (KLRU), WTJX Channel 12 (WTJX), WCVE PBS (WCVE), KBTC Public Television (KBTC)'
  6382. age_limit = 10
  6383. _RETURN_TYPE = 'any'
  6384. class PBSKidsIE(LazyLoadExtractor):
  6385. _module = 'yt_dlp.extractor.pbs'
  6386. IE_NAME = 'PBSKids'
  6387. _VALID_URL = 'https?://(?:www\\.)?pbskids\\.org/video/[\\w-]+/(?P<id>\\d+)'
  6388. _RETURN_TYPE = 'video'
  6389. class PearVideoIE(LazyLoadExtractor):
  6390. _module = 'yt_dlp.extractor.pearvideo'
  6391. IE_NAME = 'PearVideo'
  6392. _VALID_URL = 'https?://(?:www\\.)?pearvideo\\.com/video_(?P<id>\\d+)'
  6393. _RETURN_TYPE = 'video'
  6394. class PeekVidsBaseIE(LazyLoadExtractor):
  6395. _module = 'yt_dlp.extractor.peekvids'
  6396. IE_NAME = 'PeekVidsBase'
  6397. class PeekVidsIE(PeekVidsBaseIE):
  6398. _module = 'yt_dlp.extractor.peekvids'
  6399. IE_NAME = 'PeekVids'
  6400. _VALID_URL = '(?x)\n https?://(?:www\\.)?(?P<domain>peekvids\\.com)/\n (?:(?:[^/?#]+/){2}|embed/?\\?(?:[^#]*&)?v=)\n (?P<id>[^/?&#]*)\n '
  6401. age_limit = 18
  6402. _RETURN_TYPE = 'video'
  6403. class PlayVidsIE(PeekVidsBaseIE):
  6404. _module = 'yt_dlp.extractor.peekvids'
  6405. IE_NAME = 'PlayVids'
  6406. _VALID_URL = 'https?://(?:www\\.)?(?P<domain>playvids\\.com)/(?:embed/|\\w\\w?/)?(?P<id>[^/?#]*)'
  6407. age_limit = 18
  6408. _RETURN_TYPE = 'video'
  6409. class PeerTubeIE(LazyLoadExtractor):
  6410. _module = 'yt_dlp.extractor.peertube'
  6411. IE_NAME = 'PeerTube'
  6412. _VALID_URL = '(?x)\n (?:\n peertube:(?P<host>[^:]+):|\n https?://(?P<host_2>(?:\n # Taken from https://instances.joinpeertube.org/instances\n 0ch\\.tv|\n 3dctube\\.3dcandy\\.social|\n all\\.electric\\.kitchen|\n alterscope\\.fr|\n anarchy\\.tube|\n apathy\\.tv|\n apertatube\\.net|\n archive\\.nocopyrightintended\\.tv|\n archive\\.reclaim\\.tv|\n area51\\.media|\n astrotube-ufe\\.obspm\\.fr|\n astrotube\\.obspm\\.fr|\n audio\\.freediverse\\.com|\n azxtube\\.youssefc\\.tn|\n bark\\.video|\n battlepenguin\\.video|\n bava\\.tv|\n bee-tube\\.fr|\n beetoons\\.tv|\n biblion\\.refchat\\.net|\n biblioteca\\.theowlclub\\.net|\n bideoak\\.argia\\.eus|\n bideoteka\\.eus|\n birdtu\\.be|\n bitcointv\\.com|\n bonn\\.video|\n breeze\\.tube|\n brioco\\.live|\n brocosoup\\.fr|\n canal\\.facil\\.services|\n canard\\.tube|\n cdn01\\.tilvids\\.com|\n celluloid-media\\.huma-num\\.fr|\n chicago1\\.peertube\\.support|\n cliptube\\.org|\n cloudtube\\.ise\\.fraunhofer\\.de|\n comf\\.tube|\n comics\\.peertube\\.biz|\n commons\\.tube|\n communitymedia\\.video|\n conspiracydistillery\\.com|\n crank\\.recoil\\.org|\n dalek\\.zone|\n dalliance\\.network|\n dangly\\.parts|\n darkvapor\\.nohost\\.me|\n daschauher\\.aksel\\.rocks|\n digitalcourage\\.video|\n displayeurope\\.video|\n ds106\\.tv|\n dud-video\\.inf\\.tu-dresden\\.de|\n dud175\\.inf\\.tu-dresden\\.de|\n dytube\\.com|\n ebildungslabor\\.video|\n evangelisch\\.video|\n fair\\.tube|\n fedi\\.video|\n fedimovie\\.com|\n fediverse\\.tv|\n film\\.k-prod\\.fr|\n flipboard\\.video|\n foss\\.video|\n fossfarmers\\.company|\n fotogramas\\.politicaconciencia\\.org|\n freediverse\\.com|\n freesoto-u2151\\.vm\\.elestio\\.app|\n freesoto\\.tv|\n garr\\.tv|\n greatview\\.video|\n grypstube\\.uni-greifswald\\.de|\n habratube\\.site|\n ilbjach\\.ru|\n infothema\\.net|\n itvplus\\.iiens\\.net|\n johnydeep\\.net|\n juggling\\.digital|\n jupiter\\.tube|\n kadras\\.live|\n kino\\.kompot\\.si|\n kino\\.schuerz\\.at|\n kinowolnosc\\.pl|\n kirche\\.peertube-host\\.de|\n kiwi\\.froggirl\\.club|\n kodcast\\.com|\n kolektiva\\.media|\n kpop\\.22x22\\.ru|\n kumi\\.tube|\n la2\\.peertube\\.support|\n la3\\.peertube\\.support|\n la4\\.peertube\\.support|\n lastbreach\\.tv|\n lawsplaining\\.peertube\\.biz|\n leopard\\.tube|\n live\\.codinglab\\.ch|\n live\\.libratoi\\.org|\n live\\.oldskool\\.fi|\n live\\.solari\\.com|\n lucarne\\.balsamine\\.be|\n luxtube\\.lu|\n makertube\\.net|\n media\\.econoalchemist\\.com|\n media\\.exo\\.cat|\n media\\.fsfe\\.org|\n media\\.gzevd\\.de|\n media\\.interior\\.edu\\.uy|\n media\\.krashboyz\\.org|\n media\\.mzhd\\.de|\n media\\.smz-ma\\.de|\n media\\.theplattform\\.net|\n media\\.undeadnetwork\\.de|\n medias\\.debrouillonet\\.org|\n medias\\.pingbase\\.net|\n mediatube\\.fermalo\\.fr|\n melsungen\\.peertube-host\\.de|\n merci-la-police\\.fr|\n mindlyvideos\\.com|\n mirror\\.peertube\\.metalbanana\\.net|\n mirrored\\.rocks|\n mix\\.video|\n mountaintown\\.video|\n movies\\.metricsmaster\\.eu|\n mtube\\.mooo\\.com|\n mytube\\.kn-cloud\\.de|\n mytube\\.le5emeaxe\\.fr|\n mytube\\.madzel\\.de|\n nadajemy\\.com|\n nanawel-peertube\\.dyndns\\.org|\n neat\\.tube|\n nethack\\.tv|\n nicecrew\\.tv|\n nightshift\\.minnix\\.dev|\n nolog\\.media|\n nyltube\\.nylarea\\.com|\n ocfedtest\\.hosted\\.spacebear\\.ee|\n openmedia\\.edunova\\.it|\n p2ptv\\.ru|\n p\\.eertu\\.be|\n p\\.lu|\n pastafriday\\.club|\n patriottube\\.sonsofliberty\\.red|\n pcbu\\.nl|\n peer\\.azurs\\.fr|\n peer\\.d0g4\\.me|\n peer\\.lukeog\\.com|\n peer\\.madiator\\.cloud|\n peer\\.raise-uav\\.com|\n peershare\\.togart\\.de|\n peertube-blablalinux\\.be|\n peertube-demo\\.learning-hub\\.fr|\n peertube-docker\\.cpy\\.re|\n peertube-eu\\.howlround\\.com|\n peertube-u5014\\.vm\\.elestio\\.app|\n peertube-us\\.howlround\\.com|\n peertube\\.020\\.pl|\n peertube\\.0x5e\\.eu|\n peertube\\.1984\\.cz|\n peertube\\.2i2l\\.net|\n peertube\\.adjutor\\.xyz|\n peertube\\.adresse\\.data\\.gouv\\.fr|\n peertube\\.alpharius\\.io|\n peertube\\.am-networks\\.fr|\n peertube\\.anduin\\.net|\n peertube\\.anti-logic\\.com|\n peertube\\.arch-linux\\.cz|\n peertube\\.art3mis\\.de|\n peertube\\.artsrn\\.ualberta\\.ca|\n peertube\\.askan\\.info|\n peertube\\.astral0pitek\\.synology\\.me|\n peertube\\.atsuchan\\.page|\n peertube\\.automat\\.click|\n peertube\\.b38\\.rural-it\\.org|\n peertube\\.be|\n peertube\\.beeldengeluid\\.nl|\n peertube\\.bgzashtita\\.es|\n peertube\\.bike|\n peertube\\.bildung-ekhn\\.de|\n peertube\\.biz|\n peertube\\.br0\\.fr|\n peertube\\.bridaahost\\.ynh\\.fr|\n peertube\\.bubbletea\\.dev|\n peertube\\.bubuit\\.net|\n peertube\\.cabaal\\.net|\n peertube\\.chatinbit\\.com|\n peertube\\.chaunchy\\.com|\n peertube\\.chir\\.rs|\n peertube\\.christianpacaud\\.com|\n peertube\\.chtisurel\\.net|\n peertube\\.chuggybumba\\.com|\n peertube\\.cipherbliss\\.com|\n peertube\\.cirkau\\.art|\n peertube\\.cloud\\.nerdraum\\.de|\n peertube\\.cloud\\.sans\\.pub|\n peertube\\.coko\\.foundation|\n peertube\\.communecter\\.org|\n peertube\\.concordia\\.social|\n peertube\\.corrigan\\.xyz|\n peertube\\.cpge-brizeux\\.fr|\n peertube\\.ctseuro\\.com|\n peertube\\.cuatrolibertades\\.org|\n peertube\\.cube4fun\\.net|\n peertube\\.dair-institute\\.org|\n peertube\\.davigge\\.com|\n peertube\\.dc\\.pini\\.fr|\n peertube\\.deadtom\\.me|\n peertube\\.debian\\.social|\n peertube\\.delta0189\\.xyz|\n peertube\\.demonix\\.fr|\n peertube\\.designersethiques\\.org|\n peertube\\.desmu\\.fr|\n peertube\\.devol\\.it|\n peertube\\.dk|\n peertube\\.doesstuff\\.social|\n peertube\\.eb8\\.org|\n peertube\\.education-forum\\.com|\n peertube\\.elforcer\\.ru|\n peertube\\.em\\.id\\.lv|\n peertube\\.ethibox\\.fr|\n peertube\\.eu\\.org|\n peertube\\.european-pirates\\.eu|\n peertube\\.eus|\n peertube\\.euskarabildua\\.eus|\n peertube\\.expi\\.studio|\n peertube\\.familie-berner\\.de|\n peertube\\.familleboisteau\\.fr|\n peertube\\.fedihost\\.website|\n peertube\\.fenarinarsa\\.com|\n peertube\\.festnoz\\.de|\n peertube\\.forteza\\.fr|\n peertube\\.freestorm\\.online|\n peertube\\.functional\\.cafe|\n peertube\\.gaminglinux\\.fr|\n peertube\\.gargantia\\.fr|\n peertube\\.geekgalaxy\\.fr|\n peertube\\.gemlog\\.ca|\n peertube\\.genma\\.fr|\n peertube\\.get-racing\\.de|\n peertube\\.ghis94\\.ovh|\n peertube\\.gidikroon\\.eu|\n peertube\\.giftedmc\\.com|\n peertube\\.grosist\\.fr|\n peertube\\.gruntwerk\\.org|\n peertube\\.gsugambit\\.com|\n peertube\\.hackerfoo\\.com|\n peertube\\.hellsite\\.net|\n peertube\\.helvetet\\.eu|\n peertube\\.histoirescrepues\\.fr|\n peertube\\.home\\.x0r\\.fr|\n peertube\\.hyperfreedom\\.org|\n peertube\\.ichigo\\.everydayimshuflin\\.com|\n peertube\\.ifwo\\.eu|\n peertube\\.in\\.ua|\n peertube\\.inapurna\\.org|\n peertube\\.informaction\\.info|\n peertube\\.interhop\\.org|\n peertube\\.it|\n peertube\\.it-arts\\.net|\n peertube\\.jensdiemer\\.de|\n peertube\\.johntheserg\\.al|\n peertube\\.kaleidos\\.net|\n peertube\\.kalua\\.im|\n peertube\\.kcore\\.org|\n peertube\\.keazilla\\.net|\n peertube\\.klaewyss\\.fr|\n peertube\\.kleph\\.eu|\n peertube\\.kodein\\.be|\n peertube\\.kooperatywa\\.tech|\n peertube\\.kriom\\.net|\n peertube\\.kx\\.studio|\n peertube\\.kyriog\\.eu|\n peertube\\.la-famille-muller\\.fr|\n peertube\\.labeuropereunion\\.eu|\n peertube\\.lagvoid\\.com|\n peertube\\.lhc\\.net\\.br|\n peertube\\.libresolutions\\.network|\n peertube\\.libretic\\.fr|\n peertube\\.librosphere\\.fr|\n peertube\\.logilab\\.fr|\n peertube\\.lon\\.tv|\n peertube\\.louisematic\\.site|\n peertube\\.luckow\\.org|\n peertube\\.luga\\.at|\n peertube\\.lyceeconnecte\\.fr|\n peertube\\.madixam\\.xyz|\n peertube\\.magicstone\\.dev|\n peertube\\.marienschule\\.de|\n peertube\\.marud\\.fr|\n peertube\\.maxweiss\\.io|\n peertube\\.miguelcr\\.me|\n peertube\\.mikemestnik\\.net|\n peertube\\.mobilsicher\\.de|\n peertube\\.monlycee\\.net|\n peertube\\.mxinfo\\.fr|\n peertube\\.naln1\\.ca|\n peertube\\.netzbegruenung\\.de|\n peertube\\.nicolastissot\\.fr|\n peertube\\.nogafam\\.fr|\n peertube\\.normalgamingcommunity\\.cz|\n peertube\\.nz|\n peertube\\.offerman\\.com|\n peertube\\.ohioskates\\.com|\n peertube\\.onionstorm\\.net|\n peertube\\.opencloud\\.lu|\n peertube\\.otakufarms\\.com|\n peertube\\.paladyn\\.org|\n peertube\\.pix-n-chill\\.fr|\n peertube\\.r2\\.enst\\.fr|\n peertube\\.r5c3\\.fr|\n peertube\\.redpill-insight\\.com|\n peertube\\.researchinstitute\\.at|\n peertube\\.revelin\\.fr|\n peertube\\.rlp\\.schule|\n peertube\\.rokugan\\.fr|\n peertube\\.rougevertbleu\\.tv|\n peertube\\.roundpond\\.net|\n peertube\\.rural-it\\.org|\n peertube\\.satoshishop\\.de|\n peertube\\.scyldings\\.com|\n peertube\\.securitymadein\\.lu|\n peertube\\.semperpax\\.com|\n peertube\\.semweb\\.pro|\n peertube\\.sensin\\.eu|\n peertube\\.sidh\\.bzh|\n peertube\\.skorpil\\.cz|\n peertube\\.smertrios\\.com|\n peertube\\.sqweeb\\.net|\n peertube\\.stattzeitung\\.org|\n peertube\\.stream|\n peertube\\.su|\n peertube\\.swrs\\.net|\n peertube\\.takeko\\.cyou|\n peertube\\.taxinachtegel\\.de|\n peertube\\.teftera\\.com|\n peertube\\.teutronic-services\\.de|\n peertube\\.ti-fr\\.com|\n peertube\\.tiennot\\.net|\n peertube\\.tmp\\.rcp\\.tf|\n peertube\\.tspu\\.edu\\.ru|\n peertube\\.tv|\n peertube\\.tweb\\.tv|\n peertube\\.underworld\\.fr|\n peertube\\.vapronva\\.pw|\n peertube\\.veen\\.world|\n peertube\\.vesdia\\.eu|\n peertube\\.virtual-assembly\\.org|\n peertube\\.viviers-fibre\\.net|\n peertube\\.vlaki\\.cz|\n peertube\\.wiesbaden\\.social|\n peertube\\.wivodaim\\.net|\n peertube\\.wtf|\n peertube\\.wtfayla\\.net|\n peertube\\.xrcb\\.cat|\n peertube\\.xwiki\\.com|\n peertube\\.zd\\.do|\n peertube\\.zetamc\\.net|\n peertube\\.zmuuf\\.org|\n peertube\\.zoz-serv\\.org|\n peertube\\.zwindler\\.fr|\n peervideo\\.ru|\n periscope\\.numenaute\\.org|\n pete\\.warpnine\\.de|\n petitlutinartube\\.fr|\n phijkchu\\.com|\n phoenixproject\\.group|\n piraten\\.space|\n pirtube\\.calut\\.fr|\n pityu\\.flaki\\.hu|\n play\\.mittdata\\.se|\n player\\.ojamajo\\.moe|\n podlibre\\.video|\n portal\\.digilab\\.nfa\\.cz|\n private\\.fedimovie\\.com|\n pt01\\.lehrerfortbildung-bw\\.de|\n pt\\.diaspodon\\.fr|\n pt\\.freedomwolf\\.cc|\n pt\\.gordons\\.gen\\.nz|\n pt\\.ilyamikcoder\\.com|\n pt\\.irnok\\.net|\n pt\\.mezzo\\.moe|\n pt\\.na4\\.eu|\n pt\\.netcraft\\.ch|\n pt\\.rwx\\.ch|\n pt\\.sfunk1x\\.com|\n pt\\.thishorsie\\.rocks|\n pt\\.vern\\.cc|\n ptb\\.lunarviews\\.net|\n ptube\\.de|\n ptube\\.ranranhome\\.info|\n puffy\\.tube|\n puppet\\.zone|\n qtube\\.qlyoung\\.net|\n quantube\\.win|\n rankett\\.net|\n replay\\.jres\\.org|\n review\\.peertube\\.biz|\n sdmtube\\.fr|\n secure\\.direct-live\\.net|\n secure\\.scanovid\\.com|\n seka\\.pona\\.la|\n serv3\\.wiki-tube\\.de|\n skeptube\\.fr|\n social\\.fedimovie\\.com|\n socpeertube\\.ru|\n sovran\\.video|\n special\\.videovortex\\.tv|\n spectra\\.video|\n stl1988\\.peertube-host\\.de|\n stream\\.biovisata\\.lt|\n stream\\.conesphere\\.cloud|\n stream\\.elven\\.pw|\n stream\\.jurnalfm\\.md|\n stream\\.k-prod\\.fr|\n stream\\.litera\\.tools|\n stream\\.nuemedia\\.se|\n stream\\.rlp-media\\.de|\n stream\\.vrse\\.be|\n studios\\.racer159\\.com|\n styxhexenhammer666\\.com|\n syrteplay\\.obspm\\.fr|\n t\\.0x0\\.st|\n tbh\\.co-shaoghal\\.net|\n test-fab\\.ynh\\.fr|\n testube\\.distrilab\\.fr|\n tgi\\.hosted\\.spacebear\\.ee|\n theater\\.ethernia\\.net|\n thecool\\.tube|\n thevideoverse\\.com|\n tilvids\\.com|\n tinkerbetter\\.tube|\n tinsley\\.video|\n trailers\\.ddigest\\.com|\n tube-action-educative\\.apps\\.education\\.fr|\n tube-arts-lettres-sciences-humaines\\.apps\\.education\\.fr|\n tube-cycle-2\\.apps\\.education\\.fr|\n tube-cycle-3\\.apps\\.education\\.fr|\n tube-education-physique-et-sportive\\.apps\\.education\\.fr|\n tube-enseignement-professionnel\\.apps\\.education\\.fr|\n tube-institutionnel\\.apps\\.education\\.fr|\n tube-langues-vivantes\\.apps\\.education\\.fr|\n tube-maternelle\\.apps\\.education\\.fr|\n tube-numerique-educatif\\.apps\\.education\\.fr|\n tube-sciences-technologies\\.apps\\.education\\.fr|\n tube-test\\.apps\\.education\\.fr|\n tube1\\.perron-service\\.de|\n tube\\.9minuti\\.it|\n tube\\.abolivier\\.bzh|\n tube\\.alado\\.space|\n tube\\.amic37\\.fr|\n tube\\.area404\\.cloud|\n tube\\.arthack\\.nz|\n tube\\.asulia\\.fr|\n tube\\.awkward\\.company|\n tube\\.azbyka\\.ru|\n tube\\.azkware\\.net|\n tube\\.bartrip\\.me\\.uk|\n tube\\.belowtoxic\\.media|\n tube\\.bingle\\.plus|\n tube\\.bit-friends\\.de|\n tube\\.bstly\\.de|\n tube\\.chosto\\.me|\n tube\\.cms\\.garden|\n tube\\.communia\\.org|\n tube\\.cyberia\\.club|\n tube\\.cybershock\\.life|\n tube\\.dembased\\.xyz|\n tube\\.dev\\.displ\\.eu|\n tube\\.digitalesozialearbeit\\.de|\n tube\\.distrilab\\.fr|\n tube\\.doortofreedom\\.org|\n tube\\.dsocialize\\.net|\n tube\\.e-jeremy\\.com|\n tube\\.ebin\\.club|\n tube\\.elemac\\.fr|\n tube\\.erzbistum-hamburg\\.de|\n tube\\.exozy\\.me|\n tube\\.fdn\\.fr|\n tube\\.fedi\\.quebec|\n tube\\.fediverse\\.at|\n tube\\.felinn\\.org|\n tube\\.flokinet\\.is|\n tube\\.foad\\.me\\.uk|\n tube\\.freepeople\\.fr|\n tube\\.friloux\\.me|\n tube\\.froth\\.zone|\n tube\\.fulda\\.social|\n tube\\.futuretic\\.fr|\n tube\\.g1zm0\\.de|\n tube\\.g4rf\\.net|\n tube\\.gaiac\\.io|\n tube\\.geekyboo\\.net|\n tube\\.genb\\.de|\n tube\\.ghk-academy\\.info|\n tube\\.gi-it\\.de|\n tube\\.grap\\.coop|\n tube\\.graz\\.social|\n tube\\.grin\\.hu|\n tube\\.hokai\\.lol|\n tube\\.int5\\.net|\n tube\\.interhacker\\.space|\n tube\\.invisible\\.ch|\n tube\\.io18\\.top|\n tube\\.itsg\\.host|\n tube\\.jeena\\.net|\n tube\\.kh-berlin\\.de|\n tube\\.kockatoo\\.org|\n tube\\.kotur\\.org|\n tube\\.koweb\\.fr|\n tube\\.la-dina\\.net|\n tube\\.lab\\.nrw|\n tube\\.lacaveatonton\\.ovh|\n tube\\.laurent-malys\\.fr|\n tube\\.leetdreams\\.ch|\n tube\\.linkse\\.media|\n tube\\.lokad\\.com|\n tube\\.lucie-philou\\.com|\n tube\\.media-techport\\.de|\n tube\\.morozoff\\.pro|\n tube\\.neshweb\\.net|\n tube\\.nestor\\.coop|\n tube\\.network\\.europa\\.eu|\n tube\\.nicfab\\.eu|\n tube\\.nieuwwestbrabant\\.nl|\n tube\\.nogafa\\.org|\n tube\\.novg\\.net|\n tube\\.nox-rhea\\.org|\n tube\\.nuagelibre\\.fr|\n tube\\.numerique\\.gouv\\.fr|\n tube\\.nuxnik\\.com|\n tube\\.nx12\\.net|\n tube\\.octaplex\\.net|\n tube\\.oisux\\.org|\n tube\\.okcinfo\\.news|\n tube\\.onlinekirche\\.net|\n tube\\.opportunis\\.me|\n tube\\.oraclefilms\\.com|\n tube\\.org\\.il|\n tube\\.pacapime\\.ovh|\n tube\\.parinux\\.org|\n tube\\.pastwind\\.top|\n tube\\.picasoft\\.net|\n tube\\.pilgerweg-21\\.de|\n tube\\.pmj\\.rocks|\n tube\\.pol\\.social|\n tube\\.ponsonaille\\.fr|\n tube\\.portes-imaginaire\\.org|\n tube\\.public\\.apolut\\.net|\n tube\\.pustule\\.org|\n tube\\.pyngu\\.com|\n tube\\.querdenken-711\\.de|\n tube\\.rebellion\\.global|\n tube\\.reseau-canope\\.fr|\n tube\\.rhythms-of-resistance\\.org|\n tube\\.risedsky\\.ovh|\n tube\\.rooty\\.fr|\n tube\\.rsi\\.cnr\\.it|\n tube\\.ryne\\.moe|\n tube\\.schleuss\\.online|\n tube\\.schule\\.social|\n tube\\.sekretaerbaer\\.net|\n tube\\.shanti\\.cafe|\n tube\\.shela\\.nu|\n tube\\.skrep\\.in|\n tube\\.sleeping\\.town|\n tube\\.sp-codes\\.de|\n tube\\.spdns\\.org|\n tube\\.systerserver\\.net|\n tube\\.systest\\.eu|\n tube\\.tappret\\.fr|\n tube\\.techeasy\\.org|\n tube\\.thierrytalbert\\.fr|\n tube\\.tinfoil-hat\\.net|\n tube\\.toldi\\.eu|\n tube\\.tpshd\\.de|\n tube\\.trax\\.im|\n tube\\.troopers\\.agency|\n tube\\.ttk\\.is|\n tube\\.tuxfriend\\.fr|\n tube\\.tylerdavis\\.xyz|\n tube\\.ullihome\\.de|\n tube\\.ulne\\.be|\n tube\\.undernet\\.uy|\n tube\\.vrpnet\\.org|\n tube\\.wolfe\\.casa|\n tube\\.xd0\\.de|\n tube\\.xn--baw-joa\\.social|\n tube\\.xy-space\\.de|\n tube\\.yapbreak\\.fr|\n tubedu\\.org|\n tubulus\\.openlatin\\.org|\n turtleisland\\.video|\n tututu\\.tube|\n tv\\.adast\\.dk|\n tv\\.adn\\.life|\n tv\\.arns\\.lt|\n tv\\.atmx\\.ca|\n tv\\.based\\.quest|\n tv\\.farewellutopia\\.com|\n tv\\.filmfreedom\\.net|\n tv\\.gravitons\\.org|\n tv\\.io\\.seg\\.br|\n tv\\.lumbung\\.space|\n tv\\.pirateradio\\.social|\n tv\\.pirati\\.cz|\n tv\\.santic-zombie\\.ru|\n tv\\.undersco\\.re|\n tv\\.zonepl\\.net|\n tvox\\.ru|\n twctube\\.twc-zone\\.eu|\n twobeek\\.com|\n urbanists\\.video|\n v\\.9tail\\.net|\n v\\.basspistol\\.org|\n v\\.j4\\.lc|\n v\\.kisombrella\\.top|\n v\\.koa\\.im|\n v\\.kyaru\\.xyz|\n v\\.lor\\.sh|\n v\\.mkp\\.ca|\n v\\.posm\\.gay|\n v\\.slaycer\\.top|\n veedeo\\.org|\n vhs\\.absturztau\\.be|\n vid\\.cthos\\.dev|\n vid\\.kinuseka\\.us|\n vid\\.mkp\\.ca|\n vid\\.nocogabriel\\.fr|\n vid\\.norbipeti\\.eu|\n vid\\.northbound\\.online|\n vid\\.ohboii\\.de|\n vid\\.plantplotting\\.co\\.uk|\n vid\\.pretok\\.tv|\n vid\\.prometheus\\.systems|\n vid\\.soafen\\.love|\n vid\\.twhtv\\.club|\n vid\\.wildeboer\\.net|\n video-cave-v2\\.de|\n video-liberty\\.com|\n video\\.076\\.ne\\.jp|\n video\\.1146\\.nohost\\.me|\n video\\.9wd\\.eu|\n video\\.abraum\\.de|\n video\\.ados\\.accoord\\.fr|\n video\\.amiga-ng\\.org|\n video\\.anartist\\.org|\n video\\.asgardius\\.company|\n video\\.audiovisuel-participatif\\.org|\n video\\.bards\\.online|\n video\\.barkoczy\\.social|\n video\\.benetou\\.fr|\n video\\.beyondwatts\\.social|\n video\\.bgeneric\\.net|\n video\\.bilecik\\.edu\\.tr|\n video\\.blast-info\\.fr|\n video\\.bmu\\.cloud|\n video\\.catgirl\\.biz|\n video\\.causa-arcana\\.com|\n video\\.chasmcity\\.net|\n video\\.chbmeyer\\.de|\n video\\.cigliola\\.com|\n video\\.citizen4\\.eu|\n video\\.clumsy\\.computer|\n video\\.cnnumerique\\.fr|\n video\\.cnr\\.it|\n video\\.cnt\\.social|\n video\\.coales\\.co|\n video\\.comune\\.trento\\.it|\n video\\.coyp\\.us|\n video\\.csc49\\.fr|\n video\\.davduf\\.net|\n video\\.davejansen\\.com|\n video\\.dlearning\\.nl|\n video\\.dnfi\\.no|\n video\\.dresden\\.network|\n video\\.drgnz\\.club|\n video\\.dudenas\\.lt|\n video\\.eientei\\.org|\n video\\.ellijaymakerspace\\.org|\n video\\.emergeheart\\.info|\n video\\.eradicatinglove\\.xyz|\n video\\.everythingbagel\\.me|\n video\\.extremelycorporate\\.ca|\n video\\.fabiomanganiello\\.com|\n video\\.fedi\\.bzh|\n video\\.fhtagn\\.org|\n video\\.firehawk-systems\\.com|\n video\\.fox-romka\\.ru|\n video\\.fuss\\.bz\\.it|\n video\\.glassbeadcollective\\.org|\n video\\.graine-pdl\\.org|\n video\\.gyt\\.is|\n video\\.hainry\\.fr|\n video\\.hardlimit\\.com|\n video\\.hostux\\.net|\n video\\.igem\\.org|\n video\\.infojournal\\.fr|\n video\\.internet-czas-dzialac\\.pl|\n video\\.interru\\.io|\n video\\.ipng\\.ch|\n video\\.ironsysadmin\\.com|\n video\\.islameye\\.com|\n video\\.jacen\\.moe|\n video\\.jadin\\.me|\n video\\.jeffmcbride\\.net|\n video\\.jigmedatse\\.com|\n video\\.kuba-orlik\\.name|\n video\\.lacalligramme\\.fr|\n video\\.lanceurs-alerte\\.fr|\n video\\.laotra\\.red|\n video\\.lapineige\\.fr|\n video\\.laraffinerie\\.re|\n video\\.lavolte\\.net|\n video\\.liberta\\.vip|\n video\\.libreti\\.net|\n video\\.licentia\\.net|\n video\\.linc\\.systems|\n video\\.linux\\.it|\n video\\.linuxtrent\\.it|\n video\\.liveitlive\\.show|\n video\\.lono\\.space|\n video\\.lrose\\.de|\n video\\.lunago\\.net|\n video\\.lundi\\.am|\n video\\.lycee-experimental\\.org|\n video\\.maechler\\.cloud|\n video\\.marcorennmaus\\.de|\n video\\.mass-trespass\\.uk|\n video\\.matomocamp\\.org|\n video\\.medienzentrum-harburg\\.de|\n video\\.mentality\\.rip|\n video\\.metaversum\\.wtf|\n video\\.midreality\\.com|\n video\\.mttv\\.it|\n video\\.mugoreve\\.fr|\n video\\.mxtthxw\\.art|\n video\\.mycrowd\\.ca|\n video\\.niboe\\.info|\n video\\.nogafam\\.es|\n video\\.nstr\\.no|\n video\\.occm\\.cc|\n video\\.off-investigation\\.fr|\n video\\.olos311\\.org|\n video\\.ordinobsolete\\.fr|\n video\\.osvoj\\.ru|\n video\\.ourcommon\\.cloud|\n video\\.ozgurkon\\.org|\n video\\.pcf\\.fr|\n video\\.pcgaldo\\.com|\n video\\.phyrone\\.de|\n video\\.poul\\.org|\n video\\.publicspaces\\.net|\n video\\.pullopen\\.xyz|\n video\\.r3s\\.nrw|\n video\\.rainevixen\\.com|\n video\\.resolutions\\.it|\n video\\.retroedge\\.tech|\n video\\.rhizome\\.org|\n video\\.rlp-media\\.de|\n video\\.rs-einrich\\.de|\n video\\.rubdos\\.be|\n video\\.sadmin\\.io|\n video\\.sftblw\\.moe|\n video\\.shitposter\\.club|\n video\\.simplex-software\\.ru|\n video\\.slipfox\\.xyz|\n video\\.snug\\.moe|\n video\\.software-fuer-engagierte\\.de|\n video\\.soi\\.ch|\n video\\.sonet\\.ws|\n video\\.surazal\\.net|\n video\\.taskcards\\.eu|\n video\\.team-lcbs\\.eu|\n video\\.techforgood\\.social|\n video\\.telemillevaches\\.net|\n video\\.thepolarbear\\.co\\.uk|\n video\\.thinkof\\.name|\n video\\.tii\\.space|\n video\\.tkz\\.es|\n video\\.trankil\\.info|\n video\\.triplea\\.fr|\n video\\.tum\\.social|\n video\\.turbo\\.chat|\n video\\.uriopss-pdl\\.fr|\n video\\.ustim\\.ru|\n video\\.ut0pia\\.org|\n video\\.vaku\\.org\\.ua|\n video\\.vegafjord\\.me|\n video\\.veloma\\.org|\n video\\.violoncello\\.ch|\n video\\.voidconspiracy\\.band|\n video\\.wakkeren\\.nl|\n video\\.windfluechter\\.org|\n video\\.ziez\\.eu|\n videos-passages\\.huma-num\\.fr|\n videos\\.aadtp\\.be|\n videos\\.ahp-numerique\\.fr|\n videos\\.alamaisondulibre\\.org|\n videos\\.archigny\\.net|\n videos\\.aroaduntraveled\\.com|\n videos\\.b4tech\\.org|\n videos\\.benjaminbrady\\.ie|\n videos\\.bik\\.opencloud\\.lu|\n videos\\.cloudron\\.io|\n videos\\.codingotaku\\.com|\n videos\\.coletivos\\.org|\n videos\\.collate\\.social|\n videos\\.danksquad\\.org|\n videos\\.digitaldragons\\.eu|\n videos\\.dromeadhere\\.fr|\n videos\\.explain-it\\.org|\n videos\\.factsonthegroundshow\\.com|\n videos\\.foilen\\.com|\n videos\\.fsci\\.in|\n videos\\.gamercast\\.net|\n videos\\.gianmarco\\.gg|\n videos\\.globenet\\.org|\n videos\\.grafo\\.zone|\n videos\\.hauspie\\.fr|\n videos\\.hush\\.is|\n videos\\.hyphalfusion\\.network|\n videos\\.icum\\.to|\n videos\\.im\\.allmendenetz\\.de|\n videos\\.jacksonchen666\\.com|\n videos\\.john-livingston\\.fr|\n videos\\.knazarov\\.com|\n videos\\.kuoushi\\.com|\n videos\\.laliguepaysdelaloire\\.org|\n videos\\.lemouvementassociatif-pdl\\.org|\n videos\\.leslionsfloorball\\.fr|\n videos\\.librescrum\\.org|\n videos\\.mastodont\\.cat|\n videos\\.metus\\.ca|\n videos\\.miolo\\.org|\n videos\\.offroad\\.town|\n videos\\.openmandriva\\.org|\n videos\\.parleur\\.net|\n videos\\.pcorp\\.us|\n videos\\.pop\\.eu\\.com|\n videos\\.rampin\\.org|\n videos\\.rauten\\.co\\.za|\n videos\\.ritimo\\.org|\n videos\\.sarcasmstardust\\.com|\n videos\\.scanlines\\.xyz|\n videos\\.shmalls\\.pw|\n videos\\.stadtfabrikanten\\.org|\n videos\\.supertuxkart\\.net|\n videos\\.testimonia\\.org|\n videos\\.thinkerview\\.com|\n videos\\.torrenezzi10\\.xyz|\n videos\\.trom\\.tf|\n videos\\.utsukta\\.org|\n videos\\.viorsan\\.com|\n videos\\.wherelinux\\.xyz|\n videos\\.wikilibriste\\.fr|\n videos\\.yesil\\.club|\n videos\\.yeswiki\\.net|\n videotube\\.duckdns\\.org|\n vids\\.capypara\\.de|\n vids\\.roshless\\.me|\n vids\\.stary\\.pc\\.pl|\n vids\\.tekdmn\\.me|\n vidz\\.julien\\.ovh|\n views\\.southfox\\.me|\n virtual-girls-are\\.definitely-for\\.me|\n viste\\.pt|\n vnchich\\.com|\n vnop\\.org|\n vod\\.newellijay\\.tv|\n voluntarytube\\.com|\n vtr\\.chikichiki\\.tube|\n vulgarisation-informatique\\.fr|\n watch\\.easya\\.solutions|\n watch\\.goodluckgabe\\.life|\n watch\\.ignorance\\.eu|\n watch\\.jimmydore\\.com|\n watch\\.libertaria\\.space|\n watch\\.nuked\\.social|\n watch\\.ocaml\\.org|\n watch\\.thelema\\.social|\n watch\\.tubelab\\.video|\n web-fellow\\.de|\n webtv\\.vandoeuvre\\.net|\n wetubevid\\.online|\n wikileaks\\.video|\n wiwi\\.video|\n wow\\.such\\.disappointment\\.fail|\n www\\.jvideos\\.net|\n www\\.kotikoff\\.net|\n www\\.makertube\\.net|\n www\\.mypeer\\.tube|\n www\\.nadajemy\\.com|\n www\\.neptube\\.io|\n www\\.rocaguinarda\\.tv|\n www\\.vnshow\\.net|\n xxivproduction\\.video|\n yt\\.orokoro\\.ru|\n ytube\\.retronerd\\.at|\n zumvideo\\.de|\n\n # from youtube-dl\n peertube\\.rainbowswingers\\.net|\n tube\\.stanisic\\.nl|\n peer\\.suiri\\.us|\n medias\\.libox\\.fr|\n videomensoif\\.ynh\\.fr|\n peertube\\.travelpandas\\.eu|\n peertube\\.rachetjay\\.fr|\n peertube\\.montecsys\\.fr|\n tube\\.eskuero\\.me|\n peer\\.tube|\n peertube\\.umeahackerspace\\.se|\n tube\\.nx-pod\\.de|\n video\\.monsieurbidouille\\.fr|\n tube\\.openalgeria\\.org|\n vid\\.lelux\\.fi|\n video\\.anormallostpod\\.ovh|\n tube\\.crapaud-fou\\.org|\n peertube\\.stemy\\.me|\n lostpod\\.space|\n exode\\.me|\n peertube\\.snargol\\.com|\n vis\\.ion\\.ovh|\n videosdulib\\.re|\n v\\.mbius\\.io|\n videos\\.judrey\\.eu|\n peertube\\.osureplayviewer\\.xyz|\n peertube\\.mathieufamily\\.ovh|\n www\\.videos-libr\\.es|\n fightforinfo\\.com|\n peertube\\.fediverse\\.ru|\n peertube\\.oiseauroch\\.fr|\n video\\.nesven\\.eu|\n v\\.bearvideo\\.win|\n video\\.qoto\\.org|\n justporn\\.cc|\n video\\.vny\\.fr|\n peervideo\\.club|\n tube\\.taker\\.fr|\n peertube\\.chantierlibre\\.org|\n tube\\.ipfixe\\.info|\n tube\\.kicou\\.info|\n tube\\.dodsorf\\.as|\n videobit\\.cc|\n video\\.yukari\\.moe|\n videos\\.elbinario\\.net|\n hkvideo\\.live|\n pt\\.tux\\.tf|\n www\\.hkvideo\\.live|\n FIGHTFORINFO\\.com|\n pt\\.765racing\\.com|\n peertube\\.gnumeria\\.eu\\.org|\n nordenmedia\\.com|\n peertube\\.co\\.uk|\n tube\\.darfweb\\.eu|\n tube\\.kalah-france\\.org|\n 0ch\\.in|\n vod\\.mochi\\.academy|\n film\\.node9\\.org|\n peertube\\.hatthieves\\.es|\n video\\.fitchfamily\\.org|\n peertube\\.ddns\\.net|\n video\\.ifuncle\\.kr|\n video\\.fdlibre\\.eu|\n tube\\.22decembre\\.eu|\n peertube\\.harmoniescreatives\\.com|\n tube\\.fabrigli\\.fr|\n video\\.thedwyers\\.co|\n video\\.bruitbruit\\.com|\n peertube\\.foxfam\\.club|\n peer\\.philoxweb\\.be|\n videos\\.bugs\\.social|\n peertube\\.malbert\\.xyz|\n peertube\\.bilange\\.ca|\n libretube\\.net|\n diytelevision\\.com|\n peertube\\.fedilab\\.app|\n libre\\.video|\n video\\.mstddntfdn\\.online|\n us\\.tv|\n peertube\\.sl-network\\.fr|\n peertube\\.dynlinux\\.io|\n peertube\\.david\\.durieux\\.family|\n peertube\\.linuxrocks\\.online|\n peerwatch\\.xyz|\n v\\.kretschmann\\.social|\n tube\\.otter\\.sh|\n yt\\.is\\.nota\\.live|\n tube\\.dragonpsi\\.xyz|\n peertube\\.boneheadmedia\\.com|\n videos\\.funkwhale\\.audio|\n watch\\.44con\\.com|\n peertube\\.gcaillaut\\.fr|\n peertube\\.icu|\n pony\\.tube|\n spacepub\\.space|\n tube\\.stbr\\.io|\n v\\.mom-gay\\.faith|\n tube\\.port0\\.xyz|\n peertube\\.simounet\\.net|\n play\\.jergefelt\\.se|\n peertube\\.zeteo\\.me|\n tube\\.danq\\.me|\n peertube\\.kerenon\\.com|\n tube\\.fab-l3\\.org|\n tube\\.calculate\\.social|\n peertube\\.mckillop\\.org|\n tube\\.netzspielplatz\\.de|\n vod\\.ksite\\.de|\n peertube\\.laas\\.fr|\n tube\\.govital\\.net|\n peertube\\.stephenson\\.cc|\n bistule\\.nohost\\.me|\n peertube\\.kajalinifi\\.de|\n video\\.ploud\\.jp|\n video\\.omniatv\\.com|\n peertube\\.ffs2play\\.fr|\n peertube\\.leboulaire\\.ovh|\n peertube\\.tronic-studio\\.com|\n peertube\\.public\\.cat|\n peertube\\.metalbanana\\.net|\n video\\.1000i100\\.fr|\n peertube\\.alter-nativ-voll\\.de|\n tube\\.pasa\\.tf|\n tube\\.worldofhauru\\.xyz|\n pt\\.kamp\\.site|\n peertube\\.teleassist\\.fr|\n videos\\.mleduc\\.xyz|\n conf\\.tube|\n media\\.privacyinternational\\.org|\n pt\\.forty-two\\.nl|\n video\\.halle-leaks\\.de|\n video\\.grosskopfgames\\.de|\n peertube\\.schaeferit\\.de|\n peertube\\.jackbot\\.fr|\n tube\\.extinctionrebellion\\.fr|\n peertube\\.f-si\\.org|\n video\\.subak\\.ovh|\n videos\\.koweb\\.fr|\n peertube\\.zergy\\.net|\n peertube\\.roflcopter\\.fr|\n peertube\\.floss-marketing-school\\.com|\n vloggers\\.social|\n peertube\\.iriseden\\.eu|\n videos\\.ubuntu-paris\\.org|\n peertube\\.mastodon\\.host|\n armstube\\.com|\n peertube\\.s2s\\.video|\n peertube\\.lol|\n tube\\.open-plug\\.eu|\n open\\.tube|\n peertube\\.ch|\n peertube\\.normandie-libre\\.fr|\n peertube\\.slat\\.org|\n video\\.lacaveatonton\\.ovh|\n peertube\\.uno|\n peertube\\.servebeer\\.com|\n peertube\\.fedi\\.quebec|\n tube\\.h3z\\.jp|\n tube\\.plus200\\.com|\n peertube\\.eric\\.ovh|\n tube\\.metadocs\\.cc|\n tube\\.unmondemeilleur\\.eu|\n gouttedeau\\.space|\n video\\.antirep\\.net|\n nrop\\.cant\\.at|\n tube\\.ksl-bmx\\.de|\n tube\\.plaf\\.fr|\n tube\\.tchncs\\.de|\n video\\.devinberg\\.com|\n hitchtube\\.fr|\n peertube\\.kosebamse\\.com|\n yunopeertube\\.myddns\\.me|\n peertube\\.varney\\.fr|\n peertube\\.anon-kenkai\\.com|\n tube\\.maiti\\.info|\n tubee\\.fr|\n videos\\.dinofly\\.com|\n toobnix\\.org|\n videotape\\.me|\n voca\\.tube|\n video\\.heromuster\\.com|\n video\\.lemediatv\\.fr|\n video\\.up\\.edu\\.ph|\n balafon\\.video|\n video\\.ivel\\.fr|\n thickrips\\.cloud|\n pt\\.laurentkruger\\.fr|\n video\\.monarch-pass\\.net|\n peertube\\.artica\\.center|\n video\\.alternanet\\.fr|\n indymotion\\.fr|\n fanvid\\.stopthatimp\\.net|\n video\\.farci\\.org|\n v\\.lesterpig\\.com|\n video\\.okaris\\.de|\n tube\\.pawelko\\.net|\n peertube\\.mablr\\.org|\n tube\\.fede\\.re|\n pytu\\.be|\n evertron\\.tv|\n devtube\\.dev-wiki\\.de|\n raptube\\.antipub\\.org|\n video\\.selea\\.se|\n peertube\\.mygaia\\.org|\n video\\.oh14\\.de|\n peertube\\.livingutopia\\.org|\n peertube\\.the-penguin\\.de|\n tube\\.thechangebook\\.org|\n tube\\.anjara\\.eu|\n pt\\.pube\\.tk|\n video\\.samedi\\.pm|\n mplayer\\.demouliere\\.eu|\n widemus\\.de|\n peertube\\.me|\n peertube\\.zapashcanon\\.fr|\n video\\.latavernedejohnjohn\\.fr|\n peertube\\.pcservice46\\.fr|\n peertube\\.mazzonetto\\.eu|\n video\\.irem\\.univ-paris-diderot\\.fr|\n video\\.livecchi\\.cloud|\n alttube\\.fr|\n video\\.coop\\.tools|\n video\\.cabane-libre\\.org|\n peertube\\.openstreetmap\\.fr|\n videos\\.alolise\\.org|\n irrsinn\\.video|\n video\\.antopie\\.org|\n scitech\\.video|\n tube2\\.nemsia\\.org|\n video\\.amic37\\.fr|\n peertube\\.freeforge\\.eu|\n video\\.arbitrarion\\.com|\n video\\.datsemultimedia\\.com|\n stoptrackingus\\.tv|\n peertube\\.ricostrongxxx\\.com|\n docker\\.videos\\.lecygnenoir\\.info|\n peertube\\.togart\\.de|\n tube\\.postblue\\.info|\n videos\\.domainepublic\\.net|\n peertube\\.cyber-tribal\\.com|\n video\\.gresille\\.org|\n peertube\\.dsmouse\\.net|\n cinema\\.yunohost\\.support|\n tube\\.theocevaer\\.fr|\n repro\\.video|\n tube\\.4aem\\.com|\n quaziinc\\.com|\n peertube\\.metawurst\\.space|\n videos\\.wakapo\\.com|\n video\\.ploud\\.fr|\n video\\.freeradical\\.zone|\n tube\\.valinor\\.fr|\n refuznik\\.video|\n pt\\.kircheneuenburg\\.de|\n peertube\\.asrun\\.eu|\n peertube\\.lagob\\.fr|\n videos\\.side-ways\\.net|\n 91video\\.online|\n video\\.valme\\.io|\n video\\.taboulisme\\.com|\n videos-libr\\.es|\n tv\\.mooh\\.fr|\n nuage\\.acostey\\.fr|\n video\\.monsieur-a\\.fr|\n peertube\\.librelois\\.fr|\n videos\\.pair2jeux\\.tube|\n videos\\.pueseso\\.club|\n peer\\.mathdacloud\\.ovh|\n media\\.assassinate-you\\.net|\n vidcommons\\.org|\n ptube\\.rousset\\.nom\\.fr|\n tube\\.cyano\\.at|\n videos\\.squat\\.net|\n video\\.iphodase\\.fr|\n peertube\\.makotoworkshop\\.org|\n peertube\\.serveur\\.slv-valbonne\\.fr|\n vault\\.mle\\.party|\n hostyour\\.tv|\n videos\\.hack2g2\\.fr|\n libre\\.tube|\n pire\\.artisanlogiciel\\.net|\n videos\\.numerique-en-commun\\.fr|\n video\\.netsyms\\.com|\n video\\.die-partei\\.social|\n video\\.writeas\\.org|\n peertube\\.swarm\\.solvingmaz\\.es|\n tube\\.pericoloso\\.ovh|\n watching\\.cypherpunk\\.observer|\n videos\\.adhocmusic\\.com|\n tube\\.rfc1149\\.net|\n peertube\\.librelabucm\\.org|\n videos\\.numericoop\\.fr|\n peertube\\.koehn\\.com|\n peertube\\.anarchmusicall\\.net|\n tube\\.kampftoast\\.de|\n vid\\.y-y\\.li|\n peertube\\.xtenz\\.xyz|\n diode\\.zone|\n tube\\.egf\\.mn|\n peertube\\.nomagic\\.uk|\n visionon\\.tv|\n videos\\.koumoul\\.com|\n video\\.rastapuls\\.com|\n video\\.mantlepro\\.com|\n video\\.deadsuperhero\\.com|\n peertube\\.musicstudio\\.pro|\n peertube\\.we-keys\\.fr|\n artitube\\.artifaille\\.fr|\n peertube\\.ethernia\\.net|\n tube\\.midov\\.pl|\n peertube\\.fr|\n watch\\.snoot\\.tube|\n peertube\\.donnadieu\\.fr|\n argos\\.aquilenet\\.fr|\n tube\\.nemsia\\.org|\n tube\\.bruniau\\.net|\n videos\\.darckoune\\.moe|\n tube\\.traydent\\.info|\n dev\\.videos\\.lecygnenoir\\.info|\n peertube\\.nayya\\.org|\n peertube\\.live|\n peertube\\.mofgao\\.space|\n video\\.lequerrec\\.eu|\n peertube\\.amicale\\.net|\n aperi\\.tube|\n tube\\.ac-lyon\\.fr|\n video\\.lw1\\.at|\n www\\.yiny\\.org|\n videos\\.pofilo\\.fr|\n tube\\.lou\\.lt|\n choob\\.h\\.etbus\\.ch|\n tube\\.hoga\\.fr|\n peertube\\.heberge\\.fr|\n video\\.obermui\\.de|\n videos\\.cloudfrancois\\.fr|\n betamax\\.video|\n video\\.typica\\.us|\n tube\\.piweb\\.be|\n video\\.blender\\.org|\n peertube\\.cat|\n tube\\.kdy\\.ch|\n pe\\.ertu\\.be|\n peertube\\.social|\n videos\\.lescommuns\\.org|\n tv\\.datamol\\.org|\n videonaute\\.fr|\n dialup\\.express|\n peertube\\.nogafa\\.org|\n megatube\\.lilomoino\\.fr|\n peertube\\.tamanoir\\.foucry\\.net|\n peertube\\.devosi\\.org|\n peertube\\.1312\\.media|\n tube\\.bootlicker\\.party|\n skeptikon\\.fr|\n video\\.blueline\\.mg|\n tube\\.homecomputing\\.fr|\n tube\\.ouahpiti\\.info|\n video\\.tedomum\\.net|\n video\\.g3l\\.org|\n fontube\\.fr|\n peertube\\.gaialabs\\.ch|\n tube\\.kher\\.nl|\n peertube\\.qtg\\.fr|\n video\\.migennes\\.net|\n tube\\.p2p\\.legal|\n troll\\.tv|\n videos\\.iut-orsay\\.fr|\n peertube\\.solidev\\.net|\n videos\\.cemea\\.org|\n video\\.passageenseine\\.fr|\n videos\\.festivalparminous\\.org|\n peertube\\.touhoppai\\.moe|\n sikke\\.fi|\n peer\\.hostux\\.social|\n share\\.tube|\n peertube\\.walkingmountains\\.fr|\n videos\\.benpro\\.fr|\n peertube\\.parleur\\.net|\n peertube\\.heraut\\.eu|\n tube\\.aquilenet\\.fr|\n peertube\\.gegeweb\\.eu|\n framatube\\.org|\n thinkerview\\.video|\n tube\\.conferences-gesticulees\\.net|\n peertube\\.datagueule\\.tv|\n video\\.lqdn\\.fr|\n tube\\.mochi\\.academy|\n media\\.zat\\.im|\n video\\.colibris-outilslibres\\.org|\n tube\\.svnet\\.fr|\n peertube\\.video|\n peertube2\\.cpy\\.re|\n peertube3\\.cpy\\.re|\n videos\\.tcit\\.fr|\n peertube\\.cpy\\.re|\n canard\\.tube\n ))/(?:videos/(?:watch|embed)|api/v\\d/videos|w)/\n )\n (?P<id>[\\da-zA-Z]{22}|[\\da-fA-F]{8}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{12})\n '
  6413. _RETURN_TYPE = 'video'
  6414. class PeerTubePlaylistIE(LazyLoadExtractor):
  6415. _module = 'yt_dlp.extractor.peertube'
  6416. IE_NAME = 'PeerTube:Playlist'
  6417. _VALID_URL = '(?x)\n https?://(?P<host>(?:\n # Taken from https://instances.joinpeertube.org/instances\n 0ch\\.tv|\n 3dctube\\.3dcandy\\.social|\n all\\.electric\\.kitchen|\n alterscope\\.fr|\n anarchy\\.tube|\n apathy\\.tv|\n apertatube\\.net|\n archive\\.nocopyrightintended\\.tv|\n archive\\.reclaim\\.tv|\n area51\\.media|\n astrotube-ufe\\.obspm\\.fr|\n astrotube\\.obspm\\.fr|\n audio\\.freediverse\\.com|\n azxtube\\.youssefc\\.tn|\n bark\\.video|\n battlepenguin\\.video|\n bava\\.tv|\n bee-tube\\.fr|\n beetoons\\.tv|\n biblion\\.refchat\\.net|\n biblioteca\\.theowlclub\\.net|\n bideoak\\.argia\\.eus|\n bideoteka\\.eus|\n birdtu\\.be|\n bitcointv\\.com|\n bonn\\.video|\n breeze\\.tube|\n brioco\\.live|\n brocosoup\\.fr|\n canal\\.facil\\.services|\n canard\\.tube|\n cdn01\\.tilvids\\.com|\n celluloid-media\\.huma-num\\.fr|\n chicago1\\.peertube\\.support|\n cliptube\\.org|\n cloudtube\\.ise\\.fraunhofer\\.de|\n comf\\.tube|\n comics\\.peertube\\.biz|\n commons\\.tube|\n communitymedia\\.video|\n conspiracydistillery\\.com|\n crank\\.recoil\\.org|\n dalek\\.zone|\n dalliance\\.network|\n dangly\\.parts|\n darkvapor\\.nohost\\.me|\n daschauher\\.aksel\\.rocks|\n digitalcourage\\.video|\n displayeurope\\.video|\n ds106\\.tv|\n dud-video\\.inf\\.tu-dresden\\.de|\n dud175\\.inf\\.tu-dresden\\.de|\n dytube\\.com|\n ebildungslabor\\.video|\n evangelisch\\.video|\n fair\\.tube|\n fedi\\.video|\n fedimovie\\.com|\n fediverse\\.tv|\n film\\.k-prod\\.fr|\n flipboard\\.video|\n foss\\.video|\n fossfarmers\\.company|\n fotogramas\\.politicaconciencia\\.org|\n freediverse\\.com|\n freesoto-u2151\\.vm\\.elestio\\.app|\n freesoto\\.tv|\n garr\\.tv|\n greatview\\.video|\n grypstube\\.uni-greifswald\\.de|\n habratube\\.site|\n ilbjach\\.ru|\n infothema\\.net|\n itvplus\\.iiens\\.net|\n johnydeep\\.net|\n juggling\\.digital|\n jupiter\\.tube|\n kadras\\.live|\n kino\\.kompot\\.si|\n kino\\.schuerz\\.at|\n kinowolnosc\\.pl|\n kirche\\.peertube-host\\.de|\n kiwi\\.froggirl\\.club|\n kodcast\\.com|\n kolektiva\\.media|\n kpop\\.22x22\\.ru|\n kumi\\.tube|\n la2\\.peertube\\.support|\n la3\\.peertube\\.support|\n la4\\.peertube\\.support|\n lastbreach\\.tv|\n lawsplaining\\.peertube\\.biz|\n leopard\\.tube|\n live\\.codinglab\\.ch|\n live\\.libratoi\\.org|\n live\\.oldskool\\.fi|\n live\\.solari\\.com|\n lucarne\\.balsamine\\.be|\n luxtube\\.lu|\n makertube\\.net|\n media\\.econoalchemist\\.com|\n media\\.exo\\.cat|\n media\\.fsfe\\.org|\n media\\.gzevd\\.de|\n media\\.interior\\.edu\\.uy|\n media\\.krashboyz\\.org|\n media\\.mzhd\\.de|\n media\\.smz-ma\\.de|\n media\\.theplattform\\.net|\n media\\.undeadnetwork\\.de|\n medias\\.debrouillonet\\.org|\n medias\\.pingbase\\.net|\n mediatube\\.fermalo\\.fr|\n melsungen\\.peertube-host\\.de|\n merci-la-police\\.fr|\n mindlyvideos\\.com|\n mirror\\.peertube\\.metalbanana\\.net|\n mirrored\\.rocks|\n mix\\.video|\n mountaintown\\.video|\n movies\\.metricsmaster\\.eu|\n mtube\\.mooo\\.com|\n mytube\\.kn-cloud\\.de|\n mytube\\.le5emeaxe\\.fr|\n mytube\\.madzel\\.de|\n nadajemy\\.com|\n nanawel-peertube\\.dyndns\\.org|\n neat\\.tube|\n nethack\\.tv|\n nicecrew\\.tv|\n nightshift\\.minnix\\.dev|\n nolog\\.media|\n nyltube\\.nylarea\\.com|\n ocfedtest\\.hosted\\.spacebear\\.ee|\n openmedia\\.edunova\\.it|\n p2ptv\\.ru|\n p\\.eertu\\.be|\n p\\.lu|\n pastafriday\\.club|\n patriottube\\.sonsofliberty\\.red|\n pcbu\\.nl|\n peer\\.azurs\\.fr|\n peer\\.d0g4\\.me|\n peer\\.lukeog\\.com|\n peer\\.madiator\\.cloud|\n peer\\.raise-uav\\.com|\n peershare\\.togart\\.de|\n peertube-blablalinux\\.be|\n peertube-demo\\.learning-hub\\.fr|\n peertube-docker\\.cpy\\.re|\n peertube-eu\\.howlround\\.com|\n peertube-u5014\\.vm\\.elestio\\.app|\n peertube-us\\.howlround\\.com|\n peertube\\.020\\.pl|\n peertube\\.0x5e\\.eu|\n peertube\\.1984\\.cz|\n peertube\\.2i2l\\.net|\n peertube\\.adjutor\\.xyz|\n peertube\\.adresse\\.data\\.gouv\\.fr|\n peertube\\.alpharius\\.io|\n peertube\\.am-networks\\.fr|\n peertube\\.anduin\\.net|\n peertube\\.anti-logic\\.com|\n peertube\\.arch-linux\\.cz|\n peertube\\.art3mis\\.de|\n peertube\\.artsrn\\.ualberta\\.ca|\n peertube\\.askan\\.info|\n peertube\\.astral0pitek\\.synology\\.me|\n peertube\\.atsuchan\\.page|\n peertube\\.automat\\.click|\n peertube\\.b38\\.rural-it\\.org|\n peertube\\.be|\n peertube\\.beeldengeluid\\.nl|\n peertube\\.bgzashtita\\.es|\n peertube\\.bike|\n peertube\\.bildung-ekhn\\.de|\n peertube\\.biz|\n peertube\\.br0\\.fr|\n peertube\\.bridaahost\\.ynh\\.fr|\n peertube\\.bubbletea\\.dev|\n peertube\\.bubuit\\.net|\n peertube\\.cabaal\\.net|\n peertube\\.chatinbit\\.com|\n peertube\\.chaunchy\\.com|\n peertube\\.chir\\.rs|\n peertube\\.christianpacaud\\.com|\n peertube\\.chtisurel\\.net|\n peertube\\.chuggybumba\\.com|\n peertube\\.cipherbliss\\.com|\n peertube\\.cirkau\\.art|\n peertube\\.cloud\\.nerdraum\\.de|\n peertube\\.cloud\\.sans\\.pub|\n peertube\\.coko\\.foundation|\n peertube\\.communecter\\.org|\n peertube\\.concordia\\.social|\n peertube\\.corrigan\\.xyz|\n peertube\\.cpge-brizeux\\.fr|\n peertube\\.ctseuro\\.com|\n peertube\\.cuatrolibertades\\.org|\n peertube\\.cube4fun\\.net|\n peertube\\.dair-institute\\.org|\n peertube\\.davigge\\.com|\n peertube\\.dc\\.pini\\.fr|\n peertube\\.deadtom\\.me|\n peertube\\.debian\\.social|\n peertube\\.delta0189\\.xyz|\n peertube\\.demonix\\.fr|\n peertube\\.designersethiques\\.org|\n peertube\\.desmu\\.fr|\n peertube\\.devol\\.it|\n peertube\\.dk|\n peertube\\.doesstuff\\.social|\n peertube\\.eb8\\.org|\n peertube\\.education-forum\\.com|\n peertube\\.elforcer\\.ru|\n peertube\\.em\\.id\\.lv|\n peertube\\.ethibox\\.fr|\n peertube\\.eu\\.org|\n peertube\\.european-pirates\\.eu|\n peertube\\.eus|\n peertube\\.euskarabildua\\.eus|\n peertube\\.expi\\.studio|\n peertube\\.familie-berner\\.de|\n peertube\\.familleboisteau\\.fr|\n peertube\\.fedihost\\.website|\n peertube\\.fenarinarsa\\.com|\n peertube\\.festnoz\\.de|\n peertube\\.forteza\\.fr|\n peertube\\.freestorm\\.online|\n peertube\\.functional\\.cafe|\n peertube\\.gaminglinux\\.fr|\n peertube\\.gargantia\\.fr|\n peertube\\.geekgalaxy\\.fr|\n peertube\\.gemlog\\.ca|\n peertube\\.genma\\.fr|\n peertube\\.get-racing\\.de|\n peertube\\.ghis94\\.ovh|\n peertube\\.gidikroon\\.eu|\n peertube\\.giftedmc\\.com|\n peertube\\.grosist\\.fr|\n peertube\\.gruntwerk\\.org|\n peertube\\.gsugambit\\.com|\n peertube\\.hackerfoo\\.com|\n peertube\\.hellsite\\.net|\n peertube\\.helvetet\\.eu|\n peertube\\.histoirescrepues\\.fr|\n peertube\\.home\\.x0r\\.fr|\n peertube\\.hyperfreedom\\.org|\n peertube\\.ichigo\\.everydayimshuflin\\.com|\n peertube\\.ifwo\\.eu|\n peertube\\.in\\.ua|\n peertube\\.inapurna\\.org|\n peertube\\.informaction\\.info|\n peertube\\.interhop\\.org|\n peertube\\.it|\n peertube\\.it-arts\\.net|\n peertube\\.jensdiemer\\.de|\n peertube\\.johntheserg\\.al|\n peertube\\.kaleidos\\.net|\n peertube\\.kalua\\.im|\n peertube\\.kcore\\.org|\n peertube\\.keazilla\\.net|\n peertube\\.klaewyss\\.fr|\n peertube\\.kleph\\.eu|\n peertube\\.kodein\\.be|\n peertube\\.kooperatywa\\.tech|\n peertube\\.kriom\\.net|\n peertube\\.kx\\.studio|\n peertube\\.kyriog\\.eu|\n peertube\\.la-famille-muller\\.fr|\n peertube\\.labeuropereunion\\.eu|\n peertube\\.lagvoid\\.com|\n peertube\\.lhc\\.net\\.br|\n peertube\\.libresolutions\\.network|\n peertube\\.libretic\\.fr|\n peertube\\.librosphere\\.fr|\n peertube\\.logilab\\.fr|\n peertube\\.lon\\.tv|\n peertube\\.louisematic\\.site|\n peertube\\.luckow\\.org|\n peertube\\.luga\\.at|\n peertube\\.lyceeconnecte\\.fr|\n peertube\\.madixam\\.xyz|\n peertube\\.magicstone\\.dev|\n peertube\\.marienschule\\.de|\n peertube\\.marud\\.fr|\n peertube\\.maxweiss\\.io|\n peertube\\.miguelcr\\.me|\n peertube\\.mikemestnik\\.net|\n peertube\\.mobilsicher\\.de|\n peertube\\.monlycee\\.net|\n peertube\\.mxinfo\\.fr|\n peertube\\.naln1\\.ca|\n peertube\\.netzbegruenung\\.de|\n peertube\\.nicolastissot\\.fr|\n peertube\\.nogafam\\.fr|\n peertube\\.normalgamingcommunity\\.cz|\n peertube\\.nz|\n peertube\\.offerman\\.com|\n peertube\\.ohioskates\\.com|\n peertube\\.onionstorm\\.net|\n peertube\\.opencloud\\.lu|\n peertube\\.otakufarms\\.com|\n peertube\\.paladyn\\.org|\n peertube\\.pix-n-chill\\.fr|\n peertube\\.r2\\.enst\\.fr|\n peertube\\.r5c3\\.fr|\n peertube\\.redpill-insight\\.com|\n peertube\\.researchinstitute\\.at|\n peertube\\.revelin\\.fr|\n peertube\\.rlp\\.schule|\n peertube\\.rokugan\\.fr|\n peertube\\.rougevertbleu\\.tv|\n peertube\\.roundpond\\.net|\n peertube\\.rural-it\\.org|\n peertube\\.satoshishop\\.de|\n peertube\\.scyldings\\.com|\n peertube\\.securitymadein\\.lu|\n peertube\\.semperpax\\.com|\n peertube\\.semweb\\.pro|\n peertube\\.sensin\\.eu|\n peertube\\.sidh\\.bzh|\n peertube\\.skorpil\\.cz|\n peertube\\.smertrios\\.com|\n peertube\\.sqweeb\\.net|\n peertube\\.stattzeitung\\.org|\n peertube\\.stream|\n peertube\\.su|\n peertube\\.swrs\\.net|\n peertube\\.takeko\\.cyou|\n peertube\\.taxinachtegel\\.de|\n peertube\\.teftera\\.com|\n peertube\\.teutronic-services\\.de|\n peertube\\.ti-fr\\.com|\n peertube\\.tiennot\\.net|\n peertube\\.tmp\\.rcp\\.tf|\n peertube\\.tspu\\.edu\\.ru|\n peertube\\.tv|\n peertube\\.tweb\\.tv|\n peertube\\.underworld\\.fr|\n peertube\\.vapronva\\.pw|\n peertube\\.veen\\.world|\n peertube\\.vesdia\\.eu|\n peertube\\.virtual-assembly\\.org|\n peertube\\.viviers-fibre\\.net|\n peertube\\.vlaki\\.cz|\n peertube\\.wiesbaden\\.social|\n peertube\\.wivodaim\\.net|\n peertube\\.wtf|\n peertube\\.wtfayla\\.net|\n peertube\\.xrcb\\.cat|\n peertube\\.xwiki\\.com|\n peertube\\.zd\\.do|\n peertube\\.zetamc\\.net|\n peertube\\.zmuuf\\.org|\n peertube\\.zoz-serv\\.org|\n peertube\\.zwindler\\.fr|\n peervideo\\.ru|\n periscope\\.numenaute\\.org|\n pete\\.warpnine\\.de|\n petitlutinartube\\.fr|\n phijkchu\\.com|\n phoenixproject\\.group|\n piraten\\.space|\n pirtube\\.calut\\.fr|\n pityu\\.flaki\\.hu|\n play\\.mittdata\\.se|\n player\\.ojamajo\\.moe|\n podlibre\\.video|\n portal\\.digilab\\.nfa\\.cz|\n private\\.fedimovie\\.com|\n pt01\\.lehrerfortbildung-bw\\.de|\n pt\\.diaspodon\\.fr|\n pt\\.freedomwolf\\.cc|\n pt\\.gordons\\.gen\\.nz|\n pt\\.ilyamikcoder\\.com|\n pt\\.irnok\\.net|\n pt\\.mezzo\\.moe|\n pt\\.na4\\.eu|\n pt\\.netcraft\\.ch|\n pt\\.rwx\\.ch|\n pt\\.sfunk1x\\.com|\n pt\\.thishorsie\\.rocks|\n pt\\.vern\\.cc|\n ptb\\.lunarviews\\.net|\n ptube\\.de|\n ptube\\.ranranhome\\.info|\n puffy\\.tube|\n puppet\\.zone|\n qtube\\.qlyoung\\.net|\n quantube\\.win|\n rankett\\.net|\n replay\\.jres\\.org|\n review\\.peertube\\.biz|\n sdmtube\\.fr|\n secure\\.direct-live\\.net|\n secure\\.scanovid\\.com|\n seka\\.pona\\.la|\n serv3\\.wiki-tube\\.de|\n skeptube\\.fr|\n social\\.fedimovie\\.com|\n socpeertube\\.ru|\n sovran\\.video|\n special\\.videovortex\\.tv|\n spectra\\.video|\n stl1988\\.peertube-host\\.de|\n stream\\.biovisata\\.lt|\n stream\\.conesphere\\.cloud|\n stream\\.elven\\.pw|\n stream\\.jurnalfm\\.md|\n stream\\.k-prod\\.fr|\n stream\\.litera\\.tools|\n stream\\.nuemedia\\.se|\n stream\\.rlp-media\\.de|\n stream\\.vrse\\.be|\n studios\\.racer159\\.com|\n styxhexenhammer666\\.com|\n syrteplay\\.obspm\\.fr|\n t\\.0x0\\.st|\n tbh\\.co-shaoghal\\.net|\n test-fab\\.ynh\\.fr|\n testube\\.distrilab\\.fr|\n tgi\\.hosted\\.spacebear\\.ee|\n theater\\.ethernia\\.net|\n thecool\\.tube|\n thevideoverse\\.com|\n tilvids\\.com|\n tinkerbetter\\.tube|\n tinsley\\.video|\n trailers\\.ddigest\\.com|\n tube-action-educative\\.apps\\.education\\.fr|\n tube-arts-lettres-sciences-humaines\\.apps\\.education\\.fr|\n tube-cycle-2\\.apps\\.education\\.fr|\n tube-cycle-3\\.apps\\.education\\.fr|\n tube-education-physique-et-sportive\\.apps\\.education\\.fr|\n tube-enseignement-professionnel\\.apps\\.education\\.fr|\n tube-institutionnel\\.apps\\.education\\.fr|\n tube-langues-vivantes\\.apps\\.education\\.fr|\n tube-maternelle\\.apps\\.education\\.fr|\n tube-numerique-educatif\\.apps\\.education\\.fr|\n tube-sciences-technologies\\.apps\\.education\\.fr|\n tube-test\\.apps\\.education\\.fr|\n tube1\\.perron-service\\.de|\n tube\\.9minuti\\.it|\n tube\\.abolivier\\.bzh|\n tube\\.alado\\.space|\n tube\\.amic37\\.fr|\n tube\\.area404\\.cloud|\n tube\\.arthack\\.nz|\n tube\\.asulia\\.fr|\n tube\\.awkward\\.company|\n tube\\.azbyka\\.ru|\n tube\\.azkware\\.net|\n tube\\.bartrip\\.me\\.uk|\n tube\\.belowtoxic\\.media|\n tube\\.bingle\\.plus|\n tube\\.bit-friends\\.de|\n tube\\.bstly\\.de|\n tube\\.chosto\\.me|\n tube\\.cms\\.garden|\n tube\\.communia\\.org|\n tube\\.cyberia\\.club|\n tube\\.cybershock\\.life|\n tube\\.dembased\\.xyz|\n tube\\.dev\\.displ\\.eu|\n tube\\.digitalesozialearbeit\\.de|\n tube\\.distrilab\\.fr|\n tube\\.doortofreedom\\.org|\n tube\\.dsocialize\\.net|\n tube\\.e-jeremy\\.com|\n tube\\.ebin\\.club|\n tube\\.elemac\\.fr|\n tube\\.erzbistum-hamburg\\.de|\n tube\\.exozy\\.me|\n tube\\.fdn\\.fr|\n tube\\.fedi\\.quebec|\n tube\\.fediverse\\.at|\n tube\\.felinn\\.org|\n tube\\.flokinet\\.is|\n tube\\.foad\\.me\\.uk|\n tube\\.freepeople\\.fr|\n tube\\.friloux\\.me|\n tube\\.froth\\.zone|\n tube\\.fulda\\.social|\n tube\\.futuretic\\.fr|\n tube\\.g1zm0\\.de|\n tube\\.g4rf\\.net|\n tube\\.gaiac\\.io|\n tube\\.geekyboo\\.net|\n tube\\.genb\\.de|\n tube\\.ghk-academy\\.info|\n tube\\.gi-it\\.de|\n tube\\.grap\\.coop|\n tube\\.graz\\.social|\n tube\\.grin\\.hu|\n tube\\.hokai\\.lol|\n tube\\.int5\\.net|\n tube\\.interhacker\\.space|\n tube\\.invisible\\.ch|\n tube\\.io18\\.top|\n tube\\.itsg\\.host|\n tube\\.jeena\\.net|\n tube\\.kh-berlin\\.de|\n tube\\.kockatoo\\.org|\n tube\\.kotur\\.org|\n tube\\.koweb\\.fr|\n tube\\.la-dina\\.net|\n tube\\.lab\\.nrw|\n tube\\.lacaveatonton\\.ovh|\n tube\\.laurent-malys\\.fr|\n tube\\.leetdreams\\.ch|\n tube\\.linkse\\.media|\n tube\\.lokad\\.com|\n tube\\.lucie-philou\\.com|\n tube\\.media-techport\\.de|\n tube\\.morozoff\\.pro|\n tube\\.neshweb\\.net|\n tube\\.nestor\\.coop|\n tube\\.network\\.europa\\.eu|\n tube\\.nicfab\\.eu|\n tube\\.nieuwwestbrabant\\.nl|\n tube\\.nogafa\\.org|\n tube\\.novg\\.net|\n tube\\.nox-rhea\\.org|\n tube\\.nuagelibre\\.fr|\n tube\\.numerique\\.gouv\\.fr|\n tube\\.nuxnik\\.com|\n tube\\.nx12\\.net|\n tube\\.octaplex\\.net|\n tube\\.oisux\\.org|\n tube\\.okcinfo\\.news|\n tube\\.onlinekirche\\.net|\n tube\\.opportunis\\.me|\n tube\\.oraclefilms\\.com|\n tube\\.org\\.il|\n tube\\.pacapime\\.ovh|\n tube\\.parinux\\.org|\n tube\\.pastwind\\.top|\n tube\\.picasoft\\.net|\n tube\\.pilgerweg-21\\.de|\n tube\\.pmj\\.rocks|\n tube\\.pol\\.social|\n tube\\.ponsonaille\\.fr|\n tube\\.portes-imaginaire\\.org|\n tube\\.public\\.apolut\\.net|\n tube\\.pustule\\.org|\n tube\\.pyngu\\.com|\n tube\\.querdenken-711\\.de|\n tube\\.rebellion\\.global|\n tube\\.reseau-canope\\.fr|\n tube\\.rhythms-of-resistance\\.org|\n tube\\.risedsky\\.ovh|\n tube\\.rooty\\.fr|\n tube\\.rsi\\.cnr\\.it|\n tube\\.ryne\\.moe|\n tube\\.schleuss\\.online|\n tube\\.schule\\.social|\n tube\\.sekretaerbaer\\.net|\n tube\\.shanti\\.cafe|\n tube\\.shela\\.nu|\n tube\\.skrep\\.in|\n tube\\.sleeping\\.town|\n tube\\.sp-codes\\.de|\n tube\\.spdns\\.org|\n tube\\.systerserver\\.net|\n tube\\.systest\\.eu|\n tube\\.tappret\\.fr|\n tube\\.techeasy\\.org|\n tube\\.thierrytalbert\\.fr|\n tube\\.tinfoil-hat\\.net|\n tube\\.toldi\\.eu|\n tube\\.tpshd\\.de|\n tube\\.trax\\.im|\n tube\\.troopers\\.agency|\n tube\\.ttk\\.is|\n tube\\.tuxfriend\\.fr|\n tube\\.tylerdavis\\.xyz|\n tube\\.ullihome\\.de|\n tube\\.ulne\\.be|\n tube\\.undernet\\.uy|\n tube\\.vrpnet\\.org|\n tube\\.wolfe\\.casa|\n tube\\.xd0\\.de|\n tube\\.xn--baw-joa\\.social|\n tube\\.xy-space\\.de|\n tube\\.yapbreak\\.fr|\n tubedu\\.org|\n tubulus\\.openlatin\\.org|\n turtleisland\\.video|\n tututu\\.tube|\n tv\\.adast\\.dk|\n tv\\.adn\\.life|\n tv\\.arns\\.lt|\n tv\\.atmx\\.ca|\n tv\\.based\\.quest|\n tv\\.farewellutopia\\.com|\n tv\\.filmfreedom\\.net|\n tv\\.gravitons\\.org|\n tv\\.io\\.seg\\.br|\n tv\\.lumbung\\.space|\n tv\\.pirateradio\\.social|\n tv\\.pirati\\.cz|\n tv\\.santic-zombie\\.ru|\n tv\\.undersco\\.re|\n tv\\.zonepl\\.net|\n tvox\\.ru|\n twctube\\.twc-zone\\.eu|\n twobeek\\.com|\n urbanists\\.video|\n v\\.9tail\\.net|\n v\\.basspistol\\.org|\n v\\.j4\\.lc|\n v\\.kisombrella\\.top|\n v\\.koa\\.im|\n v\\.kyaru\\.xyz|\n v\\.lor\\.sh|\n v\\.mkp\\.ca|\n v\\.posm\\.gay|\n v\\.slaycer\\.top|\n veedeo\\.org|\n vhs\\.absturztau\\.be|\n vid\\.cthos\\.dev|\n vid\\.kinuseka\\.us|\n vid\\.mkp\\.ca|\n vid\\.nocogabriel\\.fr|\n vid\\.norbipeti\\.eu|\n vid\\.northbound\\.online|\n vid\\.ohboii\\.de|\n vid\\.plantplotting\\.co\\.uk|\n vid\\.pretok\\.tv|\n vid\\.prometheus\\.systems|\n vid\\.soafen\\.love|\n vid\\.twhtv\\.club|\n vid\\.wildeboer\\.net|\n video-cave-v2\\.de|\n video-liberty\\.com|\n video\\.076\\.ne\\.jp|\n video\\.1146\\.nohost\\.me|\n video\\.9wd\\.eu|\n video\\.abraum\\.de|\n video\\.ados\\.accoord\\.fr|\n video\\.amiga-ng\\.org|\n video\\.anartist\\.org|\n video\\.asgardius\\.company|\n video\\.audiovisuel-participatif\\.org|\n video\\.bards\\.online|\n video\\.barkoczy\\.social|\n video\\.benetou\\.fr|\n video\\.beyondwatts\\.social|\n video\\.bgeneric\\.net|\n video\\.bilecik\\.edu\\.tr|\n video\\.blast-info\\.fr|\n video\\.bmu\\.cloud|\n video\\.catgirl\\.biz|\n video\\.causa-arcana\\.com|\n video\\.chasmcity\\.net|\n video\\.chbmeyer\\.de|\n video\\.cigliola\\.com|\n video\\.citizen4\\.eu|\n video\\.clumsy\\.computer|\n video\\.cnnumerique\\.fr|\n video\\.cnr\\.it|\n video\\.cnt\\.social|\n video\\.coales\\.co|\n video\\.comune\\.trento\\.it|\n video\\.coyp\\.us|\n video\\.csc49\\.fr|\n video\\.davduf\\.net|\n video\\.davejansen\\.com|\n video\\.dlearning\\.nl|\n video\\.dnfi\\.no|\n video\\.dresden\\.network|\n video\\.drgnz\\.club|\n video\\.dudenas\\.lt|\n video\\.eientei\\.org|\n video\\.ellijaymakerspace\\.org|\n video\\.emergeheart\\.info|\n video\\.eradicatinglove\\.xyz|\n video\\.everythingbagel\\.me|\n video\\.extremelycorporate\\.ca|\n video\\.fabiomanganiello\\.com|\n video\\.fedi\\.bzh|\n video\\.fhtagn\\.org|\n video\\.firehawk-systems\\.com|\n video\\.fox-romka\\.ru|\n video\\.fuss\\.bz\\.it|\n video\\.glassbeadcollective\\.org|\n video\\.graine-pdl\\.org|\n video\\.gyt\\.is|\n video\\.hainry\\.fr|\n video\\.hardlimit\\.com|\n video\\.hostux\\.net|\n video\\.igem\\.org|\n video\\.infojournal\\.fr|\n video\\.internet-czas-dzialac\\.pl|\n video\\.interru\\.io|\n video\\.ipng\\.ch|\n video\\.ironsysadmin\\.com|\n video\\.islameye\\.com|\n video\\.jacen\\.moe|\n video\\.jadin\\.me|\n video\\.jeffmcbride\\.net|\n video\\.jigmedatse\\.com|\n video\\.kuba-orlik\\.name|\n video\\.lacalligramme\\.fr|\n video\\.lanceurs-alerte\\.fr|\n video\\.laotra\\.red|\n video\\.lapineige\\.fr|\n video\\.laraffinerie\\.re|\n video\\.lavolte\\.net|\n video\\.liberta\\.vip|\n video\\.libreti\\.net|\n video\\.licentia\\.net|\n video\\.linc\\.systems|\n video\\.linux\\.it|\n video\\.linuxtrent\\.it|\n video\\.liveitlive\\.show|\n video\\.lono\\.space|\n video\\.lrose\\.de|\n video\\.lunago\\.net|\n video\\.lundi\\.am|\n video\\.lycee-experimental\\.org|\n video\\.maechler\\.cloud|\n video\\.marcorennmaus\\.de|\n video\\.mass-trespass\\.uk|\n video\\.matomocamp\\.org|\n video\\.medienzentrum-harburg\\.de|\n video\\.mentality\\.rip|\n video\\.metaversum\\.wtf|\n video\\.midreality\\.com|\n video\\.mttv\\.it|\n video\\.mugoreve\\.fr|\n video\\.mxtthxw\\.art|\n video\\.mycrowd\\.ca|\n video\\.niboe\\.info|\n video\\.nogafam\\.es|\n video\\.nstr\\.no|\n video\\.occm\\.cc|\n video\\.off-investigation\\.fr|\n video\\.olos311\\.org|\n video\\.ordinobsolete\\.fr|\n video\\.osvoj\\.ru|\n video\\.ourcommon\\.cloud|\n video\\.ozgurkon\\.org|\n video\\.pcf\\.fr|\n video\\.pcgaldo\\.com|\n video\\.phyrone\\.de|\n video\\.poul\\.org|\n video\\.publicspaces\\.net|\n video\\.pullopen\\.xyz|\n video\\.r3s\\.nrw|\n video\\.rainevixen\\.com|\n video\\.resolutions\\.it|\n video\\.retroedge\\.tech|\n video\\.rhizome\\.org|\n video\\.rlp-media\\.de|\n video\\.rs-einrich\\.de|\n video\\.rubdos\\.be|\n video\\.sadmin\\.io|\n video\\.sftblw\\.moe|\n video\\.shitposter\\.club|\n video\\.simplex-software\\.ru|\n video\\.slipfox\\.xyz|\n video\\.snug\\.moe|\n video\\.software-fuer-engagierte\\.de|\n video\\.soi\\.ch|\n video\\.sonet\\.ws|\n video\\.surazal\\.net|\n video\\.taskcards\\.eu|\n video\\.team-lcbs\\.eu|\n video\\.techforgood\\.social|\n video\\.telemillevaches\\.net|\n video\\.thepolarbear\\.co\\.uk|\n video\\.thinkof\\.name|\n video\\.tii\\.space|\n video\\.tkz\\.es|\n video\\.trankil\\.info|\n video\\.triplea\\.fr|\n video\\.tum\\.social|\n video\\.turbo\\.chat|\n video\\.uriopss-pdl\\.fr|\n video\\.ustim\\.ru|\n video\\.ut0pia\\.org|\n video\\.vaku\\.org\\.ua|\n video\\.vegafjord\\.me|\n video\\.veloma\\.org|\n video\\.violoncello\\.ch|\n video\\.voidconspiracy\\.band|\n video\\.wakkeren\\.nl|\n video\\.windfluechter\\.org|\n video\\.ziez\\.eu|\n videos-passages\\.huma-num\\.fr|\n videos\\.aadtp\\.be|\n videos\\.ahp-numerique\\.fr|\n videos\\.alamaisondulibre\\.org|\n videos\\.archigny\\.net|\n videos\\.aroaduntraveled\\.com|\n videos\\.b4tech\\.org|\n videos\\.benjaminbrady\\.ie|\n videos\\.bik\\.opencloud\\.lu|\n videos\\.cloudron\\.io|\n videos\\.codingotaku\\.com|\n videos\\.coletivos\\.org|\n videos\\.collate\\.social|\n videos\\.danksquad\\.org|\n videos\\.digitaldragons\\.eu|\n videos\\.dromeadhere\\.fr|\n videos\\.explain-it\\.org|\n videos\\.factsonthegroundshow\\.com|\n videos\\.foilen\\.com|\n videos\\.fsci\\.in|\n videos\\.gamercast\\.net|\n videos\\.gianmarco\\.gg|\n videos\\.globenet\\.org|\n videos\\.grafo\\.zone|\n videos\\.hauspie\\.fr|\n videos\\.hush\\.is|\n videos\\.hyphalfusion\\.network|\n videos\\.icum\\.to|\n videos\\.im\\.allmendenetz\\.de|\n videos\\.jacksonchen666\\.com|\n videos\\.john-livingston\\.fr|\n videos\\.knazarov\\.com|\n videos\\.kuoushi\\.com|\n videos\\.laliguepaysdelaloire\\.org|\n videos\\.lemouvementassociatif-pdl\\.org|\n videos\\.leslionsfloorball\\.fr|\n videos\\.librescrum\\.org|\n videos\\.mastodont\\.cat|\n videos\\.metus\\.ca|\n videos\\.miolo\\.org|\n videos\\.offroad\\.town|\n videos\\.openmandriva\\.org|\n videos\\.parleur\\.net|\n videos\\.pcorp\\.us|\n videos\\.pop\\.eu\\.com|\n videos\\.rampin\\.org|\n videos\\.rauten\\.co\\.za|\n videos\\.ritimo\\.org|\n videos\\.sarcasmstardust\\.com|\n videos\\.scanlines\\.xyz|\n videos\\.shmalls\\.pw|\n videos\\.stadtfabrikanten\\.org|\n videos\\.supertuxkart\\.net|\n videos\\.testimonia\\.org|\n videos\\.thinkerview\\.com|\n videos\\.torrenezzi10\\.xyz|\n videos\\.trom\\.tf|\n videos\\.utsukta\\.org|\n videos\\.viorsan\\.com|\n videos\\.wherelinux\\.xyz|\n videos\\.wikilibriste\\.fr|\n videos\\.yesil\\.club|\n videos\\.yeswiki\\.net|\n videotube\\.duckdns\\.org|\n vids\\.capypara\\.de|\n vids\\.roshless\\.me|\n vids\\.stary\\.pc\\.pl|\n vids\\.tekdmn\\.me|\n vidz\\.julien\\.ovh|\n views\\.southfox\\.me|\n virtual-girls-are\\.definitely-for\\.me|\n viste\\.pt|\n vnchich\\.com|\n vnop\\.org|\n vod\\.newellijay\\.tv|\n voluntarytube\\.com|\n vtr\\.chikichiki\\.tube|\n vulgarisation-informatique\\.fr|\n watch\\.easya\\.solutions|\n watch\\.goodluckgabe\\.life|\n watch\\.ignorance\\.eu|\n watch\\.jimmydore\\.com|\n watch\\.libertaria\\.space|\n watch\\.nuked\\.social|\n watch\\.ocaml\\.org|\n watch\\.thelema\\.social|\n watch\\.tubelab\\.video|\n web-fellow\\.de|\n webtv\\.vandoeuvre\\.net|\n wetubevid\\.online|\n wikileaks\\.video|\n wiwi\\.video|\n wow\\.such\\.disappointment\\.fail|\n www\\.jvideos\\.net|\n www\\.kotikoff\\.net|\n www\\.makertube\\.net|\n www\\.mypeer\\.tube|\n www\\.nadajemy\\.com|\n www\\.neptube\\.io|\n www\\.rocaguinarda\\.tv|\n www\\.vnshow\\.net|\n xxivproduction\\.video|\n yt\\.orokoro\\.ru|\n ytube\\.retronerd\\.at|\n zumvideo\\.de|\n\n # from youtube-dl\n peertube\\.rainbowswingers\\.net|\n tube\\.stanisic\\.nl|\n peer\\.suiri\\.us|\n medias\\.libox\\.fr|\n videomensoif\\.ynh\\.fr|\n peertube\\.travelpandas\\.eu|\n peertube\\.rachetjay\\.fr|\n peertube\\.montecsys\\.fr|\n tube\\.eskuero\\.me|\n peer\\.tube|\n peertube\\.umeahackerspace\\.se|\n tube\\.nx-pod\\.de|\n video\\.monsieurbidouille\\.fr|\n tube\\.openalgeria\\.org|\n vid\\.lelux\\.fi|\n video\\.anormallostpod\\.ovh|\n tube\\.crapaud-fou\\.org|\n peertube\\.stemy\\.me|\n lostpod\\.space|\n exode\\.me|\n peertube\\.snargol\\.com|\n vis\\.ion\\.ovh|\n videosdulib\\.re|\n v\\.mbius\\.io|\n videos\\.judrey\\.eu|\n peertube\\.osureplayviewer\\.xyz|\n peertube\\.mathieufamily\\.ovh|\n www\\.videos-libr\\.es|\n fightforinfo\\.com|\n peertube\\.fediverse\\.ru|\n peertube\\.oiseauroch\\.fr|\n video\\.nesven\\.eu|\n v\\.bearvideo\\.win|\n video\\.qoto\\.org|\n justporn\\.cc|\n video\\.vny\\.fr|\n peervideo\\.club|\n tube\\.taker\\.fr|\n peertube\\.chantierlibre\\.org|\n tube\\.ipfixe\\.info|\n tube\\.kicou\\.info|\n tube\\.dodsorf\\.as|\n videobit\\.cc|\n video\\.yukari\\.moe|\n videos\\.elbinario\\.net|\n hkvideo\\.live|\n pt\\.tux\\.tf|\n www\\.hkvideo\\.live|\n FIGHTFORINFO\\.com|\n pt\\.765racing\\.com|\n peertube\\.gnumeria\\.eu\\.org|\n nordenmedia\\.com|\n peertube\\.co\\.uk|\n tube\\.darfweb\\.eu|\n tube\\.kalah-france\\.org|\n 0ch\\.in|\n vod\\.mochi\\.academy|\n film\\.node9\\.org|\n peertube\\.hatthieves\\.es|\n video\\.fitchfamily\\.org|\n peertube\\.ddns\\.net|\n video\\.ifuncle\\.kr|\n video\\.fdlibre\\.eu|\n tube\\.22decembre\\.eu|\n peertube\\.harmoniescreatives\\.com|\n tube\\.fabrigli\\.fr|\n video\\.thedwyers\\.co|\n video\\.bruitbruit\\.com|\n peertube\\.foxfam\\.club|\n peer\\.philoxweb\\.be|\n videos\\.bugs\\.social|\n peertube\\.malbert\\.xyz|\n peertube\\.bilange\\.ca|\n libretube\\.net|\n diytelevision\\.com|\n peertube\\.fedilab\\.app|\n libre\\.video|\n video\\.mstddntfdn\\.online|\n us\\.tv|\n peertube\\.sl-network\\.fr|\n peertube\\.dynlinux\\.io|\n peertube\\.david\\.durieux\\.family|\n peertube\\.linuxrocks\\.online|\n peerwatch\\.xyz|\n v\\.kretschmann\\.social|\n tube\\.otter\\.sh|\n yt\\.is\\.nota\\.live|\n tube\\.dragonpsi\\.xyz|\n peertube\\.boneheadmedia\\.com|\n videos\\.funkwhale\\.audio|\n watch\\.44con\\.com|\n peertube\\.gcaillaut\\.fr|\n peertube\\.icu|\n pony\\.tube|\n spacepub\\.space|\n tube\\.stbr\\.io|\n v\\.mom-gay\\.faith|\n tube\\.port0\\.xyz|\n peertube\\.simounet\\.net|\n play\\.jergefelt\\.se|\n peertube\\.zeteo\\.me|\n tube\\.danq\\.me|\n peertube\\.kerenon\\.com|\n tube\\.fab-l3\\.org|\n tube\\.calculate\\.social|\n peertube\\.mckillop\\.org|\n tube\\.netzspielplatz\\.de|\n vod\\.ksite\\.de|\n peertube\\.laas\\.fr|\n tube\\.govital\\.net|\n peertube\\.stephenson\\.cc|\n bistule\\.nohost\\.me|\n peertube\\.kajalinifi\\.de|\n video\\.ploud\\.jp|\n video\\.omniatv\\.com|\n peertube\\.ffs2play\\.fr|\n peertube\\.leboulaire\\.ovh|\n peertube\\.tronic-studio\\.com|\n peertube\\.public\\.cat|\n peertube\\.metalbanana\\.net|\n video\\.1000i100\\.fr|\n peertube\\.alter-nativ-voll\\.de|\n tube\\.pasa\\.tf|\n tube\\.worldofhauru\\.xyz|\n pt\\.kamp\\.site|\n peertube\\.teleassist\\.fr|\n videos\\.mleduc\\.xyz|\n conf\\.tube|\n media\\.privacyinternational\\.org|\n pt\\.forty-two\\.nl|\n video\\.halle-leaks\\.de|\n video\\.grosskopfgames\\.de|\n peertube\\.schaeferit\\.de|\n peertube\\.jackbot\\.fr|\n tube\\.extinctionrebellion\\.fr|\n peertube\\.f-si\\.org|\n video\\.subak\\.ovh|\n videos\\.koweb\\.fr|\n peertube\\.zergy\\.net|\n peertube\\.roflcopter\\.fr|\n peertube\\.floss-marketing-school\\.com|\n vloggers\\.social|\n peertube\\.iriseden\\.eu|\n videos\\.ubuntu-paris\\.org|\n peertube\\.mastodon\\.host|\n armstube\\.com|\n peertube\\.s2s\\.video|\n peertube\\.lol|\n tube\\.open-plug\\.eu|\n open\\.tube|\n peertube\\.ch|\n peertube\\.normandie-libre\\.fr|\n peertube\\.slat\\.org|\n video\\.lacaveatonton\\.ovh|\n peertube\\.uno|\n peertube\\.servebeer\\.com|\n peertube\\.fedi\\.quebec|\n tube\\.h3z\\.jp|\n tube\\.plus200\\.com|\n peertube\\.eric\\.ovh|\n tube\\.metadocs\\.cc|\n tube\\.unmondemeilleur\\.eu|\n gouttedeau\\.space|\n video\\.antirep\\.net|\n nrop\\.cant\\.at|\n tube\\.ksl-bmx\\.de|\n tube\\.plaf\\.fr|\n tube\\.tchncs\\.de|\n video\\.devinberg\\.com|\n hitchtube\\.fr|\n peertube\\.kosebamse\\.com|\n yunopeertube\\.myddns\\.me|\n peertube\\.varney\\.fr|\n peertube\\.anon-kenkai\\.com|\n tube\\.maiti\\.info|\n tubee\\.fr|\n videos\\.dinofly\\.com|\n toobnix\\.org|\n videotape\\.me|\n voca\\.tube|\n video\\.heromuster\\.com|\n video\\.lemediatv\\.fr|\n video\\.up\\.edu\\.ph|\n balafon\\.video|\n video\\.ivel\\.fr|\n thickrips\\.cloud|\n pt\\.laurentkruger\\.fr|\n video\\.monarch-pass\\.net|\n peertube\\.artica\\.center|\n video\\.alternanet\\.fr|\n indymotion\\.fr|\n fanvid\\.stopthatimp\\.net|\n video\\.farci\\.org|\n v\\.lesterpig\\.com|\n video\\.okaris\\.de|\n tube\\.pawelko\\.net|\n peertube\\.mablr\\.org|\n tube\\.fede\\.re|\n pytu\\.be|\n evertron\\.tv|\n devtube\\.dev-wiki\\.de|\n raptube\\.antipub\\.org|\n video\\.selea\\.se|\n peertube\\.mygaia\\.org|\n video\\.oh14\\.de|\n peertube\\.livingutopia\\.org|\n peertube\\.the-penguin\\.de|\n tube\\.thechangebook\\.org|\n tube\\.anjara\\.eu|\n pt\\.pube\\.tk|\n video\\.samedi\\.pm|\n mplayer\\.demouliere\\.eu|\n widemus\\.de|\n peertube\\.me|\n peertube\\.zapashcanon\\.fr|\n video\\.latavernedejohnjohn\\.fr|\n peertube\\.pcservice46\\.fr|\n peertube\\.mazzonetto\\.eu|\n video\\.irem\\.univ-paris-diderot\\.fr|\n video\\.livecchi\\.cloud|\n alttube\\.fr|\n video\\.coop\\.tools|\n video\\.cabane-libre\\.org|\n peertube\\.openstreetmap\\.fr|\n videos\\.alolise\\.org|\n irrsinn\\.video|\n video\\.antopie\\.org|\n scitech\\.video|\n tube2\\.nemsia\\.org|\n video\\.amic37\\.fr|\n peertube\\.freeforge\\.eu|\n video\\.arbitrarion\\.com|\n video\\.datsemultimedia\\.com|\n stoptrackingus\\.tv|\n peertube\\.ricostrongxxx\\.com|\n docker\\.videos\\.lecygnenoir\\.info|\n peertube\\.togart\\.de|\n tube\\.postblue\\.info|\n videos\\.domainepublic\\.net|\n peertube\\.cyber-tribal\\.com|\n video\\.gresille\\.org|\n peertube\\.dsmouse\\.net|\n cinema\\.yunohost\\.support|\n tube\\.theocevaer\\.fr|\n repro\\.video|\n tube\\.4aem\\.com|\n quaziinc\\.com|\n peertube\\.metawurst\\.space|\n videos\\.wakapo\\.com|\n video\\.ploud\\.fr|\n video\\.freeradical\\.zone|\n tube\\.valinor\\.fr|\n refuznik\\.video|\n pt\\.kircheneuenburg\\.de|\n peertube\\.asrun\\.eu|\n peertube\\.lagob\\.fr|\n videos\\.side-ways\\.net|\n 91video\\.online|\n video\\.valme\\.io|\n video\\.taboulisme\\.com|\n videos-libr\\.es|\n tv\\.mooh\\.fr|\n nuage\\.acostey\\.fr|\n video\\.monsieur-a\\.fr|\n peertube\\.librelois\\.fr|\n videos\\.pair2jeux\\.tube|\n videos\\.pueseso\\.club|\n peer\\.mathdacloud\\.ovh|\n media\\.assassinate-you\\.net|\n vidcommons\\.org|\n ptube\\.rousset\\.nom\\.fr|\n tube\\.cyano\\.at|\n videos\\.squat\\.net|\n video\\.iphodase\\.fr|\n peertube\\.makotoworkshop\\.org|\n peertube\\.serveur\\.slv-valbonne\\.fr|\n vault\\.mle\\.party|\n hostyour\\.tv|\n videos\\.hack2g2\\.fr|\n libre\\.tube|\n pire\\.artisanlogiciel\\.net|\n videos\\.numerique-en-commun\\.fr|\n video\\.netsyms\\.com|\n video\\.die-partei\\.social|\n video\\.writeas\\.org|\n peertube\\.swarm\\.solvingmaz\\.es|\n tube\\.pericoloso\\.ovh|\n watching\\.cypherpunk\\.observer|\n videos\\.adhocmusic\\.com|\n tube\\.rfc1149\\.net|\n peertube\\.librelabucm\\.org|\n videos\\.numericoop\\.fr|\n peertube\\.koehn\\.com|\n peertube\\.anarchmusicall\\.net|\n tube\\.kampftoast\\.de|\n vid\\.y-y\\.li|\n peertube\\.xtenz\\.xyz|\n diode\\.zone|\n tube\\.egf\\.mn|\n peertube\\.nomagic\\.uk|\n visionon\\.tv|\n videos\\.koumoul\\.com|\n video\\.rastapuls\\.com|\n video\\.mantlepro\\.com|\n video\\.deadsuperhero\\.com|\n peertube\\.musicstudio\\.pro|\n peertube\\.we-keys\\.fr|\n artitube\\.artifaille\\.fr|\n peertube\\.ethernia\\.net|\n tube\\.midov\\.pl|\n peertube\\.fr|\n watch\\.snoot\\.tube|\n peertube\\.donnadieu\\.fr|\n argos\\.aquilenet\\.fr|\n tube\\.nemsia\\.org|\n tube\\.bruniau\\.net|\n videos\\.darckoune\\.moe|\n tube\\.traydent\\.info|\n dev\\.videos\\.lecygnenoir\\.info|\n peertube\\.nayya\\.org|\n peertube\\.live|\n peertube\\.mofgao\\.space|\n video\\.lequerrec\\.eu|\n peertube\\.amicale\\.net|\n aperi\\.tube|\n tube\\.ac-lyon\\.fr|\n video\\.lw1\\.at|\n www\\.yiny\\.org|\n videos\\.pofilo\\.fr|\n tube\\.lou\\.lt|\n choob\\.h\\.etbus\\.ch|\n tube\\.hoga\\.fr|\n peertube\\.heberge\\.fr|\n video\\.obermui\\.de|\n videos\\.cloudfrancois\\.fr|\n betamax\\.video|\n video\\.typica\\.us|\n tube\\.piweb\\.be|\n video\\.blender\\.org|\n peertube\\.cat|\n tube\\.kdy\\.ch|\n pe\\.ertu\\.be|\n peertube\\.social|\n videos\\.lescommuns\\.org|\n tv\\.datamol\\.org|\n videonaute\\.fr|\n dialup\\.express|\n peertube\\.nogafa\\.org|\n megatube\\.lilomoino\\.fr|\n peertube\\.tamanoir\\.foucry\\.net|\n peertube\\.devosi\\.org|\n peertube\\.1312\\.media|\n tube\\.bootlicker\\.party|\n skeptikon\\.fr|\n video\\.blueline\\.mg|\n tube\\.homecomputing\\.fr|\n tube\\.ouahpiti\\.info|\n video\\.tedomum\\.net|\n video\\.g3l\\.org|\n fontube\\.fr|\n peertube\\.gaialabs\\.ch|\n tube\\.kher\\.nl|\n peertube\\.qtg\\.fr|\n video\\.migennes\\.net|\n tube\\.p2p\\.legal|\n troll\\.tv|\n videos\\.iut-orsay\\.fr|\n peertube\\.solidev\\.net|\n videos\\.cemea\\.org|\n video\\.passageenseine\\.fr|\n videos\\.festivalparminous\\.org|\n peertube\\.touhoppai\\.moe|\n sikke\\.fi|\n peer\\.hostux\\.social|\n share\\.tube|\n peertube\\.walkingmountains\\.fr|\n videos\\.benpro\\.fr|\n peertube\\.parleur\\.net|\n peertube\\.heraut\\.eu|\n tube\\.aquilenet\\.fr|\n peertube\\.gegeweb\\.eu|\n framatube\\.org|\n thinkerview\\.video|\n tube\\.conferences-gesticulees\\.net|\n peertube\\.datagueule\\.tv|\n video\\.lqdn\\.fr|\n tube\\.mochi\\.academy|\n media\\.zat\\.im|\n video\\.colibris-outilslibres\\.org|\n tube\\.svnet\\.fr|\n peertube\\.video|\n peertube2\\.cpy\\.re|\n peertube3\\.cpy\\.re|\n videos\\.tcit\\.fr|\n peertube\\.cpy\\.re|\n canard\\.tube\n ))/(?P<type>(?:a|c|w/p))/\n (?P<id>[^/]+)\n '
  6418. _RETURN_TYPE = 'playlist'
  6419. class PeerTVIE(LazyLoadExtractor):
  6420. _module = 'yt_dlp.extractor.peertv'
  6421. IE_NAME = 'peer.tv'
  6422. _VALID_URL = 'https?://(?:www\\.)?peer\\.tv/(?:de|it|en)/(?P<id>\\d+)'
  6423. _RETURN_TYPE = 'video'
  6424. class PelotonIE(LazyLoadExtractor):
  6425. _module = 'yt_dlp.extractor.peloton'
  6426. IE_NAME = 'peloton'
  6427. _VALID_URL = 'https?://members\\.onepeloton\\.com/classes/player/(?P<id>[a-f0-9]+)'
  6428. _NETRC_MACHINE = 'peloton'
  6429. _RETURN_TYPE = 'video'
  6430. class PelotonLiveIE(LazyLoadExtractor):
  6431. _module = 'yt_dlp.extractor.peloton'
  6432. IE_NAME = 'peloton:live'
  6433. _VALID_URL = 'https?://members\\.onepeloton\\.com/player/live/(?P<id>[a-f0-9]+)'
  6434. IE_DESC = 'Peloton Live'
  6435. _RETURN_TYPE = 'video'
  6436. class PerformGroupIE(LazyLoadExtractor):
  6437. _module = 'yt_dlp.extractor.performgroup'
  6438. IE_NAME = 'PerformGroup'
  6439. _VALID_URL = 'https?://player\\.performgroup\\.com/eplayer(?:/eplayer\\.html|\\.js)#/?(?P<id>[0-9a-f]{26})\\.(?P<auth_token>[0-9a-z]{26})'
  6440. _RETURN_TYPE = 'video'
  6441. class PeriscopeBaseIE(LazyLoadExtractor):
  6442. _module = 'yt_dlp.extractor.periscope'
  6443. IE_NAME = 'PeriscopeBase'
  6444. class PeriscopeIE(PeriscopeBaseIE):
  6445. _module = 'yt_dlp.extractor.periscope'
  6446. IE_NAME = 'periscope'
  6447. _VALID_URL = 'https?://(?:www\\.)?(?:periscope|pscp)\\.tv/[^/]+/(?P<id>[^/?#]+)'
  6448. IE_DESC = 'Periscope'
  6449. _RETURN_TYPE = 'video'
  6450. class PeriscopeUserIE(PeriscopeBaseIE):
  6451. _module = 'yt_dlp.extractor.periscope'
  6452. IE_NAME = 'periscope:user'
  6453. _VALID_URL = 'https?://(?:www\\.)?(?:periscope|pscp)\\.tv/(?P<id>[^/]+)/?$'
  6454. IE_DESC = 'Periscope user videos'
  6455. _RETURN_TYPE = 'playlist'
  6456. class PGATourIE(LazyLoadExtractor):
  6457. _module = 'yt_dlp.extractor.pgatour'
  6458. IE_NAME = 'PGATour'
  6459. _VALID_URL = 'https?://(?:www\\.)?pgatour\\.com/video/[\\w-]+/(?P<tc>T)?(?P<id>\\d+)'
  6460. _RETURN_TYPE = 'video'
  6461. class PhilharmonieDeParisIE(LazyLoadExtractor):
  6462. _module = 'yt_dlp.extractor.philharmoniedeparis'
  6463. IE_NAME = 'PhilharmonieDeParis'
  6464. _VALID_URL = '(?x)\n https?://\n (?:\n live\\.philharmoniedeparis\\.fr/(?:[Cc]oncert/|embed(?:app)?/|misc/Playlist\\.ashx\\?id=)|\n pad\\.philharmoniedeparis\\.fr/(?:doc/CIMU/|player\\.aspx\\?id=)|\n philharmoniedeparis\\.fr/fr/live/concert/|\n otoplayer\\.philharmoniedeparis\\.fr/fr/embed/\n )\n (?P<id>\\d+)\n '
  6465. IE_DESC = 'Philharmonie de Paris'
  6466. _RETURN_TYPE = 'any'
  6467. class ZDFBaseIE(LazyLoadExtractor):
  6468. _module = 'yt_dlp.extractor.zdf'
  6469. IE_NAME = 'ZDFBase'
  6470. class PhoenixIE(ZDFBaseIE):
  6471. _module = 'yt_dlp.extractor.phoenix'
  6472. IE_NAME = 'phoenix.de'
  6473. _VALID_URL = 'https?://(?:www\\.)?phoenix\\.de/(?:[^/]+/)*[^/?#&]*-a-(?P<id>\\d+)\\.html'
  6474. _RETURN_TYPE = 'video'
  6475. class PhotobucketIE(LazyLoadExtractor):
  6476. _module = 'yt_dlp.extractor.photobucket'
  6477. IE_NAME = 'Photobucket'
  6478. _VALID_URL = 'https?://(?:[a-z0-9]+\\.)?photobucket\\.com/.*(([\\?\\&]current=)|_)(?P<id>.*)\\.(?P<ext>(flv)|(mp4))'
  6479. _RETURN_TYPE = 'video'
  6480. class PiaLiveIE(LazyLoadExtractor):
  6481. _module = 'yt_dlp.extractor.pialive'
  6482. IE_NAME = 'PiaLive'
  6483. _VALID_URL = 'https?://player\\.pia-live\\.jp/stream/(?P<id>[\\w-]+)'
  6484. _RETURN_TYPE = 'video'
  6485. class PiaproIE(LazyLoadExtractor):
  6486. _module = 'yt_dlp.extractor.piapro'
  6487. IE_NAME = 'Piapro'
  6488. _VALID_URL = 'https?://piapro\\.jp/(?:t|content)/(?P<id>[\\w-]+)/?'
  6489. _NETRC_MACHINE = 'piapro'
  6490. _RETURN_TYPE = 'video'
  6491. class PicartoIE(LazyLoadExtractor):
  6492. _module = 'yt_dlp.extractor.picarto'
  6493. IE_NAME = 'Picarto'
  6494. _VALID_URL = 'https?://(?:www.)?picarto\\.tv/(?P<id>[a-zA-Z0-9]+)'
  6495. _RETURN_TYPE = 'video'
  6496. @classmethod
  6497. def suitable(cls, url):
  6498. return False if PicartoVodIE.suitable(url) else super().suitable(url)
  6499. class PicartoVodIE(LazyLoadExtractor):
  6500. _module = 'yt_dlp.extractor.picarto'
  6501. IE_NAME = 'PicartoVod'
  6502. _VALID_URL = 'https?://(?:www\\.)?picarto\\.tv/(?:videopopout|\\w+/videos)/(?P<id>[^/?#&]+)'
  6503. age_limit = 18
  6504. _RETURN_TYPE = 'video'
  6505. class PikselIE(LazyLoadExtractor):
  6506. _module = 'yt_dlp.extractor.piksel'
  6507. IE_NAME = 'Piksel'
  6508. _VALID_URL = '(?x)https?://\n (?:\n (?:\n player\\.\n (?:\n olympusattelecom|\n vibebyvista\n )|\n (?:api|player)\\.multicastmedia|\n (?:api-ovp|player)\\.piksel\n )\\.(?:com|tech)|\n (?:\n mz-edge\\.stream\\.co|\n movie-s\\.nhk\\.or\n )\\.jp|\n vidego\\.baltimorecity\\.gov\n )/v/(?:refid/(?P<refid>[^/]+)/prefid/)?(?P<id>[\\w-]+)'
  6509. _RETURN_TYPE = 'video'
  6510. class PinkbikeIE(LazyLoadExtractor):
  6511. _module = 'yt_dlp.extractor.pinkbike'
  6512. IE_NAME = 'Pinkbike'
  6513. _VALID_URL = 'https?://(?:(?:www\\.)?pinkbike\\.com/video/|es\\.pinkbike\\.org/i/kvid/kvid-y5\\.swf\\?id=)(?P<id>[0-9]+)'
  6514. _RETURN_TYPE = 'video'
  6515. class PinterestBaseIE(LazyLoadExtractor):
  6516. _module = 'yt_dlp.extractor.pinterest'
  6517. IE_NAME = 'PinterestBase'
  6518. class PinterestCollectionIE(PinterestBaseIE):
  6519. _module = 'yt_dlp.extractor.pinterest'
  6520. IE_NAME = 'PinterestCollection'
  6521. _VALID_URL = '(?x)\n https?://(?:[^/]+\\.)?pinterest\\.(?:\n com|fr|de|ch|jp|cl|ca|it|co\\.uk|nz|ru|com\\.au|at|pt|co\\.kr|es|com\\.mx|\n dk|ph|th|com\\.uy|co|nl|info|kr|ie|vn|com\\.vn|ec|mx|in|pe|co\\.at|hu|\n co\\.in|co\\.nz|id|com\\.ec|com\\.py|tw|be|uk|com\\.bo|com\\.pe)/(?P<username>[^/]+)/(?P<id>[^/?#&]+)'
  6522. _RETURN_TYPE = 'playlist'
  6523. @classmethod
  6524. def suitable(cls, url):
  6525. return False if PinterestIE.suitable(url) else super().suitable(url)
  6526. class PinterestIE(PinterestBaseIE):
  6527. _module = 'yt_dlp.extractor.pinterest'
  6528. IE_NAME = 'Pinterest'
  6529. _VALID_URL = '(?x)\n https?://(?:[^/]+\\.)?pinterest\\.(?:\n com|fr|de|ch|jp|cl|ca|it|co\\.uk|nz|ru|com\\.au|at|pt|co\\.kr|es|com\\.mx|\n dk|ph|th|com\\.uy|co|nl|info|kr|ie|vn|com\\.vn|ec|mx|in|pe|co\\.at|hu|\n co\\.in|co\\.nz|id|com\\.ec|com\\.py|tw|be|uk|com\\.bo|com\\.pe)/pin/(?:[\\w-]+--)?(?P<id>\\d+)'
  6530. _RETURN_TYPE = 'video'
  6531. class PixivSketchBaseIE(LazyLoadExtractor):
  6532. _module = 'yt_dlp.extractor.pixivsketch'
  6533. IE_NAME = 'PixivSketchBase'
  6534. class PixivSketchIE(PixivSketchBaseIE):
  6535. _module = 'yt_dlp.extractor.pixivsketch'
  6536. IE_NAME = 'pixiv:sketch'
  6537. _VALID_URL = 'https?://sketch\\.pixiv\\.net/@(?P<uploader_id>[a-zA-Z0-9_-]+)/lives/(?P<id>\\d+)/?'
  6538. age_limit = 18
  6539. _RETURN_TYPE = 'video'
  6540. class PixivSketchUserIE(PixivSketchBaseIE):
  6541. _module = 'yt_dlp.extractor.pixivsketch'
  6542. IE_NAME = 'pixiv:sketch:user'
  6543. _VALID_URL = 'https?://sketch\\.pixiv\\.net/@(?P<id>[a-zA-Z0-9_-]+)/?'
  6544. @classmethod
  6545. def suitable(cls, url):
  6546. return super().suitable(url) and not PixivSketchIE.suitable(url)
  6547. class PladformIE(LazyLoadExtractor):
  6548. _module = 'yt_dlp.extractor.pladform'
  6549. IE_NAME = 'Pladform'
  6550. _VALID_URL = '(?x)\n https?://\n (?:\n (?:\n out\\.pladform\\.ru/player|\n static\\.pladform\\.ru/player\\.swf\n )\n \\?.*\\bvideoid=|\n video\\.pladform\\.ru/catalog/video/videoid/\n )\n (?P<id>\\d+)\n '
  6551. _RETURN_TYPE = 'video'
  6552. class PlanetMarathiIE(LazyLoadExtractor):
  6553. _module = 'yt_dlp.extractor.planetmarathi'
  6554. IE_NAME = 'PlanetMarathi'
  6555. _VALID_URL = 'https?://(?:www\\.)?planetmarathi\\.com/titles/(?P<id>[^/#&?$]+)'
  6556. _RETURN_TYPE = 'playlist'
  6557. class PlatziBaseIE(LazyLoadExtractor):
  6558. _module = 'yt_dlp.extractor.platzi'
  6559. IE_NAME = 'PlatziBase'
  6560. _NETRC_MACHINE = 'platzi'
  6561. class PlatziCourseIE(PlatziBaseIE):
  6562. _module = 'yt_dlp.extractor.platzi'
  6563. IE_NAME = 'PlatziCourse'
  6564. _VALID_URL = '(?x)\n https?://\n (?:\n platzi\\.com/clases| # es version\n courses\\.platzi\\.com/classes # en version\n )/(?P<id>[^/?\\#&]+)\n '
  6565. _NETRC_MACHINE = 'platzi'
  6566. _RETURN_TYPE = 'playlist'
  6567. @classmethod
  6568. def suitable(cls, url):
  6569. return False if PlatziIE.suitable(url) else super().suitable(url)
  6570. class PlatziIE(PlatziBaseIE):
  6571. _module = 'yt_dlp.extractor.platzi'
  6572. IE_NAME = 'Platzi'
  6573. _VALID_URL = '(?x)\n https?://\n (?:\n platzi\\.com/clases| # es version\n courses\\.platzi\\.com/classes # en version\n )/[^/]+/(?P<id>\\d+)-[^/?\\#&]+\n '
  6574. _NETRC_MACHINE = 'platzi'
  6575. _RETURN_TYPE = 'video'
  6576. class PlayPlusTVIE(LazyLoadExtractor):
  6577. _module = 'yt_dlp.extractor.playplustv'
  6578. IE_NAME = 'PlayPlusTV'
  6579. _VALID_URL = 'https?://(?:www\\.)?playplus\\.(?:com|tv)/VOD/(?P<project_id>[0-9]+)/(?P<id>[0-9a-f]{32})'
  6580. _NETRC_MACHINE = 'playplustv'
  6581. _RETURN_TYPE = 'video'
  6582. class PlaySuisseIE(LazyLoadExtractor):
  6583. _module = 'yt_dlp.extractor.playsuisse'
  6584. IE_NAME = 'PlaySuisse'
  6585. _VALID_URL = 'https?://(?:www\\.)?playsuisse\\.ch/(?:watch|detail)/(?:[^#]*[?&]episodeId=)?(?P<id>[0-9]+)'
  6586. _NETRC_MACHINE = 'playsuisse'
  6587. _RETURN_TYPE = 'any'
  6588. class PlaytvakIE(LazyLoadExtractor):
  6589. _module = 'yt_dlp.extractor.playtvak'
  6590. IE_NAME = 'Playtvak'
  6591. _VALID_URL = 'https?://(?:.+?\\.)?(?:playtvak|idnes|lidovky|metro)\\.cz/.*\\?(?:c|idvideo)=(?P<id>[^&]+)'
  6592. IE_DESC = 'Playtvak.cz, iDNES.cz and Lidovky.cz'
  6593. _RETURN_TYPE = 'video'
  6594. class PlaywireIE(LazyLoadExtractor):
  6595. _module = 'yt_dlp.extractor.playwire'
  6596. IE_NAME = 'Playwire'
  6597. _VALID_URL = 'https?://(?:config|cdn)\\.playwire\\.com(?:/v2)?/(?P<publisher_id>\\d+)/(?:videos/v2|embed|config)/(?P<id>\\d+)'
  6598. _RETURN_TYPE = 'video'
  6599. class PluralsightBaseIE(LazyLoadExtractor):
  6600. _module = 'yt_dlp.extractor.pluralsight'
  6601. IE_NAME = 'PluralsightBase'
  6602. class PluralsightCourseIE(PluralsightBaseIE):
  6603. _module = 'yt_dlp.extractor.pluralsight'
  6604. IE_NAME = 'pluralsight:course'
  6605. _VALID_URL = 'https?://(?:(?:www|app)\\.)?pluralsight\\.com/(?:library/)?courses/(?P<id>[^/]+)'
  6606. _RETURN_TYPE = 'playlist'
  6607. class PluralsightIE(PluralsightBaseIE):
  6608. _module = 'yt_dlp.extractor.pluralsight'
  6609. IE_NAME = 'pluralsight'
  6610. _VALID_URL = 'https?://(?:(?:www|app)\\.)?pluralsight\\.com/(?:training/)?player\\?'
  6611. _NETRC_MACHINE = 'pluralsight'
  6612. _RETURN_TYPE = 'video'
  6613. class PlutoTVIE(LazyLoadExtractor):
  6614. _module = 'yt_dlp.extractor.plutotv'
  6615. IE_NAME = 'PlutoTV'
  6616. _VALID_URL = '(?x)\n https?://(?:www\\.)?pluto\\.tv(?:/[^/]+)?/on-demand\n /(?P<video_type>movies|series)\n /(?P<series_or_movie_slug>[^/]+)\n (?:\n (?:/seasons?/(?P<season_no>\\d+))?\n (?:/episode/(?P<episode_slug>[^/]+))?\n )?\n /?(?:$|[#?])'
  6617. _WORKING = False
  6618. _RETURN_TYPE = 'any'
  6619. class PlVideoIE(LazyLoadExtractor):
  6620. _module = 'yt_dlp.extractor.plvideo'
  6621. IE_NAME = 'PlVideo'
  6622. _VALID_URL = 'https?://(?:www\\.)?plvideo\\.ru/(?:watch\\?(?:[^#]+&)?v=|shorts/)(?P<id>[\\w-]+)'
  6623. IE_DESC = 'Платформа'
  6624. _RETURN_TYPE = 'video'
  6625. class PodbayFMChannelIE(LazyLoadExtractor):
  6626. _module = 'yt_dlp.extractor.podbayfm'
  6627. IE_NAME = 'PodbayFMChannel'
  6628. _VALID_URL = 'https?://podbay\\.fm/p/(?P<id>[^/?#]+)/?(?:$|[?#])'
  6629. _RETURN_TYPE = 'playlist'
  6630. class PodbayFMIE(LazyLoadExtractor):
  6631. _module = 'yt_dlp.extractor.podbayfm'
  6632. IE_NAME = 'PodbayFM'
  6633. _VALID_URL = 'https?://podbay\\.fm/p/[^/?#]+/e/(?P<id>\\d+)'
  6634. _RETURN_TYPE = 'video'
  6635. class PodchaserIE(LazyLoadExtractor):
  6636. _module = 'yt_dlp.extractor.podchaser'
  6637. IE_NAME = 'Podchaser'
  6638. _VALID_URL = 'https?://(?:www\\.)?podchaser\\.com/podcasts/[\\w-]+-(?P<podcast_id>\\d+)(?:/episodes/[\\w-]+-(?P<id>\\d+))?'
  6639. _RETURN_TYPE = 'any'
  6640. class PodomaticIE(LazyLoadExtractor):
  6641. _module = 'yt_dlp.extractor.podomatic'
  6642. IE_NAME = 'podomatic'
  6643. _VALID_URL = '(?x)\n (?P<proto>https?)://\n (?:\n (?P<channel>[^.]+)\\.podomatic\\.com/entry|\n (?:www\\.)?podomatic\\.com/podcasts/(?P<channel_2>[^/]+)/episodes\n )/\n (?P<id>[^/?#&]+)\n '
  6644. _WORKING = False
  6645. _RETURN_TYPE = 'video'
  6646. class PokerGoBaseIE(LazyLoadExtractor):
  6647. _module = 'yt_dlp.extractor.pokergo'
  6648. IE_NAME = 'PokerGoBase'
  6649. _NETRC_MACHINE = 'pokergo'
  6650. class PokerGoCollectionIE(PokerGoBaseIE):
  6651. _module = 'yt_dlp.extractor.pokergo'
  6652. IE_NAME = 'PokerGoCollection'
  6653. _VALID_URL = 'https?://(?:www\\.)?pokergo\\.com/collections/(?P<id>[^&$#/?]+)'
  6654. _NETRC_MACHINE = 'pokergo'
  6655. _RETURN_TYPE = 'playlist'
  6656. class PokerGoIE(PokerGoBaseIE):
  6657. _module = 'yt_dlp.extractor.pokergo'
  6658. IE_NAME = 'PokerGo'
  6659. _VALID_URL = 'https?://(?:www\\.)?pokergo\\.com/videos/(?P<id>[^&$#/?]+)'
  6660. _NETRC_MACHINE = 'pokergo'
  6661. _RETURN_TYPE = 'video'
  6662. class PolsatGoIE(LazyLoadExtractor):
  6663. _module = 'yt_dlp.extractor.polsatgo'
  6664. IE_NAME = 'PolsatGo'
  6665. _VALID_URL = 'https?://(?:www\\.)?polsat(?:box)?go\\.pl/.+/(?P<id>[0-9a-fA-F]+)(?:[/#?]|$)'
  6666. age_limit = 12
  6667. _RETURN_TYPE = 'video'
  6668. class PolskieRadioAuditionIE(LazyLoadExtractor):
  6669. _module = 'yt_dlp.extractor.polskieradio'
  6670. IE_NAME = 'polskieradio:audition'
  6671. _VALID_URL = 'https?://(?:[^/]+\\.)?polskieradio\\.pl/audycj[ae]/(?P<id>\\d+)'
  6672. _RETURN_TYPE = 'playlist'
  6673. class PolskieRadioCategoryIE(LazyLoadExtractor):
  6674. _module = 'yt_dlp.extractor.polskieradio'
  6675. IE_NAME = 'polskieradio:category'
  6676. _VALID_URL = 'https?://(?:www\\.)?polskieradio\\.pl/(?:\\d+(?:,[^/]+)?/|[^/]+/Tag)(?P<id>\\d+)'
  6677. _RETURN_TYPE = 'playlist'
  6678. @classmethod
  6679. def suitable(cls, url):
  6680. return False if PolskieRadioLegacyIE.suitable(url) else super().suitable(url)
  6681. class PolskieRadioBaseExtractor(LazyLoadExtractor):
  6682. _module = 'yt_dlp.extractor.polskieradio'
  6683. IE_NAME = 'PolskieRadioBaseExtract'
  6684. class PolskieRadioIE(PolskieRadioBaseExtractor):
  6685. _module = 'yt_dlp.extractor.polskieradio'
  6686. IE_NAME = 'PolskieRadio'
  6687. _VALID_URL = 'https?://(?:[^/]+\\.)?(?:polskieradio(?:24)?|radiokierowcow)\\.pl/artykul/(?P<id>\\d+)'
  6688. _RETURN_TYPE = 'playlist'
  6689. class PolskieRadioLegacyIE(PolskieRadioBaseExtractor):
  6690. _module = 'yt_dlp.extractor.polskieradio'
  6691. IE_NAME = 'polskieradio:legacy'
  6692. _VALID_URL = 'https?://(?:www\\.)?polskieradio(?:24)?\\.pl/\\d+/\\d+/[Aa]rtykul/(?P<id>\\d+)'
  6693. _RETURN_TYPE = 'any'
  6694. class PolskieRadioPlayerIE(LazyLoadExtractor):
  6695. _module = 'yt_dlp.extractor.polskieradio'
  6696. IE_NAME = 'polskieradio:player'
  6697. _VALID_URL = 'https?://player\\.polskieradio\\.pl/anteny/(?P<id>[^/]+)'
  6698. _RETURN_TYPE = 'video'
  6699. class PolskieRadioPodcastBaseExtractor(LazyLoadExtractor):
  6700. _module = 'yt_dlp.extractor.polskieradio'
  6701. IE_NAME = 'PolskieRadioPodcastBaseExtract'
  6702. class PolskieRadioPodcastIE(PolskieRadioPodcastBaseExtractor):
  6703. _module = 'yt_dlp.extractor.polskieradio'
  6704. IE_NAME = 'polskieradio:podcast'
  6705. _VALID_URL = 'https?://podcasty\\.polskieradio\\.pl/track/(?P<id>[a-f\\d]{8}(?:-[a-f\\d]{4}){4}[a-f\\d]{8})'
  6706. _RETURN_TYPE = 'video'
  6707. class PolskieRadioPodcastListIE(PolskieRadioPodcastBaseExtractor):
  6708. _module = 'yt_dlp.extractor.polskieradio'
  6709. IE_NAME = 'polskieradio:podcast:list'
  6710. _VALID_URL = 'https?://podcasty\\.polskieradio\\.pl/podcast/(?P<id>\\d+)'
  6711. _RETURN_TYPE = 'playlist'
  6712. class PopcorntimesIE(LazyLoadExtractor):
  6713. _module = 'yt_dlp.extractor.popcorntimes'
  6714. IE_NAME = 'Popcorntimes'
  6715. _VALID_URL = 'https?://popcorntimes\\.tv/[^/]+/m/(?P<id>[^/]+)/(?P<display_id>[^/?#&]+)'
  6716. _RETURN_TYPE = 'video'
  6717. class PopcornTVIE(LazyLoadExtractor):
  6718. _module = 'yt_dlp.extractor.popcorntv'
  6719. IE_NAME = 'PopcornTV'
  6720. _VALID_URL = 'https?://[^/]+\\.popcorntv\\.it/guarda/(?P<display_id>[^/]+)/(?P<id>\\d+)'
  6721. _RETURN_TYPE = 'video'
  6722. class PornboxIE(LazyLoadExtractor):
  6723. _module = 'yt_dlp.extractor.pornbox'
  6724. IE_NAME = 'Pornbox'
  6725. _VALID_URL = 'https?://(?:www\\.)?pornbox\\.com/application/watch-page/(?P<id>[0-9]+)'
  6726. age_limit = 18
  6727. _RETURN_TYPE = 'video'
  6728. class PornFlipIE(LazyLoadExtractor):
  6729. _module = 'yt_dlp.extractor.pornflip'
  6730. IE_NAME = 'PornFlip'
  6731. _VALID_URL = 'https?://(?:www\\.)?pornflip\\.com/(?:(embed|sv|v)/)?(?P<id>[^/]+)'
  6732. age_limit = 18
  6733. _RETURN_TYPE = 'video'
  6734. class PornHubBaseIE(LazyLoadExtractor):
  6735. _module = 'yt_dlp.extractor.pornhub'
  6736. IE_NAME = 'PornHubBase'
  6737. _NETRC_MACHINE = 'pornhub'
  6738. class PornHubIE(PornHubBaseIE):
  6739. _module = 'yt_dlp.extractor.pornhub'
  6740. IE_NAME = 'PornHub'
  6741. _VALID_URL = '(?x)\n https?://\n (?:\n (?:[^/]+\\.)?\n (?:(?P<host>pornhub(?:premium)?\\.(?:com|net|org))|pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd\\.onion)\n /(?:(?:view_video\\.php|video/show)\\?viewkey=|embed/)|\n (?:www\\.)?thumbzilla\\.com/video/\n )\n (?P<id>[\\da-z]+)\n '
  6742. IE_DESC = 'PornHub and Thumbzilla'
  6743. _NETRC_MACHINE = 'pornhub'
  6744. age_limit = 18
  6745. _RETURN_TYPE = 'video'
  6746. class PornHubPlaylistBaseIE(PornHubBaseIE):
  6747. _module = 'yt_dlp.extractor.pornhub'
  6748. IE_NAME = 'PornHubPlaylistBase'
  6749. _NETRC_MACHINE = 'pornhub'
  6750. class PornHubPagedPlaylistBaseIE(PornHubPlaylistBaseIE):
  6751. _module = 'yt_dlp.extractor.pornhub'
  6752. IE_NAME = 'PornHubPagedPlaylistBase'
  6753. _NETRC_MACHINE = 'pornhub'
  6754. class PornHubPagedVideoListIE(PornHubPagedPlaylistBaseIE):
  6755. _module = 'yt_dlp.extractor.pornhub'
  6756. IE_NAME = 'PornHubPagedVideoList'
  6757. _VALID_URL = 'https?://(?:[^/]+\\.)?(?:(?P<host>pornhub(?:premium)?\\.(?:com|net|org))|pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd\\.onion)/(?!playlist/)(?P<id>(?:[^/]+/)*[^/?#&]+)'
  6758. _NETRC_MACHINE = 'pornhub'
  6759. _RETURN_TYPE = 'playlist'
  6760. @classmethod
  6761. def suitable(cls, url):
  6762. return (False
  6763. if PornHubIE.suitable(url) or PornHubUserIE.suitable(url) or PornHubUserVideosUploadIE.suitable(url)
  6764. else super().suitable(url))
  6765. class PornHubPlaylistIE(PornHubPlaylistBaseIE):
  6766. _module = 'yt_dlp.extractor.pornhub'
  6767. IE_NAME = 'PornHubPlaylist'
  6768. _VALID_URL = '(?P<url>https?://(?:[^/]+\\.)?(?:(?P<host>pornhub(?:premium)?\\.(?:com|net|org))|pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd\\.onion)/playlist/(?P<id>[^/?#&]+))'
  6769. _NETRC_MACHINE = 'pornhub'
  6770. _RETURN_TYPE = 'playlist'
  6771. class PornHubUserIE(PornHubPlaylistBaseIE):
  6772. _module = 'yt_dlp.extractor.pornhub'
  6773. IE_NAME = 'PornHubUser'
  6774. _VALID_URL = '(?P<url>https?://(?:[^/]+\\.)?(?:(?P<host>pornhub(?:premium)?\\.(?:com|net|org))|pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd\\.onion)/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/?#&]+))(?:[?#&]|/(?!videos)|$)'
  6775. _NETRC_MACHINE = 'pornhub'
  6776. _RETURN_TYPE = 'playlist'
  6777. class PornHubUserVideosUploadIE(PornHubPagedPlaylistBaseIE):
  6778. _module = 'yt_dlp.extractor.pornhub'
  6779. IE_NAME = 'PornHubUserVideosUpload'
  6780. _VALID_URL = '(?P<url>https?://(?:[^/]+\\.)?(?:(?P<host>pornhub(?:premium)?\\.(?:com|net|org))|pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd\\.onion)/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/]+)/videos/upload)'
  6781. _NETRC_MACHINE = 'pornhub'
  6782. _RETURN_TYPE = 'playlist'
  6783. class PornotubeIE(LazyLoadExtractor):
  6784. _module = 'yt_dlp.extractor.pornotube'
  6785. IE_NAME = 'Pornotube'
  6786. _VALID_URL = 'https?://(?:\\w+\\.)?pornotube\\.com/(?:[^?#]*?)/video/(?P<id>[0-9]+)'
  6787. age_limit = 18
  6788. _RETURN_TYPE = 'video'
  6789. class PornoVoisinesIE(LazyLoadExtractor):
  6790. _module = 'yt_dlp.extractor.pornovoisines'
  6791. IE_NAME = 'PornoVoisines'
  6792. _VALID_URL = 'https?://(?:www\\.)?pornovoisines\\.com/videos/show/(?P<id>\\d+)/(?P<display_id>[^/.]+)'
  6793. _WORKING = False
  6794. age_limit = 18
  6795. _RETURN_TYPE = 'video'
  6796. class PornoXOIE(LazyLoadExtractor):
  6797. _module = 'yt_dlp.extractor.pornoxo'
  6798. IE_NAME = 'PornoXO'
  6799. _VALID_URL = 'https?://(?:www\\.)?pornoxo\\.com/videos/(?P<id>\\d+)/(?P<display_id>[^/]+)\\.html'
  6800. _WORKING = False
  6801. age_limit = 18
  6802. _RETURN_TYPE = 'video'
  6803. class Pr0grammIE(LazyLoadExtractor):
  6804. _module = 'yt_dlp.extractor.pr0gramm'
  6805. IE_NAME = 'Pr0gramm'
  6806. _VALID_URL = 'https?://pr0gramm\\.com\\/(?:[^/?#]+/)+(?P<id>[\\d]+)(?:[/?#:]|$)'
  6807. age_limit = 18
  6808. _RETURN_TYPE = 'video'
  6809. class PrankCastIE(LazyLoadExtractor):
  6810. _module = 'yt_dlp.extractor.prankcast'
  6811. IE_NAME = 'PrankCast'
  6812. _VALID_URL = 'https?://(?:www\\.)?prankcast\\.com/[^/?#]+/showreel/(?P<id>\\d+)-(?P<display_id>[^/?#]+)'
  6813. _RETURN_TYPE = 'video'
  6814. class PrankCastPostIE(LazyLoadExtractor):
  6815. _module = 'yt_dlp.extractor.prankcast'
  6816. IE_NAME = 'PrankCastPost'
  6817. _VALID_URL = 'https?://(?:www\\.)?prankcast\\.com/[^/?#]+/posts/(?P<id>\\d+)-(?P<display_id>[^/?#]+)'
  6818. _RETURN_TYPE = 'video'
  6819. class PremiershipRugbyIE(LazyLoadExtractor):
  6820. _module = 'yt_dlp.extractor.premiershiprugby'
  6821. IE_NAME = 'PremiershipRugby'
  6822. _VALID_URL = 'https?://(?:\\w+\\.)premiershiprugby\\.(?:com)/watch/(?P<id>[\\w-]+)'
  6823. _RETURN_TYPE = 'video'
  6824. class PressTVIE(LazyLoadExtractor):
  6825. _module = 'yt_dlp.extractor.presstv'
  6826. IE_NAME = 'PressTV'
  6827. _VALID_URL = 'https?://(?:www\\.)?presstv\\.ir/[^/]+/(?P<y>\\d+)/(?P<m>\\d+)/(?P<d>\\d+)/(?P<id>\\d+)/(?P<display_id>[^/]+)?'
  6828. _RETURN_TYPE = 'video'
  6829. class ProjectVeritasIE(LazyLoadExtractor):
  6830. _module = 'yt_dlp.extractor.projectveritas'
  6831. IE_NAME = 'ProjectVeritas'
  6832. _VALID_URL = 'https?://(?:www\\.)?projectveritas\\.com/(?P<type>news|video)/(?P<id>[^/?#]+)'
  6833. _WORKING = False
  6834. _RETURN_TYPE = 'video'
  6835. class ProSiebenSat1BaseIE(LazyLoadExtractor):
  6836. _module = 'yt_dlp.extractor.prosiebensat1'
  6837. IE_NAME = 'ProSiebenSat1Base'
  6838. class ProSiebenSat1IE(ProSiebenSat1BaseIE):
  6839. _module = 'yt_dlp.extractor.prosiebensat1'
  6840. IE_NAME = 'prosiebensat1'
  6841. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?\n (?:\n (?:beta\\.)?\n (?:\n prosieben(?:maxx)?|sixx|sat1(?:gold)?|kabeleins(?:doku)?|the-voice-of-germany|advopedia\n )\\.(?:de|at|ch)|\n ran\\.de|fem\\.com|advopedia\\.de|galileo\\.tv/video\n )\n /(?P<id>.+)\n '
  6842. IE_DESC = 'ProSiebenSat.1 Digital'
  6843. _RETURN_TYPE = 'any'
  6844. class PRXBaseIE(LazyLoadExtractor):
  6845. _module = 'yt_dlp.extractor.prx'
  6846. IE_NAME = 'PRXBase'
  6847. class PRXAccountIE(PRXBaseIE):
  6848. _module = 'yt_dlp.extractor.prx'
  6849. IE_NAME = 'PRXAccount'
  6850. _VALID_URL = 'https?://(?:(?:beta|listen)\\.)?prx.org/accounts/(?P<id>\\d+)'
  6851. _RETURN_TYPE = 'playlist'
  6852. class PRXSeriesIE(PRXBaseIE):
  6853. _module = 'yt_dlp.extractor.prx'
  6854. IE_NAME = 'PRXSeries'
  6855. _VALID_URL = 'https?://(?:(?:beta|listen)\\.)?prx.org/series/(?P<id>\\d+)'
  6856. _RETURN_TYPE = 'playlist'
  6857. class PRXSeriesSearchIE(PRXBaseIE, LazyLoadSearchExtractor):
  6858. _module = 'yt_dlp.extractor.prx'
  6859. IE_NAME = 'prxseries:search'
  6860. _VALID_URL = 'prxseries(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  6861. IE_DESC = 'PRX Series Search'
  6862. SEARCH_KEY = 'prxseries'
  6863. _RETURN_TYPE = 'playlist'
  6864. class PRXStoriesSearchIE(PRXBaseIE, LazyLoadSearchExtractor):
  6865. _module = 'yt_dlp.extractor.prx'
  6866. IE_NAME = 'prxstories:search'
  6867. _VALID_URL = 'prxstories(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  6868. IE_DESC = 'PRX Stories Search'
  6869. SEARCH_KEY = 'prxstories'
  6870. _RETURN_TYPE = 'playlist'
  6871. class PRXStoryIE(PRXBaseIE):
  6872. _module = 'yt_dlp.extractor.prx'
  6873. IE_NAME = 'PRXStory'
  6874. _VALID_URL = 'https?://(?:(?:beta|listen)\\.)?prx.org/stories/(?P<id>\\d+)'
  6875. _RETURN_TYPE = 'any'
  6876. class PuhuTVIE(LazyLoadExtractor):
  6877. _module = 'yt_dlp.extractor.puhutv'
  6878. IE_NAME = 'puhutv'
  6879. _VALID_URL = 'https?://(?:www\\.)?puhutv\\.com/(?P<id>[^/?#&]+)-izle'
  6880. _RETURN_TYPE = 'video'
  6881. class PuhuTVSerieIE(LazyLoadExtractor):
  6882. _module = 'yt_dlp.extractor.puhutv'
  6883. IE_NAME = 'puhutv:serie'
  6884. _VALID_URL = 'https?://(?:www\\.)?puhutv\\.com/(?P<id>[^/?#&]+)-detay'
  6885. _RETURN_TYPE = 'playlist'
  6886. class Puls4IE(ProSiebenSat1BaseIE):
  6887. _module = 'yt_dlp.extractor.puls4'
  6888. IE_NAME = 'Puls4'
  6889. _VALID_URL = 'https?://(?:www\\.)?puls4\\.com/(?P<id>[^?#&]+)'
  6890. _RETURN_TYPE = 'video'
  6891. class PyvideoIE(LazyLoadExtractor):
  6892. _module = 'yt_dlp.extractor.pyvideo'
  6893. IE_NAME = 'Pyvideo'
  6894. _VALID_URL = 'https?://(?:www\\.)?pyvideo\\.org/(?P<category>[^/]+)/(?P<id>[^/?#&.]+)'
  6895. _RETURN_TYPE = 'any'
  6896. class QDanceIE(LazyLoadExtractor):
  6897. _module = 'yt_dlp.extractor.qdance'
  6898. IE_NAME = 'QDance'
  6899. _VALID_URL = 'https?://(?:www\\.)?q-dance\\.com/network/(?:library|live)/(?P<id>[\\w-]+)'
  6900. _NETRC_MACHINE = 'qdance'
  6901. _RETURN_TYPE = 'video'
  6902. class QingTingIE(LazyLoadExtractor):
  6903. _module = 'yt_dlp.extractor.qingting'
  6904. IE_NAME = 'QingTing'
  6905. _VALID_URL = 'https?://(?:www\\.|m\\.)?(?:qingting\\.fm|qtfm\\.cn)/v?channels/(?P<channel>\\d+)/programs/(?P<id>\\d+)'
  6906. _RETURN_TYPE = 'video'
  6907. class QQPlaylistBaseIE(LazyLoadExtractor):
  6908. _module = 'yt_dlp.extractor.qqmusic'
  6909. IE_NAME = 'QQPlaylistBase'
  6910. class QQMusicAlbumIE(QQPlaylistBaseIE):
  6911. _module = 'yt_dlp.extractor.qqmusic'
  6912. IE_NAME = 'qqmusic:album'
  6913. _VALID_URL = 'https?://y\\.qq\\.com/n/ryqq/albumDetail/(?P<id>[0-9A-Za-z]+)'
  6914. IE_DESC = 'QQ音乐 - 专辑'
  6915. _RETURN_TYPE = 'playlist'
  6916. class QQMusicBaseIE(LazyLoadExtractor):
  6917. _module = 'yt_dlp.extractor.qqmusic'
  6918. IE_NAME = 'QQMusicBase'
  6919. class QQMusicIE(QQMusicBaseIE):
  6920. _module = 'yt_dlp.extractor.qqmusic'
  6921. IE_NAME = 'qqmusic'
  6922. _VALID_URL = 'https?://y\\.qq\\.com/n/ryqq/songDetail/(?P<id>[0-9A-Za-z]+)'
  6923. IE_DESC = 'QQ音乐'
  6924. _RETURN_TYPE = 'video'
  6925. class QQMusicPlaylistIE(QQPlaylistBaseIE):
  6926. _module = 'yt_dlp.extractor.qqmusic'
  6927. IE_NAME = 'qqmusic:playlist'
  6928. _VALID_URL = 'https?://y\\.qq\\.com/n/ryqq/playlist/(?P<id>[0-9]+)'
  6929. IE_DESC = 'QQ音乐 - 歌单'
  6930. _RETURN_TYPE = 'playlist'
  6931. class QQMusicSingerIE(QQMusicBaseIE):
  6932. _module = 'yt_dlp.extractor.qqmusic'
  6933. IE_NAME = 'qqmusic:singer'
  6934. _VALID_URL = 'https?://y\\.qq\\.com/n/ryqq/singer/(?P<id>[0-9A-Za-z]+)'
  6935. IE_DESC = 'QQ音乐 - 歌手'
  6936. _RETURN_TYPE = 'playlist'
  6937. class QQMusicToplistIE(QQPlaylistBaseIE):
  6938. _module = 'yt_dlp.extractor.qqmusic'
  6939. IE_NAME = 'qqmusic:toplist'
  6940. _VALID_URL = 'https?://y\\.qq\\.com/n/ryqq/toplist/(?P<id>[0-9]+)'
  6941. IE_DESC = 'QQ音乐 - 排行榜'
  6942. _RETURN_TYPE = 'playlist'
  6943. class QQMusicVideoIE(QQMusicBaseIE):
  6944. _module = 'yt_dlp.extractor.qqmusic'
  6945. IE_NAME = 'qqmusic:mv'
  6946. _VALID_URL = 'https?://y\\.qq\\.com/n/ryqq/mv/(?P<id>[0-9A-Za-z]+)'
  6947. IE_DESC = 'QQ音乐 - MV'
  6948. _RETURN_TYPE = 'video'
  6949. class R7IE(LazyLoadExtractor):
  6950. _module = 'yt_dlp.extractor.r7'
  6951. IE_NAME = 'R7'
  6952. _ENABLED = None
  6953. _VALID_URL = '(?x)\n https?://\n (?:\n (?:[a-zA-Z]+)\\.r7\\.com(?:/[^/]+)+/idmedia/|\n noticias\\.r7\\.com(?:/[^/]+)+/[^/]+-|\n player\\.r7\\.com/video/i/\n )\n (?P<id>[\\da-f]{24})\n '
  6954. _WORKING = False
  6955. _RETURN_TYPE = 'video'
  6956. class R7ArticleIE(LazyLoadExtractor):
  6957. _module = 'yt_dlp.extractor.r7'
  6958. IE_NAME = 'R7Article'
  6959. _ENABLED = None
  6960. _VALID_URL = 'https?://(?:[a-zA-Z]+)\\.r7\\.com/(?:[^/]+/)+[^/?#&]+-(?P<id>\\d+)'
  6961. _WORKING = False
  6962. @classmethod
  6963. def suitable(cls, url):
  6964. return False if R7IE.suitable(url) else super().suitable(url)
  6965. class RadikoBaseIE(LazyLoadExtractor):
  6966. _module = 'yt_dlp.extractor.radiko'
  6967. IE_NAME = 'RadikoBase'
  6968. class RadikoIE(RadikoBaseIE):
  6969. _module = 'yt_dlp.extractor.radiko'
  6970. IE_NAME = 'Radiko'
  6971. _VALID_URL = 'https?://(?:www\\.)?radiko\\.jp/#!/ts/(?P<station>[A-Z0-9-]+)/(?P<timestring>\\d+)'
  6972. class RadikoRadioIE(RadikoBaseIE):
  6973. _module = 'yt_dlp.extractor.radiko'
  6974. IE_NAME = 'RadikoRadio'
  6975. _VALID_URL = 'https?://(?:www\\.)?radiko\\.jp/#!/live/(?P<id>[A-Z0-9-]+)'
  6976. class RadioCanadaAudioVideoIE(LazyLoadExtractor):
  6977. _module = 'yt_dlp.extractor.radiocanada'
  6978. IE_NAME = 'radiocanada:audiovideo'
  6979. _VALID_URL = 'https?://ici\\.radio-canada\\.ca/([^/]+/)*media-(?P<id>[0-9]+)'
  6980. _RETURN_TYPE = 'video'
  6981. class RadioCanadaIE(LazyLoadExtractor):
  6982. _module = 'yt_dlp.extractor.radiocanada'
  6983. IE_NAME = 'radiocanada'
  6984. _VALID_URL = '(?:radiocanada:|https?://ici\\.radio-canada\\.ca/widgets/mediaconsole/)(?P<app_code>[^:/]+)[:/](?P<id>[0-9]+)'
  6985. _RETURN_TYPE = 'video'
  6986. class RadioComercialIE(LazyLoadExtractor):
  6987. _module = 'yt_dlp.extractor.radiocomercial'
  6988. IE_NAME = 'RadioComercial'
  6989. _VALID_URL = 'https?://(?:www\\.)?radiocomercial\\.pt/podcasts/[^/?#]+/t?(?P<season>\\d+)/(?P<id>[\\w-]+)'
  6990. _RETURN_TYPE = 'video'
  6991. class RadioComercialPlaylistIE(LazyLoadExtractor):
  6992. _module = 'yt_dlp.extractor.radiocomercial'
  6993. IE_NAME = 'RadioComercialPlaylist'
  6994. _VALID_URL = 'https?://(?:www\\.)?radiocomercial\\.pt/podcasts/(?P<id>[\\w-]+)(?:/t?(?P<season>\\d+))?/?(?:$|[?#])'
  6995. _RETURN_TYPE = 'playlist'
  6996. class RadioDeIE(LazyLoadExtractor):
  6997. _module = 'yt_dlp.extractor.radiode'
  6998. IE_NAME = 'radio.de'
  6999. _VALID_URL = 'https?://(?P<id>.+?)\\.(?:radio\\.(?:de|at|fr|pt|es|pl|it)|rad\\.io)'
  7000. _WORKING = False
  7001. _RETURN_TYPE = 'video'
  7002. class RadioFranceBaseIE(LazyLoadExtractor):
  7003. _module = 'yt_dlp.extractor.radiofrance'
  7004. IE_NAME = 'RadioFranceBase'
  7005. class FranceCultureIE(RadioFranceBaseIE):
  7006. _module = 'yt_dlp.extractor.radiofrance'
  7007. IE_NAME = 'FranceCulture'
  7008. _VALID_URL = '(?x)\n https?://(?:www\\.)?radiofrance\\.fr\n /(?:franceculture|franceinfo|franceinter|francemusique|fip|mouv)\n /podcasts/(?:[^?#]+/)?(?P<display_id>[^?#]+)-(?P<id>\\d{6,})(?:$|[?#])\n '
  7009. _RETURN_TYPE = 'video'
  7010. class RadioFranceIE(LazyLoadExtractor):
  7011. _module = 'yt_dlp.extractor.radiofrance'
  7012. IE_NAME = 'radiofrance'
  7013. _VALID_URL = 'https?://maison\\.radiofrance\\.fr/radiovisions/(?P<id>[^?#]+)'
  7014. _RETURN_TYPE = 'video'
  7015. class RadioFranceLiveIE(RadioFranceBaseIE):
  7016. _module = 'yt_dlp.extractor.radiofrance'
  7017. IE_NAME = 'RadioFranceLive'
  7018. _VALID_URL = '(?x)\n https?://(?:www\\.)?radiofrance\\.fr\n /(?P<id>franceculture|franceinfo|franceinter|francemusique|fip|mouv)\n /?(?P<substation_id>radio-[\\w-]+)?(?:[#?]|$)\n '
  7019. _RETURN_TYPE = 'video'
  7020. class RadioFrancePlaylistBaseIE(RadioFranceBaseIE):
  7021. _module = 'yt_dlp.extractor.radiofrance'
  7022. IE_NAME = 'RadioFrancePlaylistBase'
  7023. class RadioFrancePodcastIE(RadioFrancePlaylistBaseIE):
  7024. _module = 'yt_dlp.extractor.radiofrance'
  7025. IE_NAME = 'RadioFrancePodcast'
  7026. _VALID_URL = '(?x)\n https?://(?:www\\.)?radiofrance\\.fr\n /(?:franceculture|franceinfo|franceinter|francemusique|fip|mouv)\n /podcasts/(?P<id>[\\w-]+)/?(?:[?#]|$)\n '
  7027. _RETURN_TYPE = 'playlist'
  7028. class RadioFranceProfileIE(RadioFrancePlaylistBaseIE):
  7029. _module = 'yt_dlp.extractor.radiofrance'
  7030. IE_NAME = 'RadioFranceProfile'
  7031. _VALID_URL = 'https?://(?:www\\.)?radiofrance\\.fr/personnes/(?P<id>[\\w-]+)'
  7032. _RETURN_TYPE = 'playlist'
  7033. class RadioFranceProgramScheduleIE(RadioFranceBaseIE):
  7034. _module = 'yt_dlp.extractor.radiofrance'
  7035. IE_NAME = 'RadioFranceProgramSchedule'
  7036. _VALID_URL = '(?x)\n https?://(?:www\\.)?radiofrance\\.fr\n /(?P<station>franceculture|franceinfo|franceinter|francemusique|fip|mouv)\n /grille-programmes(?:\\?date=(?P<date>[\\d-]+))?\n '
  7037. _RETURN_TYPE = 'playlist'
  7038. class RadioJavanIE(LazyLoadExtractor):
  7039. _module = 'yt_dlp.extractor.radiojavan'
  7040. IE_NAME = 'RadioJavan'
  7041. _VALID_URL = 'https?://(?:www\\.)?radiojavan\\.com/videos/video/(?P<id>[^/]+)/?'
  7042. _WORKING = False
  7043. _RETURN_TYPE = 'video'
  7044. class RadioKapitalBaseIE(LazyLoadExtractor):
  7045. _module = 'yt_dlp.extractor.radiokapital'
  7046. IE_NAME = 'RadioKapitalBase'
  7047. class RadioKapitalIE(RadioKapitalBaseIE):
  7048. _module = 'yt_dlp.extractor.radiokapital'
  7049. IE_NAME = 'radiokapital'
  7050. _VALID_URL = 'https?://(?:www\\.)?radiokapital\\.pl/shows/[a-z\\d-]+/(?P<id>[a-z\\d-]+)'
  7051. _RETURN_TYPE = 'video'
  7052. class RadioKapitalShowIE(RadioKapitalBaseIE):
  7053. _module = 'yt_dlp.extractor.radiokapital'
  7054. IE_NAME = 'radiokapital:show'
  7055. _VALID_URL = 'https?://(?:www\\.)?radiokapital\\.pl/shows/(?P<id>[a-z\\d-]+)/?(?:$|[?#])'
  7056. _RETURN_TYPE = 'playlist'
  7057. class RadioRadicaleIE(LazyLoadExtractor):
  7058. _module = 'yt_dlp.extractor.radioradicale'
  7059. IE_NAME = 'RadioRadicale'
  7060. _VALID_URL = 'https?://(?:www\\.)?radioradicale\\.it/scheda/(?P<id>[0-9]+)'
  7061. _RETURN_TYPE = 'any'
  7062. class RadioZetPodcastIE(LazyLoadExtractor):
  7063. _module = 'yt_dlp.extractor.radiozet'
  7064. IE_NAME = 'RadioZetPodcast'
  7065. _VALID_URL = 'https?://player\\.radiozet\\.pl\\/Podcasty/.*?/(?P<id>.+)'
  7066. _RETURN_TYPE = 'video'
  7067. class RadLiveIE(LazyLoadExtractor):
  7068. _module = 'yt_dlp.extractor.radlive'
  7069. IE_NAME = 'radlive'
  7070. _VALID_URL = 'https?://(?:www\\.)?rad\\.live/content/(?P<content_type>feature|episode)/(?P<id>[a-f0-9-]+)'
  7071. _RETURN_TYPE = 'video'
  7072. class RadLiveChannelIE(RadLiveIE):
  7073. _module = 'yt_dlp.extractor.radlive'
  7074. IE_NAME = 'radlive:channel'
  7075. _VALID_URL = 'https?://(?:www\\.)?rad\\.live/content/channel/(?P<id>[a-f0-9-]+)'
  7076. _RETURN_TYPE = 'playlist'
  7077. @classmethod
  7078. def suitable(cls, url):
  7079. return False if RadLiveIE.suitable(url) else super().suitable(url)
  7080. class RadLiveSeasonIE(RadLiveIE):
  7081. _module = 'yt_dlp.extractor.radlive'
  7082. IE_NAME = 'radlive:season'
  7083. _VALID_URL = 'https?://(?:www\\.)?rad\\.live/content/season/(?P<id>[a-f0-9-]+)'
  7084. _RETURN_TYPE = 'playlist'
  7085. @classmethod
  7086. def suitable(cls, url):
  7087. return False if RadLiveIE.suitable(url) else super().suitable(url)
  7088. class RaiBaseIE(LazyLoadExtractor):
  7089. _module = 'yt_dlp.extractor.rai'
  7090. IE_NAME = 'RaiBase'
  7091. class RaiIE(RaiBaseIE):
  7092. _module = 'yt_dlp.extractor.rai'
  7093. IE_NAME = 'Rai'
  7094. _VALID_URL = 'https?://[^/]+\\.(?:rai\\.(?:it|tv))/.+?-(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})(?:-.+?)?\\.html'
  7095. _RETURN_TYPE = 'video'
  7096. class RaiNewsIE(RaiBaseIE):
  7097. _module = 'yt_dlp.extractor.rai'
  7098. IE_NAME = 'RaiNews'
  7099. _VALID_URL = 'https?://(www\\.)?rainews\\.it/(?!articoli)[^?#]+-(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})(?:-[^/?#]+)?\\.html'
  7100. _RETURN_TYPE = 'video'
  7101. class RaiCulturaIE(RaiNewsIE):
  7102. _module = 'yt_dlp.extractor.rai'
  7103. IE_NAME = 'RaiCultura'
  7104. _VALID_URL = 'https?://(www\\.)?raicultura\\.it/(?!articoli)[^?#]+-(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})(?:-[^/?#]+)?\\.html'
  7105. _RETURN_TYPE = 'video'
  7106. class RaiPlayIE(RaiBaseIE):
  7107. _module = 'yt_dlp.extractor.rai'
  7108. IE_NAME = 'RaiPlay'
  7109. _VALID_URL = '(?P<base>https?://(?:www\\.)?raiplay\\.it/.+?-(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}))\\.(?:html|json)'
  7110. _RETURN_TYPE = 'video'
  7111. class RaiPlayLiveIE(RaiPlayIE):
  7112. _module = 'yt_dlp.extractor.rai'
  7113. IE_NAME = 'RaiPlayLive'
  7114. _VALID_URL = '(?P<base>https?://(?:www\\.)?raiplay\\.it/dirette/(?P<id>[^/?#&]+))'
  7115. _RETURN_TYPE = 'video'
  7116. class RaiPlayPlaylistIE(LazyLoadExtractor):
  7117. _module = 'yt_dlp.extractor.rai'
  7118. IE_NAME = 'RaiPlayPlaylist'
  7119. _VALID_URL = '(?P<base>https?://(?:www\\.)?raiplay\\.it/programmi/(?P<id>[^/?#&]+))(?:/(?P<extra_id>[^?#&]+))?'
  7120. _RETURN_TYPE = 'playlist'
  7121. class RaiPlaySoundIE(RaiBaseIE):
  7122. _module = 'yt_dlp.extractor.rai'
  7123. IE_NAME = 'RaiPlaySound'
  7124. _VALID_URL = '(?P<base>https?://(?:www\\.)?raiplaysound\\.it/.+?-(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}))\\.(?:html|json)'
  7125. _RETURN_TYPE = 'video'
  7126. class RaiPlaySoundLiveIE(RaiPlaySoundIE):
  7127. _module = 'yt_dlp.extractor.rai'
  7128. IE_NAME = 'RaiPlaySoundLive'
  7129. _VALID_URL = '(?P<base>https?://(?:www\\.)?raiplaysound\\.it/(?P<id>[^/?#&]+)$)'
  7130. _RETURN_TYPE = 'video'
  7131. class RaiPlaySoundPlaylistIE(LazyLoadExtractor):
  7132. _module = 'yt_dlp.extractor.rai'
  7133. IE_NAME = 'RaiPlaySoundPlaylist'
  7134. _VALID_URL = '(?P<base>https?://(?:www\\.)?raiplaysound\\.it/(?:programmi|playlist|audiolibri)/(?P<id>[^/?#&]+))(?:/(?P<extra_id>[^?#&]+))?'
  7135. _RETURN_TYPE = 'playlist'
  7136. class RaiSudtirolIE(RaiBaseIE):
  7137. _module = 'yt_dlp.extractor.rai'
  7138. IE_NAME = 'RaiSudtirol'
  7139. _VALID_URL = 'https?://raisudtirol\\.rai\\.it/.+media=(?P<id>\\w+)'
  7140. _RETURN_TYPE = 'video'
  7141. class RayWenderlichCourseIE(LazyLoadExtractor):
  7142. _module = 'yt_dlp.extractor.raywenderlich'
  7143. IE_NAME = 'RayWenderlichCourse'
  7144. _VALID_URL = '(?x)\n https?://\n (?:\n videos\\.raywenderlich\\.com/courses|\n (?:www\\.)?raywenderlich\\.com\n )/\n (?P<id>[^/]+)\n '
  7145. _RETURN_TYPE = 'playlist'
  7146. @classmethod
  7147. def suitable(cls, url):
  7148. return False if RayWenderlichIE.suitable(url) else super().suitable(url)
  7149. class RayWenderlichIE(LazyLoadExtractor):
  7150. _module = 'yt_dlp.extractor.raywenderlich'
  7151. IE_NAME = 'RayWenderlich'
  7152. _VALID_URL = '(?x)\n https?://\n (?:\n videos\\.raywenderlich\\.com/courses|\n (?:www\\.)?raywenderlich\\.com\n )/\n (?P<course_id>[^/]+)/lessons/(?P<id>\\d+)\n '
  7153. _RETURN_TYPE = 'video'
  7154. class RbgTumCourseIE(LazyLoadExtractor):
  7155. _module = 'yt_dlp.extractor.rbgtum'
  7156. IE_NAME = 'RbgTumCourse'
  7157. _VALID_URL = 'https?://(?P<hostname>(?:live\\.rbg\\.tum\\.de|tum\\.live))/old/course/(?P<id>(?P<year>\\d+)/(?P<term>\\w+)/(?P<slug>[^/?#]+))'
  7158. _RETURN_TYPE = 'playlist'
  7159. class RbgTumIE(LazyLoadExtractor):
  7160. _module = 'yt_dlp.extractor.rbgtum'
  7161. IE_NAME = 'RbgTum'
  7162. _VALID_URL = 'https?://(?:live\\.rbg\\.tum\\.de|tum\\.live)/w/(?P<id>[^?#]+)'
  7163. _RETURN_TYPE = 'video'
  7164. class RbgTumNewCourseIE(LazyLoadExtractor):
  7165. _module = 'yt_dlp.extractor.rbgtum'
  7166. IE_NAME = 'RbgTumNewCourse'
  7167. _VALID_URL = 'https?://(?P<hostname>(?:live\\.rbg\\.tum\\.de|tum\\.live))/\\?'
  7168. _RETURN_TYPE = 'playlist'
  7169. class RCSBaseIE(LazyLoadExtractor):
  7170. _module = 'yt_dlp.extractor.rcs'
  7171. IE_NAME = 'RCSBase'
  7172. class RCSIE(RCSBaseIE):
  7173. _module = 'yt_dlp.extractor.rcs'
  7174. IE_NAME = 'RCS'
  7175. _VALID_URL = '(?x)https?://(?P<vid>video|viaggi)\\.\n (?P<cdn>\n (?:\n corrieredelmezzogiorno\\.\n |corrieredelveneto\\.\n |corrieredibologna\\.\n |corrierefiorentino\\.\n )?corriere\\.it\n |(?:gazzanet\\.)?gazzetta\\.it)\n /(?!video-embed/)[^?#]+?/(?P<id>[^/\\?]+)(?=\\?|/$|$)'
  7176. _RETURN_TYPE = 'video'
  7177. class RCSEmbedsIE(RCSBaseIE):
  7178. _module = 'yt_dlp.extractor.rcs'
  7179. IE_NAME = 'RCSEmbeds'
  7180. _VALID_URL = '(?x)\n https?://(?P<vid>video)\\.\n (?P<cdn>\n (?:\n rcs|\n (?:corriere\\w+\\.)?corriere|\n (?:gazzanet\\.)?gazzetta\n )\\.it)\n /video-embed/(?P<id>[^/=&\\?]+?)(?:$|\\?)'
  7181. _RETURN_TYPE = 'video'
  7182. class RCSVariousIE(RCSBaseIE):
  7183. _module = 'yt_dlp.extractor.rcs'
  7184. IE_NAME = 'RCSVarious'
  7185. _VALID_URL = '(?x)https?://www\\.\n (?P<cdn>\n leitv\\.it|\n youreporter\\.it|\n amica\\.it\n )/(?:[^/]+/)?(?P<id>[^/]+?)(?:$|\\?|/)'
  7186. _RETURN_TYPE = 'video'
  7187. class RCTIPlusBaseIE(LazyLoadExtractor):
  7188. _module = 'yt_dlp.extractor.rcti'
  7189. IE_NAME = 'RCTIPlusBase'
  7190. class RCTIPlusIE(RCTIPlusBaseIE):
  7191. _module = 'yt_dlp.extractor.rcti'
  7192. IE_NAME = 'RCTIPlus'
  7193. _VALID_URL = 'https?://www\\.rctiplus\\.com/(?:programs/\\d+?/.*?/)?(?P<type>episode|clip|extra|live-event|missed-event)/(?P<id>\\d+)/(?P<display_id>[^/?#&]+)'
  7194. _RETURN_TYPE = 'video'
  7195. class RCTIPlusSeriesIE(RCTIPlusBaseIE):
  7196. _module = 'yt_dlp.extractor.rcti'
  7197. IE_NAME = 'RCTIPlusSeries'
  7198. _VALID_URL = 'https?://www\\.rctiplus\\.com/programs/(?P<id>\\d+)/(?P<display_id>[^/?#&]+)(?:/(?P<type>episodes|extras|clips))?'
  7199. age_limit = 2
  7200. _RETURN_TYPE = 'playlist'
  7201. @classmethod
  7202. def suitable(cls, url):
  7203. return False if RCTIPlusIE.suitable(url) else super().suitable(url)
  7204. class RCTIPlusTVIE(RCTIPlusBaseIE):
  7205. _module = 'yt_dlp.extractor.rcti'
  7206. IE_NAME = 'RCTIPlusTV'
  7207. _VALID_URL = 'https?://www\\.rctiplus\\.com/((tv/(?P<tvname>\\w+))|(?P<eventname>live-event|missed-event))'
  7208. _RETURN_TYPE = 'video'
  7209. @classmethod
  7210. def suitable(cls, url):
  7211. return False if RCTIPlusIE.suitable(url) else super().suitable(url)
  7212. class RDSIE(LazyLoadExtractor):
  7213. _module = 'yt_dlp.extractor.rds'
  7214. IE_NAME = 'RDS'
  7215. _VALID_URL = 'https?://(?:www\\.)?rds\\.ca/vid(?:[eé]|%C3%A9)os/(?:[^/]+/)*(?P<id>[^/]+)-\\d+\\.\\d+'
  7216. _WORKING = False
  7217. IE_DESC = 'RDS.ca'
  7218. _RETURN_TYPE = 'video'
  7219. class RedBeeBaseIE(LazyLoadExtractor):
  7220. _module = 'yt_dlp.extractor.redbee'
  7221. IE_NAME = 'RedBeeBase'
  7222. class RTBFIE(RedBeeBaseIE):
  7223. _module = 'yt_dlp.extractor.redbee'
  7224. IE_NAME = 'RTBF'
  7225. _VALID_URL = '(?x)\n https?://(?:www\\.)?rtbf\\.be/\n (?:\n video/[^?]+\\?.*\\bid=|\n ouftivi/(?:[^/]+/)*[^?]+\\?.*\\bvideoId=|\n auvio/[^/]+\\?.*\\b(?P<live>l)?id=\n )(?P<id>\\d+)'
  7226. _WORKING = False
  7227. _NETRC_MACHINE = 'rtbf'
  7228. _RETURN_TYPE = 'video'
  7229. class ParliamentLiveUKIE(RedBeeBaseIE):
  7230. _module = 'yt_dlp.extractor.redbee'
  7231. IE_NAME = 'parliamentlive.tv'
  7232. _VALID_URL = '(?i)https?://(?:www\\.)?parliamentlive\\.tv/Event/Index/(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  7233. IE_DESC = 'UK parliament videos'
  7234. _RETURN_TYPE = 'video'
  7235. class RedBullIE(LazyLoadExtractor):
  7236. _module = 'yt_dlp.extractor.redbulltv'
  7237. IE_NAME = 'RedBull'
  7238. _VALID_URL = 'https?://(?:www\\.)?redbull\\.com/(?P<region>[a-z]{2,3})-(?P<lang>[a-z]{2})/(?P<type>(?:episode|film|(?:(?:recap|trailer)-)?video)s|live)/(?!AP-|rrn:content:)(?P<id>[^/?#&]+)'
  7239. _RETURN_TYPE = 'video'
  7240. class RedBullTVIE(LazyLoadExtractor):
  7241. _module = 'yt_dlp.extractor.redbulltv'
  7242. IE_NAME = 'RedBullTV'
  7243. _VALID_URL = 'https?://(?:www\\.)?redbull(?:\\.tv|\\.com(?:/[^/]+)?(?:/tv)?)(?:/events/[^/]+)?/(?:videos?|live|(?:film|episode)s)/(?P<id>AP-\\w+)'
  7244. _RETURN_TYPE = 'video'
  7245. class RedBullEmbedIE(RedBullTVIE):
  7246. _module = 'yt_dlp.extractor.redbulltv'
  7247. IE_NAME = 'RedBullEmbed'
  7248. _VALID_URL = 'https?://(?:www\\.)?redbull\\.com/embed/(?P<id>rrn:content:[^:]+:[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}:[a-z]{2}-[A-Z]{2,3})'
  7249. class RedBullTVRrnContentIE(LazyLoadExtractor):
  7250. _module = 'yt_dlp.extractor.redbulltv'
  7251. IE_NAME = 'RedBullTVRrnContent'
  7252. _VALID_URL = 'https?://(?:www\\.)?redbull\\.com/(?P<region>[a-z]{2,3})-(?P<lang>[a-z]{2})/tv/(?:video|live|film)/(?P<id>rrn:content:[^:]+:[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  7253. class RedditIE(LazyLoadExtractor):
  7254. _module = 'yt_dlp.extractor.reddit'
  7255. IE_NAME = 'Reddit'
  7256. _VALID_URL = 'https?://(?:\\w+\\.)?reddit(?:media)?\\.com/(?P<slug>(?:(?:r|user)/[^/]+/)?comments/(?P<id>[^/?#&]+))'
  7257. _NETRC_MACHINE = 'reddit'
  7258. age_limit = 18
  7259. _RETURN_TYPE = 'any'
  7260. class RedCDNLivxIE(LazyLoadExtractor):
  7261. _module = 'yt_dlp.extractor.redge'
  7262. IE_NAME = 'redcdnlivx'
  7263. _VALID_URL = 'https?://[^.]+\\.(?:dcs\\.redcdn|atmcdn)\\.pl/(?:live(?:dash|hls|ss)|nvr)/o2/(?P<tenant>[^/?#]+)/(?P<id>[^?#]+)\\.livx'
  7264. _RETURN_TYPE = 'video'
  7265. class RedGifsBaseInfoExtractor(LazyLoadExtractor):
  7266. _module = 'yt_dlp.extractor.redgifs'
  7267. IE_NAME = 'RedGifsBaseInfoExtract'
  7268. class RedGifsIE(RedGifsBaseInfoExtractor):
  7269. _module = 'yt_dlp.extractor.redgifs'
  7270. IE_NAME = 'RedGifs'
  7271. _VALID_URL = 'https?://(?:(?:www\\.)?redgifs\\.com/watch/|thumbs2\\.redgifs\\.com/)(?P<id>[^-/?#\\.]+)'
  7272. age_limit = 18
  7273. _RETURN_TYPE = 'video'
  7274. class RedGifsSearchIE(RedGifsBaseInfoExtractor):
  7275. _module = 'yt_dlp.extractor.redgifs'
  7276. IE_NAME = 'RedGifsSearch'
  7277. _VALID_URL = 'https?://(?:www\\.)?redgifs\\.com/browse\\?(?P<query>[^#]+)'
  7278. IE_DESC = 'Redgifs search'
  7279. _RETURN_TYPE = 'playlist'
  7280. class RedGifsUserIE(RedGifsBaseInfoExtractor):
  7281. _module = 'yt_dlp.extractor.redgifs'
  7282. IE_NAME = 'RedGifsUser'
  7283. _VALID_URL = 'https?://(?:www\\.)?redgifs\\.com/users/(?P<username>[^/?#]+)(?:\\?(?P<query>[^#]+))?'
  7284. IE_DESC = 'Redgifs user'
  7285. _RETURN_TYPE = 'playlist'
  7286. class RedTubeIE(LazyLoadExtractor):
  7287. _module = 'yt_dlp.extractor.redtube'
  7288. IE_NAME = 'RedTube'
  7289. _VALID_URL = 'https?://(?:(?:\\w+\\.)?redtube\\.com(?:\\.br)?/|embed\\.redtube\\.com/\\?.*?\\bid=)(?P<id>[0-9]+)'
  7290. age_limit = 18
  7291. _RETURN_TYPE = 'video'
  7292. class RENTVIE(LazyLoadExtractor):
  7293. _module = 'yt_dlp.extractor.rentv'
  7294. IE_NAME = 'RENTV'
  7295. _VALID_URL = '(?:rentv:|https?://(?:www\\.)?ren\\.tv/(?:player|video/epizod)/)(?P<id>\\d+)'
  7296. _WORKING = False
  7297. _RETURN_TYPE = 'video'
  7298. class RENTVArticleIE(LazyLoadExtractor):
  7299. _module = 'yt_dlp.extractor.rentv'
  7300. IE_NAME = 'RENTVArticle'
  7301. _VALID_URL = 'https?://(?:www\\.)?ren\\.tv/novosti/\\d{4}-\\d{2}-\\d{2}/(?P<id>[^/?#]+)'
  7302. _WORKING = False
  7303. _RETURN_TYPE = 'video'
  7304. class RestudyIE(LazyLoadExtractor):
  7305. _module = 'yt_dlp.extractor.restudy'
  7306. IE_NAME = 'Restudy'
  7307. _VALID_URL = 'https?://(?:(?:www|portal)\\.)?restudy\\.dk/video/[^/]+/id/(?P<id>[0-9]+)'
  7308. _WORKING = False
  7309. _RETURN_TYPE = 'video'
  7310. class ReutersIE(LazyLoadExtractor):
  7311. _module = 'yt_dlp.extractor.reuters'
  7312. IE_NAME = 'Reuters'
  7313. _VALID_URL = 'https?://(?:www\\.)?reuters\\.com/.*?\\?.*?videoId=(?P<id>[0-9]+)'
  7314. _WORKING = False
  7315. _RETURN_TYPE = 'video'
  7316. class ReverbNationIE(LazyLoadExtractor):
  7317. _module = 'yt_dlp.extractor.reverbnation'
  7318. IE_NAME = 'ReverbNation'
  7319. _VALID_URL = 'https?://(?:www\\.)?reverbnation\\.com/.*?/song/(?P<id>\\d+).*?$'
  7320. _RETURN_TYPE = 'video'
  7321. class RheinMainTVIE(LazyLoadExtractor):
  7322. _module = 'yt_dlp.extractor.rheinmaintv'
  7323. IE_NAME = 'RheinMainTV'
  7324. _VALID_URL = 'https?://(?:www\\.)?rheinmaintv\\.de/sendungen/(?:[\\w-]+/)*(?P<video_id>(?P<display_id>[\\w-]+)/vom-\\d{2}\\.\\d{2}\\.\\d{4}(?:/\\d+)?)'
  7325. _RETURN_TYPE = 'video'
  7326. class RideHomeIE(LazyLoadExtractor):
  7327. _module = 'yt_dlp.extractor.ridehome'
  7328. IE_NAME = 'RideHome'
  7329. _VALID_URL = 'https?://(?:www\\.)?ridehome\\.info/show/[\\w-]+/(?P<id>[\\w-]+)/?(?:$|[?#])'
  7330. _RETURN_TYPE = 'playlist'
  7331. class RinseFMBaseIE(LazyLoadExtractor):
  7332. _module = 'yt_dlp.extractor.rinsefm'
  7333. IE_NAME = 'RinseFMBase'
  7334. class RinseFMArtistPlaylistIE(RinseFMBaseIE):
  7335. _module = 'yt_dlp.extractor.rinsefm'
  7336. IE_NAME = 'RinseFMArtistPlaylist'
  7337. _VALID_URL = 'https?://(?:www\\.)?rinse\\.fm/shows/(?P<id>[^/?#]+)'
  7338. _RETURN_TYPE = 'playlist'
  7339. class RinseFMIE(RinseFMBaseIE):
  7340. _module = 'yt_dlp.extractor.rinsefm'
  7341. IE_NAME = 'RinseFM'
  7342. _VALID_URL = 'https?://(?:www\\.)?rinse\\.fm/episodes/(?P<id>[^/?#]+)'
  7343. _RETURN_TYPE = 'video'
  7344. class RMCDecouverteIE(LazyLoadExtractor):
  7345. _module = 'yt_dlp.extractor.rmcdecouverte'
  7346. IE_NAME = 'RMCDecouverte'
  7347. _VALID_URL = 'https?://rmcdecouverte\\.bfmtv\\.com/(?:[^?#]*_(?P<id>\\d+)|mediaplayer-direct)/?(?:[#?]|$)'
  7348. _RETURN_TYPE = 'video'
  7349. class RockstarGamesIE(LazyLoadExtractor):
  7350. _module = 'yt_dlp.extractor.rockstargames'
  7351. IE_NAME = 'RockstarGames'
  7352. _VALID_URL = 'https?://(?:www\\.)?rockstargames\\.com/videos(?:/video/|#?/?\\?.*\\bvideo=)(?P<id>\\d+)'
  7353. _WORKING = False
  7354. _RETURN_TYPE = 'video'
  7355. class RokfinPlaylistBaseIE(LazyLoadExtractor):
  7356. _module = 'yt_dlp.extractor.rokfin'
  7357. IE_NAME = 'RokfinPlaylistBase'
  7358. class RokfinChannelIE(RokfinPlaylistBaseIE):
  7359. _module = 'yt_dlp.extractor.rokfin'
  7360. IE_NAME = 'rokfin:channel'
  7361. _VALID_URL = 'https?://(?:www\\.)?rokfin\\.com/(?!((feed/?)|(discover/?)|(channels/?))$)(?P<id>[^/]+)/?$'
  7362. IE_DESC = 'Rokfin Channels'
  7363. _RETURN_TYPE = 'playlist'
  7364. class RokfinIE(LazyLoadExtractor):
  7365. _module = 'yt_dlp.extractor.rokfin'
  7366. IE_NAME = 'Rokfin'
  7367. _VALID_URL = 'https?://(?:www\\.)?rokfin\\.com/(?P<id>(?P<type>post|stream)/\\d+)'
  7368. _NETRC_MACHINE = 'rokfin'
  7369. _RETURN_TYPE = 'video'
  7370. class RokfinSearchIE(LazyLoadSearchExtractor):
  7371. _module = 'yt_dlp.extractor.rokfin'
  7372. IE_NAME = 'rokfin:search'
  7373. _VALID_URL = 'rkfnsearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  7374. IE_DESC = 'Rokfin Search'
  7375. SEARCH_KEY = 'rkfnsearch'
  7376. _RETURN_TYPE = 'playlist'
  7377. class RokfinStackIE(RokfinPlaylistBaseIE):
  7378. _module = 'yt_dlp.extractor.rokfin'
  7379. IE_NAME = 'rokfin:stack'
  7380. _VALID_URL = 'https?://(?:www\\.)?rokfin\\.com/stack/(?P<id>[^/]+)'
  7381. IE_DESC = 'Rokfin Stacks'
  7382. _RETURN_TYPE = 'playlist'
  7383. class RoosterTeethBaseIE(LazyLoadExtractor):
  7384. _module = 'yt_dlp.extractor.roosterteeth'
  7385. IE_NAME = 'RoosterTeethBase'
  7386. _NETRC_MACHINE = 'roosterteeth'
  7387. class RoosterTeethIE(RoosterTeethBaseIE):
  7388. _module = 'yt_dlp.extractor.roosterteeth'
  7389. IE_NAME = 'RoosterTeeth'
  7390. _VALID_URL = 'https?://(?:.+?\\.)?roosterteeth\\.com/(?:bonus-feature|episode|watch)/(?P<id>[^/?#&]+)'
  7391. _NETRC_MACHINE = 'roosterteeth'
  7392. _RETURN_TYPE = 'video'
  7393. class RoosterTeethSeriesIE(RoosterTeethBaseIE):
  7394. _module = 'yt_dlp.extractor.roosterteeth'
  7395. IE_NAME = 'RoosterTeethSeries'
  7396. _VALID_URL = 'https?://(?:.+?\\.)?roosterteeth\\.com/series/(?P<id>[^/?#&]+)'
  7397. _NETRC_MACHINE = 'roosterteeth'
  7398. _RETURN_TYPE = 'playlist'
  7399. class RottenTomatoesIE(LazyLoadExtractor):
  7400. _module = 'yt_dlp.extractor.rottentomatoes'
  7401. IE_NAME = 'RottenTomatoes'
  7402. _VALID_URL = 'https?://(?:www\\.)?rottentomatoes\\.com/m/(?P<playlist>[^/]+)(?:/(?P<tr>trailers)(?:/(?P<id>\\w+))?)?'
  7403. _RETURN_TYPE = 'any'
  7404. class RozhlasBaseIE(LazyLoadExtractor):
  7405. _module = 'yt_dlp.extractor.rozhlas'
  7406. IE_NAME = 'RozhlasBase'
  7407. class MujRozhlasIE(RozhlasBaseIE):
  7408. _module = 'yt_dlp.extractor.rozhlas'
  7409. IE_NAME = 'MujRozhlas'
  7410. _VALID_URL = 'https?://(?:www\\.)?mujrozhlas\\.cz/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  7411. _RETURN_TYPE = 'any'
  7412. class RozhlasIE(LazyLoadExtractor):
  7413. _module = 'yt_dlp.extractor.rozhlas'
  7414. IE_NAME = 'Rozhlas'
  7415. _VALID_URL = 'https?://(?:www\\.)?prehravac\\.rozhlas\\.cz/audio/(?P<id>[0-9]+)'
  7416. _RETURN_TYPE = 'video'
  7417. class RozhlasVltavaIE(RozhlasBaseIE):
  7418. _module = 'yt_dlp.extractor.rozhlas'
  7419. IE_NAME = 'RozhlasVltava'
  7420. _VALID_URL = 'https?://(?:\\w+\\.rozhlas|english\\.radio)\\.cz/[\\w-]+-(?P<id>\\d+)'
  7421. _RETURN_TYPE = 'playlist'
  7422. class RteBaseIE(LazyLoadExtractor):
  7423. _module = 'yt_dlp.extractor.rte'
  7424. IE_NAME = 'RteBase'
  7425. class RteIE(RteBaseIE):
  7426. _module = 'yt_dlp.extractor.rte'
  7427. IE_NAME = 'rte'
  7428. _VALID_URL = 'https?://(?:www\\.)?rte\\.ie/player/[^/]{2,3}/show/[^/]+/(?P<id>[0-9]+)'
  7429. IE_DESC = 'Raidió Teilifís Éireann TV'
  7430. _RETURN_TYPE = 'video'
  7431. class RteRadioIE(RteBaseIE):
  7432. _module = 'yt_dlp.extractor.rte'
  7433. IE_NAME = 'rte:radio'
  7434. _VALID_URL = 'https?://(?:www\\.)?rte\\.ie/radio/utils/radioplayer/rteradioweb\\.html#!rii=(?:b?[0-9]*)(?:%3A|:|%5F|_)(?P<id>[0-9]+)'
  7435. IE_DESC = 'Raidió Teilifís Éireann radio'
  7436. _RETURN_TYPE = 'video'
  7437. class RTL2IE(LazyLoadExtractor):
  7438. _module = 'yt_dlp.extractor.rtl2'
  7439. IE_NAME = 'rtl2'
  7440. _VALID_URL = 'https?://(?:www\\.)?rtl2\\.de/sendung/[^/]+/(?:video/(?P<vico_id>\\d+)[^/]+/(?P<vivi_id>\\d+)-|folge/)(?P<id>[^/?#]+)'
  7441. _RETURN_TYPE = 'video'
  7442. class RTLLuBaseIE(LazyLoadExtractor):
  7443. _module = 'yt_dlp.extractor.rtlnl'
  7444. IE_NAME = 'RTLLuBase'
  7445. class RTLLuArticleIE(RTLLuBaseIE):
  7446. _module = 'yt_dlp.extractor.rtlnl'
  7447. IE_NAME = 'rtl.lu:article'
  7448. _VALID_URL = 'https?://(?:(www|5minutes|today)\\.)rtl\\.lu/(?:[\\w-]+)/(?:[\\w-]+)/a/(?P<id>\\d+)\\.html'
  7449. _RETURN_TYPE = 'video'
  7450. class RTLLuLiveIE(RTLLuBaseIE):
  7451. _module = 'yt_dlp.extractor.rtlnl'
  7452. IE_NAME = 'RTLLuLive'
  7453. _VALID_URL = 'https?://www\\.rtl\\.lu/(?:tele|radio)/(?P<id>live(?:-\\d+)?|lauschteren)'
  7454. _RETURN_TYPE = 'video'
  7455. class RTLLuRadioIE(RTLLuBaseIE):
  7456. _module = 'yt_dlp.extractor.rtlnl'
  7457. IE_NAME = 'RTLLuRadio'
  7458. _VALID_URL = 'https?://www\\.rtl\\.lu/radio/(?:[\\w-]+)/s/(?P<id>\\d+)(\\.html)?'
  7459. _RETURN_TYPE = 'video'
  7460. class RTLLuTeleVODIE(RTLLuBaseIE):
  7461. _module = 'yt_dlp.extractor.rtlnl'
  7462. IE_NAME = 'rtl.lu:tele-vod'
  7463. _VALID_URL = 'https?://(?:www\\.)?rtl\\.lu/(tele/(?P<slug>[\\w-]+)/v/|video/)(?P<id>\\d+)(\\.html)?'
  7464. _RETURN_TYPE = 'video'
  7465. class RtlNlIE(LazyLoadExtractor):
  7466. _module = 'yt_dlp.extractor.rtlnl'
  7467. IE_NAME = 'rtl.nl'
  7468. _VALID_URL = '(?x)\n https?://(?:(?:www|static)\\.)?\n (?:\n rtlxl\\.nl/(?:[^\\#]*\\#!|programma)/[^/]+/|\n rtl\\.nl/(?:(?:system/videoplayer/(?:[^/]+/)+(?:video_)?embed\\.html|embed)\\b.+?\\buuid=|video/)|\n embed\\.rtl\\.nl/\\#uuid=\n )\n (?P<id>[0-9a-f-]+)'
  7469. IE_DESC = 'rtl.nl and rtlxl.nl'
  7470. _RETURN_TYPE = 'video'
  7471. class RTDocumentryIE(LazyLoadExtractor):
  7472. _module = 'yt_dlp.extractor.rtnews'
  7473. IE_NAME = 'RTDocumentry'
  7474. _VALID_URL = 'https?://rtd\\.rt\\.com/(?:(?:series|shows)/[^/]+|films)/(?P<id>[^/?$&#]+)'
  7475. _RETURN_TYPE = 'video'
  7476. class RTDocumentryPlaylistIE(LazyLoadExtractor):
  7477. _module = 'yt_dlp.extractor.rtnews'
  7478. IE_NAME = 'RTDocumentryPlaylist'
  7479. _VALID_URL = 'https?://rtd\\.rt\\.com/(?:series|shows)/(?P<id>[^/]+)/$'
  7480. _RETURN_TYPE = 'playlist'
  7481. class RTNewsIE(LazyLoadExtractor):
  7482. _module = 'yt_dlp.extractor.rtnews'
  7483. IE_NAME = 'RTNews'
  7484. _VALID_URL = 'https?://(?:www\\.)?rt\\.com/[^/]+/(?:[^/]+/)?(?P<id>\\d+)'
  7485. _RETURN_TYPE = 'playlist'
  7486. class RuptlyIE(LazyLoadExtractor):
  7487. _module = 'yt_dlp.extractor.rtnews'
  7488. IE_NAME = 'Ruptly'
  7489. _VALID_URL = 'https?://(?:www\\.)?ruptly\\.tv/[a-z]{2}/videos/(?P<id>\\d+-\\d+)'
  7490. _RETURN_TYPE = 'video'
  7491. class RTPIE(LazyLoadExtractor):
  7492. _module = 'yt_dlp.extractor.rtp'
  7493. IE_NAME = 'RTP'
  7494. _VALID_URL = 'https?://(?:www\\.)?rtp\\.pt/play/(?:(?:estudoemcasa|palco|zigzag)/)?p(?P<program_id>[0-9]+)/(?P<id>[^/?#]+)'
  7495. _RETURN_TYPE = 'video'
  7496. class RTRFMIE(LazyLoadExtractor):
  7497. _module = 'yt_dlp.extractor.rtrfm'
  7498. IE_NAME = 'RTRFM'
  7499. _VALID_URL = 'https?://(?:www\\.)?rtrfm\\.com\\.au/(?:shows|show-episode)/(?P<id>[^/?\\#&]+)'
  7500. _RETURN_TYPE = 'video'
  7501. class RTVCPlayBaseIE(LazyLoadExtractor):
  7502. _module = 'yt_dlp.extractor.rtvcplay'
  7503. IE_NAME = 'RTVCPlayBase'
  7504. class RTVCKalturaIE(RTVCPlayBaseIE):
  7505. _module = 'yt_dlp.extractor.rtvcplay'
  7506. IE_NAME = 'RTVCKaltura'
  7507. _VALID_URL = 'https?://media\\.rtvc\\.gov\\.co/kalturartvc/(?P<id>[\\w-]+)'
  7508. _RETURN_TYPE = 'video'
  7509. class RTVCPlayEmbedIE(RTVCPlayBaseIE):
  7510. _module = 'yt_dlp.extractor.rtvcplay'
  7511. IE_NAME = 'RTVCPlayEmbed'
  7512. _VALID_URL = 'https?://(?:www\\.)?rtvcplay\\.co/embed/(?P<id>[\\w-]+)'
  7513. _RETURN_TYPE = 'video'
  7514. class RTVCPlayIE(RTVCPlayBaseIE):
  7515. _module = 'yt_dlp.extractor.rtvcplay'
  7516. IE_NAME = 'RTVCPlay'
  7517. _VALID_URL = 'https?://(?:www\\.)?rtvcplay\\.co/(?P<category>(?!embed)[^/]+)/(?:[^?#]+/)?(?P<id>[\\w-]+)'
  7518. _RETURN_TYPE = 'any'
  7519. class RTVEALaCartaIE(LazyLoadExtractor):
  7520. _module = 'yt_dlp.extractor.rtve'
  7521. IE_NAME = 'rtve.es:alacarta'
  7522. _VALID_URL = 'https?://(?:www\\.)?rtve\\.es/(m/)?(alacarta/videos|filmoteca)/[^/]+/[^/]+/(?P<id>\\d+)'
  7523. IE_DESC = 'RTVE a la carta'
  7524. _RETURN_TYPE = 'video'
  7525. class RTVEAudioIE(RTVEALaCartaIE):
  7526. _module = 'yt_dlp.extractor.rtve'
  7527. IE_NAME = 'rtve.es:audio'
  7528. _VALID_URL = 'https?://(?:www\\.)?rtve\\.es/(alacarta|play)/audios/[^/]+/[^/]+/(?P<id>[0-9]+)'
  7529. IE_DESC = 'RTVE audio'
  7530. _RETURN_TYPE = 'video'
  7531. class RTVEInfantilIE(RTVEALaCartaIE):
  7532. _module = 'yt_dlp.extractor.rtve'
  7533. IE_NAME = 'rtve.es:infantil'
  7534. _VALID_URL = 'https?://(?:www\\.)?rtve\\.es/infantil/serie/[^/]+/video/[^/]+/(?P<id>[0-9]+)/'
  7535. IE_DESC = 'RTVE infantil'
  7536. _RETURN_TYPE = 'video'
  7537. class RTVELiveIE(RTVEALaCartaIE):
  7538. _module = 'yt_dlp.extractor.rtve'
  7539. IE_NAME = 'rtve.es:live'
  7540. _VALID_URL = 'https?://(?:www\\.)?rtve\\.es/directo/(?P<id>[a-zA-Z0-9-]+)'
  7541. IE_DESC = 'RTVE.es live streams'
  7542. _RETURN_TYPE = 'video'
  7543. class RTVETelevisionIE(LazyLoadExtractor):
  7544. _module = 'yt_dlp.extractor.rtve'
  7545. IE_NAME = 'rtve.es:television'
  7546. _VALID_URL = 'https?://(?:www\\.)?rtve\\.es/television/[^/]+/[^/]+/(?P<id>\\d+).shtml'
  7547. _RETURN_TYPE = 'video'
  7548. class RTVSIE(LazyLoadExtractor):
  7549. _module = 'yt_dlp.extractor.rtvs'
  7550. IE_NAME = 'RTVS'
  7551. _VALID_URL = 'https?://(?:www\\.)?rtvs\\.sk/(?:radio|televizia)/archiv(?:/\\d+)?/(?P<id>\\d+)/?(?:[#?]|$)'
  7552. _RETURN_TYPE = 'video'
  7553. class RTVSLOIE(LazyLoadExtractor):
  7554. _module = 'yt_dlp.extractor.rtvslo'
  7555. IE_NAME = 'rtvslo.si'
  7556. _VALID_URL = '(?x)\n https?://(?:\n (?:365|4d)\\.rtvslo.si/arhiv/[^/?#&;]+|\n (?:www\\.)?rtvslo\\.si/rtv365/arhiv\n )/(?P<id>\\d+)'
  7557. _RETURN_TYPE = 'video'
  7558. class RTVSLOShowIE(LazyLoadExtractor):
  7559. _module = 'yt_dlp.extractor.rtvslo'
  7560. IE_NAME = 'rtvslo.si:show'
  7561. _VALID_URL = 'https?://(?:365|4d)\\.rtvslo.si/oddaja/[^/?#&]+/(?P<id>\\d+)'
  7562. _RETURN_TYPE = 'playlist'
  7563. class RudoVideoIE(LazyLoadExtractor):
  7564. _module = 'yt_dlp.extractor.rudovideo'
  7565. IE_NAME = 'RudoVideo'
  7566. _VALID_URL = 'https?://rudo\\.video/(?P<type>vod|podcast|live)/(?P<id>[^/?&#]+)'
  7567. _RETURN_TYPE = 'video'
  7568. class Rule34VideoIE(LazyLoadExtractor):
  7569. _module = 'yt_dlp.extractor.rule34video'
  7570. IE_NAME = 'Rule34Video'
  7571. _VALID_URL = 'https?://(?:www\\.)?rule34video\\.com/videos?/(?P<id>\\d+)'
  7572. age_limit = 18
  7573. _RETURN_TYPE = 'video'
  7574. class RumbleChannelIE(LazyLoadExtractor):
  7575. _module = 'yt_dlp.extractor.rumble'
  7576. IE_NAME = 'RumbleChannel'
  7577. _VALID_URL = '(?P<url>https?://(?:www\\.)?rumble\\.com/(?:c|user)/(?P<id>[^&?#$/]+))'
  7578. _RETURN_TYPE = 'playlist'
  7579. class RumbleEmbedIE(LazyLoadExtractor):
  7580. _module = 'yt_dlp.extractor.rumble'
  7581. IE_NAME = 'RumbleEmbed'
  7582. _VALID_URL = 'https?://(?:www\\.)?rumble\\.com/embed/(?:[0-9a-z]+\\.)?(?P<id>[0-9a-z]+)'
  7583. _RETURN_TYPE = 'video'
  7584. class RumbleIE(LazyLoadExtractor):
  7585. _module = 'yt_dlp.extractor.rumble'
  7586. IE_NAME = 'Rumble'
  7587. _VALID_URL = 'https?://(?:www\\.)?rumble\\.com/(?P<id>v(?!ideos)[\\w.-]+)[^/]*$'
  7588. _RETURN_TYPE = 'video'
  7589. class RutubeBaseIE(LazyLoadExtractor):
  7590. _module = 'yt_dlp.extractor.rutube'
  7591. IE_NAME = 'RutubeBase'
  7592. class RutubePlaylistBaseIE(RutubeBaseIE):
  7593. _module = 'yt_dlp.extractor.rutube'
  7594. IE_NAME = 'RutubePlaylistBase'
  7595. class RutubeChannelIE(RutubePlaylistBaseIE):
  7596. _module = 'yt_dlp.extractor.rutube'
  7597. IE_NAME = 'rutube:channel'
  7598. _VALID_URL = 'https?://rutube\\.ru/(?:channel/(?P<id>\\d+)|u/(?P<slug>\\w+))(?:/(?P<section>videos|shorts|playlists))?'
  7599. IE_DESC = 'Rutube channel'
  7600. _RETURN_TYPE = 'playlist'
  7601. class RutubeEmbedIE(RutubeBaseIE):
  7602. _module = 'yt_dlp.extractor.rutube'
  7603. IE_NAME = 'rutube:embed'
  7604. _VALID_URL = 'https?://rutube\\.ru/(?:video|play)/embed/(?P<id>[0-9]+)(?:[?#/]|$)'
  7605. IE_DESC = 'Rutube embedded videos'
  7606. _RETURN_TYPE = 'video'
  7607. class RutubeIE(RutubeBaseIE):
  7608. _module = 'yt_dlp.extractor.rutube'
  7609. IE_NAME = 'rutube'
  7610. _VALID_URL = 'https?://rutube\\.ru/(?:(?:live/)?video(?:/private)?|(?:play/)?embed)/(?P<id>[\\da-z]{32})'
  7611. IE_DESC = 'Rutube videos'
  7612. _RETURN_TYPE = 'video'
  7613. class RutubeMovieIE(RutubePlaylistBaseIE):
  7614. _module = 'yt_dlp.extractor.rutube'
  7615. IE_NAME = 'rutube:movie'
  7616. _VALID_URL = 'https?://rutube\\.ru/metainfo/tv/(?P<id>\\d+)'
  7617. IE_DESC = 'Rutube movies'
  7618. class RutubePersonIE(RutubePlaylistBaseIE):
  7619. _module = 'yt_dlp.extractor.rutube'
  7620. IE_NAME = 'rutube:person'
  7621. _VALID_URL = 'https?://rutube\\.ru/video/person/(?P<id>\\d+)'
  7622. IE_DESC = 'Rutube person videos'
  7623. _RETURN_TYPE = 'playlist'
  7624. class RutubePlaylistIE(RutubePlaylistBaseIE):
  7625. _module = 'yt_dlp.extractor.rutube'
  7626. IE_NAME = 'rutube:playlist'
  7627. _VALID_URL = 'https?://rutube\\.ru/plst/(?P<id>\\d+)'
  7628. IE_DESC = 'Rutube playlists'
  7629. _RETURN_TYPE = 'playlist'
  7630. class RutubeTagsIE(RutubePlaylistBaseIE):
  7631. _module = 'yt_dlp.extractor.rutube'
  7632. IE_NAME = 'rutube:tags'
  7633. _VALID_URL = 'https?://rutube\\.ru/tags/video/(?P<id>\\d+)'
  7634. IE_DESC = 'Rutube tags'
  7635. _RETURN_TYPE = 'playlist'
  7636. class RUTVIE(LazyLoadExtractor):
  7637. _module = 'yt_dlp.extractor.rutv'
  7638. IE_NAME = 'RUTV'
  7639. _VALID_URL = '(?x)\n https?://\n (?:test)?player\\.(?:rutv\\.ru|vgtrk\\.com)/\n (?P<path>\n flash\\d+v/container\\.swf\\?id=|\n iframe/(?P<type>swf|video|live)/id/|\n index/iframe/cast_id/\n )\n (?P<id>\\d+)\n '
  7640. IE_DESC = 'RUTV.RU'
  7641. _RETURN_TYPE = 'video'
  7642. class RuutuIE(LazyLoadExtractor):
  7643. _module = 'yt_dlp.extractor.ruutu'
  7644. IE_NAME = 'Ruutu'
  7645. _VALID_URL = '(?x)\n https?://\n (?:\n (?:www\\.)?(?:ruutu|supla)\\.fi/(?:video|supla|audio)/|\n static\\.nelonenmedia\\.fi/player/misc/embed_player\\.html\\?.*?\\bnid=\n )\n (?P<id>\\d+)\n '
  7646. age_limit = 12
  7647. _RETURN_TYPE = 'video'
  7648. class RuvIE(LazyLoadExtractor):
  7649. _module = 'yt_dlp.extractor.ruv'
  7650. IE_NAME = 'Ruv'
  7651. _VALID_URL = 'https?://(?:www\\.)?ruv\\.is/(?:sarpurinn/[^/]+|node)/(?P<id>[^/]+(?:/\\d+)?)'
  7652. _RETURN_TYPE = 'video'
  7653. class RuvSpilaIE(LazyLoadExtractor):
  7654. _module = 'yt_dlp.extractor.ruv'
  7655. IE_NAME = 'ruv.is:spila'
  7656. _VALID_URL = 'https?://(?:www\\.)?ruv\\.is/(?:(?:sjon|ut)varp|(?:krakka|ung)ruv)/spila/.+/(?P<series_id>[0-9]+)/(?P<id>[a-z0-9]+)'
  7657. _RETURN_TYPE = 'video'
  7658. class S4CIE(LazyLoadExtractor):
  7659. _module = 'yt_dlp.extractor.s4c'
  7660. IE_NAME = 'S4C'
  7661. _VALID_URL = 'https?://(?:www\\.)?s4c\\.cymru/clic/programme/(?P<id>\\d+)'
  7662. _RETURN_TYPE = 'video'
  7663. class S4CSeriesIE(LazyLoadExtractor):
  7664. _module = 'yt_dlp.extractor.s4c'
  7665. IE_NAME = 'S4CSeries'
  7666. _VALID_URL = 'https?://(?:www\\.)?s4c\\.cymru/clic/series/(?P<id>\\d+)'
  7667. _RETURN_TYPE = 'playlist'
  7668. class SafariBaseIE(LazyLoadExtractor):
  7669. _module = 'yt_dlp.extractor.safari'
  7670. IE_NAME = 'SafariBase'
  7671. _NETRC_MACHINE = 'safari'
  7672. class SafariApiIE(SafariBaseIE):
  7673. _module = 'yt_dlp.extractor.safari'
  7674. IE_NAME = 'safari:api'
  7675. _VALID_URL = 'https?://(?:www\\.)?(?:safaribooksonline|(?:learning\\.)?oreilly)\\.com/api/v1/book/(?P<course_id>[^/]+)/chapter(?:-content)?/(?P<part>[^/?#&]+)\\.html'
  7676. _NETRC_MACHINE = 'safari'
  7677. class SafariCourseIE(SafariBaseIE):
  7678. _module = 'yt_dlp.extractor.safari'
  7679. IE_NAME = 'safari:course'
  7680. _VALID_URL = '(?x)\n https?://\n (?:\n (?:www\\.)?(?:safaribooksonline|(?:learning\\.)?oreilly)\\.com/\n (?:\n library/view/[^/]+|\n api/v1/book|\n videos/[^/]+\n )|\n techbus\\.safaribooksonline\\.com\n )\n /(?P<id>[^/]+)\n '
  7681. IE_DESC = 'safaribooksonline.com online courses'
  7682. _NETRC_MACHINE = 'safari'
  7683. _RETURN_TYPE = 'playlist'
  7684. @classmethod
  7685. def suitable(cls, url):
  7686. return (False if SafariIE.suitable(url) or SafariApiIE.suitable(url)
  7687. else super().suitable(url))
  7688. class SafariIE(SafariBaseIE):
  7689. _module = 'yt_dlp.extractor.safari'
  7690. IE_NAME = 'safari'
  7691. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?(?:safaribooksonline|(?:learning\\.)?oreilly)\\.com/\n (?:\n library/view/[^/]+/(?P<course_id>[^/]+)/(?P<part>[^/?\\#&]+)\\.html|\n videos/[^/]+/[^/]+/(?P<reference_id>[^-]+-[^/?\\#&]+)\n )\n '
  7692. IE_DESC = 'safaribooksonline.com online video'
  7693. _NETRC_MACHINE = 'safari'
  7694. _RETURN_TYPE = 'video'
  7695. class SaitosanIE(LazyLoadExtractor):
  7696. _module = 'yt_dlp.extractor.saitosan'
  7697. IE_NAME = 'Saitosan'
  7698. _VALID_URL = 'https?://(?:www\\.)?saitosan\\.net/bview.html\\?id=(?P<id>[0-9]+)'
  7699. _WORKING = False
  7700. _RETURN_TYPE = 'video'
  7701. class SampleFocusIE(LazyLoadExtractor):
  7702. _module = 'yt_dlp.extractor.samplefocus'
  7703. IE_NAME = 'SampleFocus'
  7704. _VALID_URL = 'https?://(?:www\\.)?samplefocus\\.com/samples/(?P<id>[^/?&#]+)'
  7705. _RETURN_TYPE = 'video'
  7706. class SapoIE(LazyLoadExtractor):
  7707. _module = 'yt_dlp.extractor.sapo'
  7708. IE_NAME = 'Sapo'
  7709. _VALID_URL = 'https?://(?:(?:v2|www)\\.)?videos\\.sapo\\.(?:pt|cv|ao|mz|tl)/(?P<id>[\\da-zA-Z]{20})'
  7710. IE_DESC = 'SAPO Vídeos'
  7711. _RETURN_TYPE = 'video'
  7712. class SBSIE(LazyLoadExtractor):
  7713. _module = 'yt_dlp.extractor.sbs'
  7714. IE_NAME = 'SBS'
  7715. _VALID_URL = '(?x)\n https?://(?:www\\.)?sbs\\.com\\.au/(?:\n ondemand(?:\n /video/(?:single/)?|\n /(?:movie|tv-program)/[^/]+/|\n /(?:tv|news)-series/(?:[^/]+/){3}|\n .*?\\bplay=|/watch/\n )|news/(?:embeds/)?video/\n )(?P<id>[0-9]+)'
  7716. IE_DESC = 'sbs.com.au'
  7717. _RETURN_TYPE = 'video'
  7718. class SBSCoKrAllvodProgramIE(LazyLoadExtractor):
  7719. _module = 'yt_dlp.extractor.sbscokr'
  7720. IE_NAME = 'sbs.co.kr:allvod_program'
  7721. _VALID_URL = 'https?://allvod\\.sbs\\.co\\.kr/allvod/vod(?:Free)?ProgramDetail\\.do\\?(?:[^#]+&)?pgmId=(?P<id>P?\\d+)'
  7722. _RETURN_TYPE = 'playlist'
  7723. class SBSCoKrIE(LazyLoadExtractor):
  7724. _module = 'yt_dlp.extractor.sbscokr'
  7725. IE_NAME = 'sbs.co.kr'
  7726. _VALID_URL = ['https?://allvod\\.sbs\\.co\\.kr/allvod/vod(?:Package)?EndPage\\.do\\?(?:[^#]+&)?mdaId=(?P<id>\\d+)', 'https?://programs\\.sbs\\.co\\.kr/(?:enter|drama|culture|sports|plus|mtv|kth)/[a-z0-9]+/(?:vod|clip|movie)/\\d+/(?P<id>(?:OC)?\\d+)']
  7727. age_limit = 15
  7728. _RETURN_TYPE = 'video'
  7729. class SBSCoKrProgramsVodIE(LazyLoadExtractor):
  7730. _module = 'yt_dlp.extractor.sbscokr'
  7731. IE_NAME = 'sbs.co.kr:programs_vod'
  7732. _VALID_URL = 'https?://programs\\.sbs\\.co\\.kr/(?:enter|drama|culture|sports|plus|mtv)/(?P<id>[a-z0-9]+)/vods'
  7733. _RETURN_TYPE = 'playlist'
  7734. class Screen9IE(LazyLoadExtractor):
  7735. _module = 'yt_dlp.extractor.screen9'
  7736. IE_NAME = 'Screen9'
  7737. _VALID_URL = 'https?://(?:\\w+\\.screen9\\.(?:tv|com)|play\\.su\\.se)/(?:embed|media)/(?P<id>[^?#/]+)'
  7738. _RETURN_TYPE = 'video'
  7739. class ScreencastIE(LazyLoadExtractor):
  7740. _module = 'yt_dlp.extractor.screencast'
  7741. IE_NAME = 'Screencast'
  7742. _VALID_URL = 'https?://(?:www\\.)?screencast\\.com/t/(?P<id>[a-zA-Z0-9]+)'
  7743. _RETURN_TYPE = 'video'
  7744. class ScreencastifyIE(LazyLoadExtractor):
  7745. _module = 'yt_dlp.extractor.screencastify'
  7746. IE_NAME = 'Screencastify'
  7747. _VALID_URL = ['https?://watch\\.screencastify\\.com/v/(?P<id>[^/?#]+)', 'https?://app\\.screencastify\\.com/v[23]/watch/(?P<id>[^/?#]+)']
  7748. _RETURN_TYPE = 'video'
  7749. class ScreencastOMaticIE(LazyLoadExtractor):
  7750. _module = 'yt_dlp.extractor.screencastomatic'
  7751. IE_NAME = 'ScreencastOMatic'
  7752. _VALID_URL = 'https?://screencast-o-matic\\.com/(?:(?:watch|player)/|embed\\?.*?\\bsc=)(?P<id>[0-9a-zA-Z]+)'
  7753. _RETURN_TYPE = 'video'
  7754. class ScreenRecIE(LazyLoadExtractor):
  7755. _module = 'yt_dlp.extractor.screenrec'
  7756. IE_NAME = 'ScreenRec'
  7757. _VALID_URL = 'https?://(?:www\\.)?screenrec\\.com/share/(?P<id>\\w{10})'
  7758. _RETURN_TYPE = 'video'
  7759. class ScrippsNetworksIE(LazyLoadExtractor):
  7760. _module = 'yt_dlp.extractor.scrippsnetworks'
  7761. IE_NAME = 'ScrippsNetworks'
  7762. _VALID_URL = 'https?://(?:www\\.)?(?P<site>cookingchanneltv|discovery|(?:diy|food)network|hgtv|travelchannel)\\.com/videos/[0-9a-z-]+-(?P<id>\\d+)'
  7763. _RETURN_TYPE = 'video'
  7764. class AWSIE(LazyLoadExtractor):
  7765. _module = 'yt_dlp.extractor.aws'
  7766. IE_NAME = 'AWS'
  7767. class ScrippsNetworksWatchIE(AWSIE):
  7768. _module = 'yt_dlp.extractor.scrippsnetworks'
  7769. IE_NAME = 'scrippsnetworks:watch'
  7770. _VALID_URL = '(?x)\n https?://\n watch\\.\n (?P<site>geniuskitchen)\\.com/\n (?:\n player\\.[A-Z0-9]+\\.html\\#|\n show/(?:[^/]+/){2}|\n player/\n )\n (?P<id>\\d+)\n '
  7771. _RETURN_TYPE = 'video'
  7772. class ScrolllerIE(LazyLoadExtractor):
  7773. _module = 'yt_dlp.extractor.scrolller'
  7774. IE_NAME = 'Scrolller'
  7775. _VALID_URL = 'https?://(?:www\\.)?scrolller\\.com/(?P<id>[\\w-]+)'
  7776. age_limit = 18
  7777. _RETURN_TYPE = 'video'
  7778. class SCTEBaseIE(LazyLoadExtractor):
  7779. _module = 'yt_dlp.extractor.scte'
  7780. IE_NAME = 'SCTEBase'
  7781. _NETRC_MACHINE = 'scte'
  7782. class SCTEIE(SCTEBaseIE):
  7783. _module = 'yt_dlp.extractor.scte'
  7784. IE_NAME = 'SCTE'
  7785. _VALID_URL = 'https?://learning\\.scte\\.org/mod/scorm/view\\.php?.*?\\bid=(?P<id>\\d+)'
  7786. _WORKING = False
  7787. _NETRC_MACHINE = 'scte'
  7788. _RETURN_TYPE = 'playlist'
  7789. class SCTECourseIE(SCTEBaseIE):
  7790. _module = 'yt_dlp.extractor.scte'
  7791. IE_NAME = 'SCTECourse'
  7792. _VALID_URL = 'https?://learning\\.scte\\.org/(?:mod/sub)?course/view\\.php?.*?\\bid=(?P<id>\\d+)'
  7793. _WORKING = False
  7794. _NETRC_MACHINE = 'scte'
  7795. class SejmIE(LazyLoadExtractor):
  7796. _module = 'yt_dlp.extractor.sejmpl'
  7797. IE_NAME = 'sejm'
  7798. _VALID_URL = ('https?://(?:www\\.)?sejm\\.gov\\.pl/[Ss]ejm(?P<term>\\d+)\\.nsf/transmisje(?:_arch)?\\.xsp(?:\\?[^#]*)?#(?P<id>[\\dA-F]+)', 'https?://(?:www\\.)?sejm\\.gov\\.pl/[Ss]ejm(?P<term>\\d+)\\.nsf/transmisje(?:_arch)?\\.xsp\\?(?:[^#]+&)?unid=(?P<id>[\\dA-F]+)', 'https?://sejm-embed\\.redcdn\\.pl/[Ss]ejm(?P<term>\\d+)\\.nsf/VideoFrame\\.xsp/(?P<id>[\\dA-F]+)')
  7799. _RETURN_TYPE = 'playlist'
  7800. class SenIE(LazyLoadExtractor):
  7801. _module = 'yt_dlp.extractor.sen'
  7802. IE_NAME = 'Sen'
  7803. _VALID_URL = 'https?://(?:www\\.)?sen\\.com/video/(?P<id>[0-9a-f-]+)'
  7804. _RETURN_TYPE = 'video'
  7805. class SenalColombiaLiveIE(LazyLoadExtractor):
  7806. _module = 'yt_dlp.extractor.senalcolombia'
  7807. IE_NAME = 'SenalColombiaLive'
  7808. _VALID_URL = 'https?://(?:www\\.)?senalcolombia\\.tv/(?P<id>senal-en-vivo)'
  7809. _WORKING = False
  7810. _RETURN_TYPE = 'video'
  7811. class SenateGovIE(LazyLoadExtractor):
  7812. _module = 'yt_dlp.extractor.senategov'
  7813. IE_NAME = 'SenateGov'
  7814. _VALID_URL = 'https?:\\/\\/(?:www\\.)?(help|appropriations|judiciary|banking|armed-services|finance)\\.senate\\.gov'
  7815. _RETURN_TYPE = 'video'
  7816. class SenateISVPIE(LazyLoadExtractor):
  7817. _module = 'yt_dlp.extractor.senategov'
  7818. IE_NAME = 'SenateISVP'
  7819. _VALID_URL = 'https?://(?:www\\.)?senate\\.gov/isvp/?\\?(?P<qs>.+)'
  7820. _RETURN_TYPE = 'video'
  7821. class SendtoNewsIE(LazyLoadExtractor):
  7822. _module = 'yt_dlp.extractor.sendtonews'
  7823. IE_NAME = 'SendtoNews'
  7824. _VALID_URL = 'https?://embed\\.sendtonews\\.com/player2/embedplayer\\.php\\?.*\\bSC=(?P<id>[0-9A-Za-z-]+)'
  7825. _WORKING = False
  7826. _RETURN_TYPE = 'playlist'
  7827. class ServusIE(LazyLoadExtractor):
  7828. _module = 'yt_dlp.extractor.servus'
  7829. IE_NAME = 'Servus'
  7830. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?\n (?:\n servus\\.com/(?:(?:at|de)/p/[^/]+|tv/videos)|\n (?:servustv|pm-wissen)\\.com/(?:[^/]+/)?v(?:ideos)?\n )\n /(?P<id>[aA]{2}-?\\w+|\\d+-\\d+)\n '
  7831. _RETURN_TYPE = 'video'
  7832. class SevenPlusIE(BrightcoveNewBaseIE):
  7833. _module = 'yt_dlp.extractor.sevenplus'
  7834. IE_NAME = '7plus'
  7835. _VALID_URL = 'https?://(?:www\\.)?7plus\\.com\\.au/(?P<path>[^?]+\\?.*?\\bepisode-id=(?P<id>[^&#]+))'
  7836. _RETURN_TYPE = 'video'
  7837. class SexuIE(LazyLoadExtractor):
  7838. _module = 'yt_dlp.extractor.sexu'
  7839. IE_NAME = 'Sexu'
  7840. _VALID_URL = 'https?://(?:www\\.)?sexu\\.com/(?P<id>\\d+)'
  7841. _WORKING = False
  7842. age_limit = 18
  7843. _RETURN_TYPE = 'video'
  7844. class SeznamZpravyArticleIE(LazyLoadExtractor):
  7845. _module = 'yt_dlp.extractor.seznamzpravy'
  7846. IE_NAME = 'SeznamZpravyArticle'
  7847. _VALID_URL = 'https?://(?:www\\.)?(?:seznam\\.cz/zpravy|seznamzpravy\\.cz)/clanek/(?:[^/?#&]+)-(?P<id>\\d+)'
  7848. _RETURN_TYPE = 'playlist'
  7849. class SeznamZpravyIE(LazyLoadExtractor):
  7850. _module = 'yt_dlp.extractor.seznamzpravy'
  7851. IE_NAME = 'SeznamZpravy'
  7852. _VALID_URL = 'https?://(?:www\\.)?seznamzpravy\\.cz/iframe/player\\?.*\\bsrc='
  7853. _RETURN_TYPE = 'video'
  7854. class ShahidBaseIE(AWSIE):
  7855. _module = 'yt_dlp.extractor.shahid'
  7856. IE_NAME = 'ShahidBase'
  7857. class ShahidIE(ShahidBaseIE):
  7858. _module = 'yt_dlp.extractor.shahid'
  7859. IE_NAME = 'Shahid'
  7860. _VALID_URL = 'https?://shahid\\.mbc\\.net/[a-z]{2}/(?:serie|show|movie)s/[^/]+/(?P<type>episode|clip|movie)-(?P<id>\\d+)'
  7861. _NETRC_MACHINE = 'shahid'
  7862. _RETURN_TYPE = 'video'
  7863. class ShahidShowIE(ShahidBaseIE):
  7864. _module = 'yt_dlp.extractor.shahid'
  7865. IE_NAME = 'ShahidShow'
  7866. _VALID_URL = 'https?://shahid\\.mbc\\.net/[a-z]{2}/(?:show|serie)s/[^/]+/(?:show|series)-(?P<id>\\d+)'
  7867. _RETURN_TYPE = 'playlist'
  7868. class SharePointIE(LazyLoadExtractor):
  7869. _module = 'yt_dlp.extractor.sharepoint'
  7870. IE_NAME = 'SharePoint'
  7871. _VALID_URL = ['https?://[\\w-]+\\.sharepoint\\.com/:v:/[a-z]/(?:[^/?#]+/)*(?P<id>[^/?#]{46})/?(?:$|[?#])', 'https?://[\\w-]+\\.sharepoint\\.com/(?!:v:)(?:[^/?#]+/)*stream\\.aspx\\?(?:[^#]+&)?id=(?P<id>[^&#]+)']
  7872. _RETURN_TYPE = 'video'
  7873. class ShareVideosEmbedIE(LazyLoadExtractor):
  7874. _module = 'yt_dlp.extractor.sharevideos'
  7875. IE_NAME = 'ShareVideosEmbed'
  7876. _VALID_URL = False
  7877. class ShemarooMeIE(LazyLoadExtractor):
  7878. _module = 'yt_dlp.extractor.shemaroome'
  7879. IE_NAME = 'ShemarooMe'
  7880. _VALID_URL = 'https?://(?:www\\.)?shemaroome\\.com/(?:movies|shows)/(?P<id>[^?#]+)'
  7881. _RETURN_TYPE = 'video'
  7882. class ShowRoomLiveIE(LazyLoadExtractor):
  7883. _module = 'yt_dlp.extractor.showroomlive'
  7884. IE_NAME = 'ShowRoomLive'
  7885. _VALID_URL = 'https?://(?:www\\.)?showroom-live\\.com/(?!onlive|timetable|event|campaign|news|ranking|room)(?P<id>[^/?#&]+)'
  7886. class SibnetEmbedIE(LazyLoadExtractor):
  7887. _module = 'yt_dlp.extractor.sibnet'
  7888. IE_NAME = 'SibnetEmbed'
  7889. _VALID_URL = False
  7890. class SimplecastBaseIE(LazyLoadExtractor):
  7891. _module = 'yt_dlp.extractor.simplecast'
  7892. IE_NAME = 'SimplecastBase'
  7893. class SimplecastEpisodeIE(SimplecastBaseIE):
  7894. _module = 'yt_dlp.extractor.simplecast'
  7895. IE_NAME = 'simplecast:episode'
  7896. _VALID_URL = 'https?://(?!api\\.)[^/]+\\.simplecast\\.com/episodes/(?P<id>[^/?&#]+)'
  7897. _RETURN_TYPE = 'video'
  7898. class SimplecastIE(SimplecastBaseIE):
  7899. _module = 'yt_dlp.extractor.simplecast'
  7900. IE_NAME = 'simplecast'
  7901. _VALID_URL = 'https?://(?:api\\.simplecast\\.com/episodes|player\\.simplecast\\.com)/(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})'
  7902. _RETURN_TYPE = 'video'
  7903. class SimplecastPodcastIE(SimplecastBaseIE):
  7904. _module = 'yt_dlp.extractor.simplecast'
  7905. IE_NAME = 'simplecast:podcast'
  7906. _VALID_URL = 'https?://(?!(?:api|cdn|embed|feeds|player)\\.)(?P<id>[^/]+)\\.simplecast\\.com(?!/episodes/[^/?&#]+)'
  7907. _RETURN_TYPE = 'playlist'
  7908. class SinaIE(LazyLoadExtractor):
  7909. _module = 'yt_dlp.extractor.sina'
  7910. IE_NAME = 'Sina'
  7911. _VALID_URL = '(?x)https?://(?:[^/?#]+\\.)?video\\.sina\\.com\\.cn/\n (?:\n (?:view/|.*\\#)(?P<id>\\d+)|\n .+?/(?P<pseudo_id>[^/?#]+)(?:\\.s?html)|\n # This is used by external sites like Weibo\n api/sinawebApi/outplay.php/(?P<token>.+?)\\.swf\n )\n '
  7912. _RETURN_TYPE = 'video'
  7913. class SixPlayIE(LazyLoadExtractor):
  7914. _module = 'yt_dlp.extractor.sixplay'
  7915. IE_NAME = '6play'
  7916. _VALID_URL = '(?:6play:|https?://(?:www\\.)?(?P<domain>6play\\.fr|rtlplay\\.be|play\\.rtl\\.hr|rtlmost\\.hu)/.+?-c_)(?P<id>[0-9]+)'
  7917. _RETURN_TYPE = 'video'
  7918. class SkebIE(LazyLoadExtractor):
  7919. _module = 'yt_dlp.extractor.skeb'
  7920. IE_NAME = 'Skeb'
  7921. _VALID_URL = 'https?://skeb\\.jp/@[^/]+/works/(?P<id>\\d+)'
  7922. _RETURN_TYPE = 'video'
  7923. class SkyBaseIE(LazyLoadExtractor):
  7924. _module = 'yt_dlp.extractor.sky'
  7925. IE_NAME = 'SkyBase'
  7926. class SkyNewsIE(SkyBaseIE):
  7927. _module = 'yt_dlp.extractor.sky'
  7928. IE_NAME = 'sky:news'
  7929. _VALID_URL = 'https?://news\\.sky\\.com/video/[0-9a-z-]+-(?P<id>[0-9]+)'
  7930. _RETURN_TYPE = 'video'
  7931. class SkyNewsStoryIE(SkyBaseIE):
  7932. _module = 'yt_dlp.extractor.sky'
  7933. IE_NAME = 'sky:news:story'
  7934. _VALID_URL = 'https?://news\\.sky\\.com/story/[0-9a-z-]+-(?P<id>[0-9]+)'
  7935. _RETURN_TYPE = 'video'
  7936. class SkySportsIE(SkyBaseIE):
  7937. _module = 'yt_dlp.extractor.sky'
  7938. IE_NAME = 'sky:sports'
  7939. _VALID_URL = 'https?://(?:www\\.)?skysports\\.com/watch/video/([^/]+/)*(?P<id>[0-9]+)'
  7940. _RETURN_TYPE = 'video'
  7941. class SkySportsNewsIE(SkyBaseIE):
  7942. _module = 'yt_dlp.extractor.sky'
  7943. IE_NAME = 'sky:sports:news'
  7944. _VALID_URL = 'https?://(?:www\\.)?skysports\\.com/([^/]+/)*news/\\d+/(?P<id>\\d+)'
  7945. _RETURN_TYPE = 'playlist'
  7946. class SkyItPlayerIE(LazyLoadExtractor):
  7947. _module = 'yt_dlp.extractor.skyit'
  7948. IE_NAME = 'player.sky.it'
  7949. _VALID_URL = 'https?://player\\.sky\\.it/player/(?:external|social)\\.html\\?.*?\\bid=(?P<id>\\d+)'
  7950. class SkyItIE(SkyItPlayerIE):
  7951. _module = 'yt_dlp.extractor.skyit'
  7952. IE_NAME = 'sky.it'
  7953. _VALID_URL = 'https?://(?:sport|tg24)\\.sky\\.it(?:/[^/]+)*/\\d{4}/\\d{2}/\\d{2}/(?P<id>[^/?&#]+)'
  7954. _RETURN_TYPE = 'video'
  7955. class CieloTVItIE(SkyItIE):
  7956. _module = 'yt_dlp.extractor.skyit'
  7957. IE_NAME = 'cielotv.it'
  7958. _VALID_URL = 'https?://(?:www\\.)?cielotv\\.it/video/(?P<id>[^.]+)\\.html'
  7959. _RETURN_TYPE = 'video'
  7960. class SkyItArteIE(SkyItIE):
  7961. _module = 'yt_dlp.extractor.skyit'
  7962. IE_NAME = 'arte.sky.it'
  7963. _VALID_URL = 'https?://arte\\.sky\\.it/video/(?P<id>[^/?&#]+)'
  7964. _RETURN_TYPE = 'video'
  7965. class SkyItVideoIE(SkyItPlayerIE):
  7966. _module = 'yt_dlp.extractor.skyit'
  7967. IE_NAME = 'video.sky.it'
  7968. _VALID_URL = 'https?://(?:masterchef|video|xfactor)\\.sky\\.it(?:/[^/]+)*/video/[0-9a-z-]+-(?P<id>\\d+)'
  7969. _RETURN_TYPE = 'video'
  7970. class SkyItVideoLiveIE(SkyItPlayerIE):
  7971. _module = 'yt_dlp.extractor.skyit'
  7972. IE_NAME = 'video.sky.it:live'
  7973. _VALID_URL = 'https?://video\\.sky\\.it/diretta/(?P<id>[^/?&#]+)'
  7974. _RETURN_TYPE = 'video'
  7975. class TV8ItIE(SkyItVideoIE):
  7976. _module = 'yt_dlp.extractor.skyit'
  7977. IE_NAME = 'tv8.it'
  7978. _VALID_URL = 'https?://(?:www\\.)?tv8\\.it/(?:show)?video/[0-9a-z-]+-(?P<id>\\d+)'
  7979. _RETURN_TYPE = 'video'
  7980. class SkylineWebcamsIE(LazyLoadExtractor):
  7981. _module = 'yt_dlp.extractor.skylinewebcams'
  7982. IE_NAME = 'SkylineWebcams'
  7983. _VALID_URL = 'https?://(?:www\\.)?skylinewebcams\\.com/[^/]+/webcam/(?:[^/]+/)+(?P<id>[^/]+)\\.html'
  7984. _WORKING = False
  7985. _RETURN_TYPE = 'video'
  7986. class SkyNewsArabiaBaseIE(LazyLoadExtractor):
  7987. _module = 'yt_dlp.extractor.skynewsarabia'
  7988. IE_NAME = 'SkyNewsArabiaBase'
  7989. class SkyNewsArabiaArticleIE(SkyNewsArabiaBaseIE):
  7990. _module = 'yt_dlp.extractor.skynewsarabia'
  7991. IE_NAME = 'skynewsarabia:article'
  7992. _VALID_URL = 'https?://(?:www\\.)?skynewsarabia\\.com/web/article/(?P<id>[0-9]+)'
  7993. _WORKING = False
  7994. _RETURN_TYPE = 'any'
  7995. class SkyNewsArabiaIE(SkyNewsArabiaBaseIE):
  7996. _module = 'yt_dlp.extractor.skynewsarabia'
  7997. IE_NAME = 'skynewsarabia:video'
  7998. _VALID_URL = 'https?://(?:www\\.)?skynewsarabia\\.com/web/video/(?P<id>[0-9]+)'
  7999. _WORKING = False
  8000. _RETURN_TYPE = 'video'
  8001. class SkyNewsAUIE(LazyLoadExtractor):
  8002. _module = 'yt_dlp.extractor.skynewsau'
  8003. IE_NAME = 'SkyNewsAU'
  8004. _VALID_URL = 'https?://(?:www\\.)?skynews\\.com\\.au/[^/]+/[^/]+/[^/]+/video/(?P<id>[a-z0-9]+)'
  8005. _RETURN_TYPE = 'video'
  8006. class SlideshareIE(LazyLoadExtractor):
  8007. _module = 'yt_dlp.extractor.slideshare'
  8008. IE_NAME = 'Slideshare'
  8009. _VALID_URL = 'https?://(?:www\\.)?slideshare\\.net/[^/]+?/(?P<title>.+?)($|\\?)'
  8010. _RETURN_TYPE = 'video'
  8011. class SlidesLiveIE(LazyLoadExtractor):
  8012. _module = 'yt_dlp.extractor.slideslive'
  8013. IE_NAME = 'SlidesLive'
  8014. _VALID_URL = 'https?://slideslive\\.com/(?:embed/(?:presentation/)?)?(?P<id>[0-9]+)'
  8015. _RETURN_TYPE = 'any'
  8016. class SlutloadIE(LazyLoadExtractor):
  8017. _module = 'yt_dlp.extractor.slutload'
  8018. IE_NAME = 'Slutload'
  8019. _VALID_URL = 'https?://(?:\\w+\\.)?slutload\\.com/(?:video/[^/]+|embed_player|watch)/(?P<id>[^/]+)'
  8020. age_limit = 18
  8021. _RETURN_TYPE = 'video'
  8022. class SmotrimIE(LazyLoadExtractor):
  8023. _module = 'yt_dlp.extractor.smotrim'
  8024. IE_NAME = 'Smotrim'
  8025. _VALID_URL = 'https?://smotrim\\.ru/(?P<type>brand|video|article|live)/(?P<id>[0-9]+)'
  8026. _RETURN_TYPE = 'video'
  8027. class SnapchatSpotlightIE(LazyLoadExtractor):
  8028. _module = 'yt_dlp.extractor.snapchat'
  8029. IE_NAME = 'SnapchatSpotlight'
  8030. _VALID_URL = 'https?://(?:www\\.)?snapchat\\.com/spotlight/(?P<id>\\w+)'
  8031. _RETURN_TYPE = 'video'
  8032. class SnotrIE(LazyLoadExtractor):
  8033. _module = 'yt_dlp.extractor.snotr'
  8034. IE_NAME = 'Snotr'
  8035. _VALID_URL = 'http?://(?:www\\.)?snotr\\.com/video/(?P<id>\\d+)/([\\w]+)'
  8036. _RETURN_TYPE = 'video'
  8037. class SohuIE(LazyLoadExtractor):
  8038. _module = 'yt_dlp.extractor.sohu'
  8039. IE_NAME = 'Sohu'
  8040. _VALID_URL = 'https?://(?P<mytv>my\\.)?tv\\.sohu\\.com/.+?/(?(mytv)|n)(?P<id>\\d+)\\.shtml.*?'
  8041. _RETURN_TYPE = 'any'
  8042. class SohuVIE(LazyLoadExtractor):
  8043. _module = 'yt_dlp.extractor.sohu'
  8044. IE_NAME = 'SohuV'
  8045. _VALID_URL = 'https?://tv\\.sohu\\.com/v/(?P<id>[\\w=-]+)\\.html(?:$|[#?])'
  8046. _RETURN_TYPE = 'any'
  8047. class SonyLIVIE(LazyLoadExtractor):
  8048. _module = 'yt_dlp.extractor.sonyliv'
  8049. IE_NAME = 'SonyLIV'
  8050. _VALID_URL = '(?x)\n (?:\n sonyliv:|\n https?://(?:www\\.)?sonyliv\\.com/(?:s(?:how|port)s/[^/]+|movies|clip|trailer|music-videos)/[^/?#&]+-\n )\n (?P<id>\\d+)\n '
  8051. _NETRC_MACHINE = 'sonyliv'
  8052. _RETURN_TYPE = 'video'
  8053. class SonyLIVSeriesIE(LazyLoadExtractor):
  8054. _module = 'yt_dlp.extractor.sonyliv'
  8055. IE_NAME = 'SonyLIVSeries'
  8056. _VALID_URL = 'https?://(?:www\\.)?sonyliv\\.com/shows/[^/?#&]+-(?P<id>\\d{10})/?(?:$|[?#])'
  8057. _RETURN_TYPE = 'playlist'
  8058. class SoundcloudEmbedIE(LazyLoadExtractor):
  8059. _module = 'yt_dlp.extractor.soundcloud'
  8060. IE_NAME = 'SoundcloudEmbed'
  8061. _VALID_URL = 'https?://(?:w|player|p)\\.soundcloud\\.com/player/?.*?\\burl=(?P<id>.+)'
  8062. class SoundcloudBaseIE(LazyLoadExtractor):
  8063. _module = 'yt_dlp.extractor.soundcloud'
  8064. IE_NAME = 'SoundcloudBase'
  8065. _NETRC_MACHINE = 'soundcloud'
  8066. class SoundcloudIE(SoundcloudBaseIE):
  8067. _module = 'yt_dlp.extractor.soundcloud'
  8068. IE_NAME = 'soundcloud'
  8069. _VALID_URL = '(?x)^(?:https?://)?\n (?:(?:(?:www\\.|m\\.)?soundcloud\\.com/\n (?!stations/track)\n (?P<uploader>[\\w\\d-]+)/\n (?!(?:tracks|albums|sets(?:/.+?)?|reposts|likes|spotlight)/?(?:$|[?#]))\n (?P<title>[\\w\\d-]+)\n (?:/(?P<token>(?!(?:albums|sets|recommended))[^?]+?))?\n (?:[?].*)?$)\n |(?:api(?:-v2)?\\.soundcloud\\.com/tracks/(?P<track_id>\\d+)\n (?:/?\\?secret_token=(?P<secret_token>[^&]+))?)\n )\n '
  8070. _NETRC_MACHINE = 'soundcloud'
  8071. _RETURN_TYPE = 'video'
  8072. class SoundcloudPlaylistBaseIE(SoundcloudBaseIE):
  8073. _module = 'yt_dlp.extractor.soundcloud'
  8074. IE_NAME = 'SoundcloudPlaylistBase'
  8075. _NETRC_MACHINE = 'soundcloud'
  8076. class SoundcloudPlaylistIE(SoundcloudPlaylistBaseIE):
  8077. _module = 'yt_dlp.extractor.soundcloud'
  8078. IE_NAME = 'soundcloud:playlist'
  8079. _VALID_URL = 'https?://api(?:-v2)?\\.soundcloud\\.com/playlists/(?P<id>[0-9]+)(?:/?\\?secret_token=(?P<token>[^&]+?))?$'
  8080. _NETRC_MACHINE = 'soundcloud'
  8081. _RETURN_TYPE = 'playlist'
  8082. class SoundcloudPagedPlaylistBaseIE(SoundcloudBaseIE):
  8083. _module = 'yt_dlp.extractor.soundcloud'
  8084. IE_NAME = 'SoundcloudPagedPlaylistBase'
  8085. _NETRC_MACHINE = 'soundcloud'
  8086. class SoundcloudRelatedIE(SoundcloudPagedPlaylistBaseIE):
  8087. _module = 'yt_dlp.extractor.soundcloud'
  8088. IE_NAME = 'soundcloud:related'
  8089. _VALID_URL = 'https?://(?:(?:www|m)\\.)?soundcloud\\.com/(?P<slug>[\\w\\d-]+/[\\w\\d-]+)/(?P<relation>albums|sets|recommended)'
  8090. _NETRC_MACHINE = 'soundcloud'
  8091. _RETURN_TYPE = 'playlist'
  8092. class SoundcloudSearchIE(SoundcloudBaseIE, LazyLoadSearchExtractor):
  8093. _module = 'yt_dlp.extractor.soundcloud'
  8094. IE_NAME = 'soundcloud:search'
  8095. _VALID_URL = 'scsearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  8096. IE_DESC = 'Soundcloud search'
  8097. _NETRC_MACHINE = 'soundcloud'
  8098. SEARCH_KEY = 'scsearch'
  8099. _RETURN_TYPE = 'playlist'
  8100. class SoundcloudSetIE(SoundcloudPlaylistBaseIE):
  8101. _module = 'yt_dlp.extractor.soundcloud'
  8102. IE_NAME = 'soundcloud:set'
  8103. _VALID_URL = 'https?://(?:(?:www|m)\\.)?soundcloud\\.com/(?P<uploader>[\\w\\d-]+)/sets/(?P<slug_title>[:\\w\\d-]+)(?:/(?P<token>[^?/]+))?'
  8104. _NETRC_MACHINE = 'soundcloud'
  8105. _RETURN_TYPE = 'playlist'
  8106. class SoundcloudTrackStationIE(SoundcloudPagedPlaylistBaseIE):
  8107. _module = 'yt_dlp.extractor.soundcloud'
  8108. IE_NAME = 'soundcloud:trackstation'
  8109. _VALID_URL = 'https?://(?:(?:www|m)\\.)?soundcloud\\.com/stations/track/[^/]+/(?P<id>[^/?#&]+)'
  8110. _NETRC_MACHINE = 'soundcloud'
  8111. _RETURN_TYPE = 'playlist'
  8112. class SoundcloudUserIE(SoundcloudPagedPlaylistBaseIE):
  8113. _module = 'yt_dlp.extractor.soundcloud'
  8114. IE_NAME = 'soundcloud:user'
  8115. _VALID_URL = '(?x)\n https?://\n (?:(?:www|m)\\.)?soundcloud\\.com/\n (?P<user>[^/]+)\n (?:/\n (?P<rsrc>tracks|albums|sets|reposts|likes|spotlight)\n )?\n /?(?:[?#].*)?$\n '
  8116. _NETRC_MACHINE = 'soundcloud'
  8117. _RETURN_TYPE = 'playlist'
  8118. class SoundcloudUserPermalinkIE(SoundcloudPagedPlaylistBaseIE):
  8119. _module = 'yt_dlp.extractor.soundcloud'
  8120. IE_NAME = 'soundcloud:user:permalink'
  8121. _VALID_URL = 'https?://api\\.soundcloud\\.com/users/(?P<id>\\d+)'
  8122. _NETRC_MACHINE = 'soundcloud'
  8123. _RETURN_TYPE = 'playlist'
  8124. class SoundgasmIE(LazyLoadExtractor):
  8125. _module = 'yt_dlp.extractor.soundgasm'
  8126. IE_NAME = 'soundgasm'
  8127. _VALID_URL = 'https?://(?:www\\.)?soundgasm\\.net/u/(?P<user>[0-9a-zA-Z_-]+)/(?P<display_id>[0-9a-zA-Z_-]+)'
  8128. _RETURN_TYPE = 'video'
  8129. class SoundgasmProfileIE(LazyLoadExtractor):
  8130. _module = 'yt_dlp.extractor.soundgasm'
  8131. IE_NAME = 'soundgasm:profile'
  8132. _VALID_URL = 'https?://(?:www\\.)?soundgasm\\.net/u/(?P<id>[^/]+)/?(?:\\#.*)?$'
  8133. _RETURN_TYPE = 'playlist'
  8134. class SouthParkIE(MTVServicesInfoExtractor):
  8135. _module = 'yt_dlp.extractor.southpark'
  8136. IE_NAME = 'southpark.cc.com'
  8137. _VALID_URL = 'https?://(?:www\\.)?(?P<url>southpark(?:\\.cc|studios)\\.com/((?:video-)?clips|(?:full-)?episodes|collections)/(?P<id>.+?)(\\?|#|$))'
  8138. _RETURN_TYPE = 'video'
  8139. class SouthParkDeIE(SouthParkIE):
  8140. _module = 'yt_dlp.extractor.southpark'
  8141. IE_NAME = 'southpark.de'
  8142. _VALID_URL = 'https?://(?:www\\.)?(?P<url>southpark\\.de/(?:(en/(videoclip|collections|episodes|video-clips))|(videoclip|collections|folgen))/(?P<id>(?P<unique_id>.+?)/.+?)(?:\\?|#|$))'
  8143. _RETURN_TYPE = 'video'
  8144. class SouthParkDkIE(SouthParkIE):
  8145. _module = 'yt_dlp.extractor.southpark'
  8146. IE_NAME = 'southparkstudios.dk'
  8147. _VALID_URL = 'https?://(?:www\\.)?(?P<url>southparkstudios\\.(?:dk|nu)/(?:clips|full-episodes|collections)/(?P<id>.+?)(\\?|#|$))'
  8148. _RETURN_TYPE = 'playlist'
  8149. class SouthParkEsIE(SouthParkIE):
  8150. _module = 'yt_dlp.extractor.southpark'
  8151. IE_NAME = 'southpark.cc.com:español'
  8152. _VALID_URL = 'https?://(?:www\\.)?(?P<url>southpark\\.cc\\.com/es/episodios/(?P<id>.+?)(\\?|#|$))'
  8153. _RETURN_TYPE = 'playlist'
  8154. class SouthParkLatIE(SouthParkIE):
  8155. _module = 'yt_dlp.extractor.southpark'
  8156. IE_NAME = 'southpark.lat'
  8157. _VALID_URL = 'https?://(?:www\\.)?southpark\\.lat/(?:en/)?(?:video-?clips?|collections|episod(?:e|io)s)/(?P<id>[^/?#&]+)'
  8158. _RETURN_TYPE = 'video'
  8159. class SouthParkNlIE(SouthParkIE):
  8160. _module = 'yt_dlp.extractor.southpark'
  8161. IE_NAME = 'southpark.nl'
  8162. _VALID_URL = 'https?://(?:www\\.)?(?P<url>southpark\\.nl/(?:clips|(?:full-)?episodes|collections)/(?P<id>.+?)(\\?|#|$))'
  8163. _RETURN_TYPE = 'playlist'
  8164. class SovietsClosetBaseIE(LazyLoadExtractor):
  8165. _module = 'yt_dlp.extractor.sovietscloset'
  8166. IE_NAME = 'SovietsClosetBase'
  8167. class SovietsClosetIE(SovietsClosetBaseIE):
  8168. _module = 'yt_dlp.extractor.sovietscloset'
  8169. IE_NAME = 'SovietsCloset'
  8170. _VALID_URL = 'https?://(?:www\\.)?sovietscloset\\.com/video/(?P<id>[0-9]+)/?'
  8171. _RETURN_TYPE = 'video'
  8172. class SovietsClosetPlaylistIE(SovietsClosetBaseIE):
  8173. _module = 'yt_dlp.extractor.sovietscloset'
  8174. IE_NAME = 'SovietsClosetPlaylist'
  8175. _VALID_URL = 'https?://(?:www\\.)?sovietscloset\\.com/(?!video)(?P<id>[^#?]+)'
  8176. _RETURN_TYPE = 'playlist'
  8177. class SpankBangIE(LazyLoadExtractor):
  8178. _module = 'yt_dlp.extractor.spankbang'
  8179. IE_NAME = 'SpankBang'
  8180. _VALID_URL = '(?x)\n https?://\n (?:[^/]+\\.)?spankbang\\.com/\n (?:\n (?P<id>[\\da-z]+)/(?:video|play|embed)\\b|\n [\\da-z]+-(?P<id_2>[\\da-z]+)/playlist/[^/?#&]+\n )\n '
  8181. age_limit = 18
  8182. _RETURN_TYPE = 'video'
  8183. class SpankBangPlaylistIE(LazyLoadExtractor):
  8184. _module = 'yt_dlp.extractor.spankbang'
  8185. IE_NAME = 'SpankBangPlaylist'
  8186. _VALID_URL = 'https?://(?:[^/]+\\.)?spankbang\\.com/(?P<id>[\\da-z]+)/playlist/(?P<display_id>[^/]+)'
  8187. _RETURN_TYPE = 'playlist'
  8188. class SpiegelIE(LazyLoadExtractor):
  8189. _module = 'yt_dlp.extractor.spiegel'
  8190. IE_NAME = 'Spiegel'
  8191. _VALID_URL = 'https?://(?:www\\.)?(?:spiegel|manager-magazin)\\.de(?:/[^/]+)+/[^/]*-(?P<id>[0-9]+|[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})(?:-embed|-iframe)?(?:\\.html)?(?:$|[#?])'
  8192. _RETURN_TYPE = 'video'
  8193. class BellatorIE(MTVServicesInfoExtractor):
  8194. _module = 'yt_dlp.extractor.spike'
  8195. IE_NAME = 'Bellator'
  8196. _VALID_URL = 'https?://(?:www\\.)?bellator\\.com/[^/]+/[\\da-z]{6}(?:[/?#&]|$)'
  8197. _RETURN_TYPE = 'playlist'
  8198. class ParamountNetworkIE(MTVServicesInfoExtractor):
  8199. _module = 'yt_dlp.extractor.spike'
  8200. IE_NAME = 'ParamountNetwork'
  8201. _VALID_URL = 'https?://(?:www\\.)?paramountnetwork\\.com/[^/]+/[\\da-z]{6}(?:[/?#&]|$)'
  8202. _RETURN_TYPE = 'video'
  8203. class Sport5IE(LazyLoadExtractor):
  8204. _module = 'yt_dlp.extractor.sport5'
  8205. IE_NAME = 'Sport5'
  8206. _VALID_URL = 'https?://(?:www|vod)?\\.sport5\\.co\\.il/.*\\b(?:Vi|docID)=(?P<id>\\d+)'
  8207. _RETURN_TYPE = 'video'
  8208. class SportBoxIE(LazyLoadExtractor):
  8209. _module = 'yt_dlp.extractor.sportbox'
  8210. IE_NAME = 'SportBox'
  8211. _VALID_URL = 'https?://(?:news\\.sportbox|matchtv)\\.ru/vdl/player(?:/[^/]+/|\\?.*?\\bn?id=)(?P<id>\\d+)'
  8212. _RETURN_TYPE = 'video'
  8213. class SportDeutschlandIE(LazyLoadExtractor):
  8214. _module = 'yt_dlp.extractor.sportdeutschland'
  8215. IE_NAME = 'SportDeutschland'
  8216. _VALID_URL = 'https?://sportdeutschland\\.tv/(?P<id>(?:[^/]+/)?[^?#/&]+)'
  8217. _RETURN_TYPE = 'any'
  8218. class SpotifyBaseIE(LazyLoadExtractor):
  8219. _module = 'yt_dlp.extractor.spotify'
  8220. IE_NAME = 'SpotifyBase'
  8221. _WORKING = False
  8222. class SpotifyIE(SpotifyBaseIE):
  8223. _module = 'yt_dlp.extractor.spotify'
  8224. IE_NAME = 'spotify'
  8225. _VALID_URL = 'https?://open\\.spotify\\.com/(?:embed-podcast/|embed/|)episode/(?P<id>[^/?&#]+)'
  8226. _WORKING = False
  8227. IE_DESC = 'Spotify episodes'
  8228. _RETURN_TYPE = 'video'
  8229. class SpotifyShowIE(SpotifyBaseIE):
  8230. _module = 'yt_dlp.extractor.spotify'
  8231. IE_NAME = 'spotify:show'
  8232. _VALID_URL = 'https?://open\\.spotify\\.com/(?:embed-podcast/|embed/|)show/(?P<id>[^/?&#]+)'
  8233. _WORKING = False
  8234. IE_DESC = 'Spotify shows'
  8235. _RETURN_TYPE = 'playlist'
  8236. class SpreakerIE(LazyLoadExtractor):
  8237. _module = 'yt_dlp.extractor.spreaker'
  8238. IE_NAME = 'Spreaker'
  8239. _VALID_URL = ['https?://api\\.spreaker\\.com/(?:(?:download/)?episode|v2/episodes)/(?P<id>\\d+)', 'https?://(?:www\\.)?spreaker\\.com/episode/[^#?/]*?(?P<id>\\d+)/?(?:[?#]|$)']
  8240. _RETURN_TYPE = 'video'
  8241. class SpreakerShowIE(LazyLoadExtractor):
  8242. _module = 'yt_dlp.extractor.spreaker'
  8243. IE_NAME = 'SpreakerShow'
  8244. _VALID_URL = ['https?://api\\.spreaker\\.com/show/(?P<id>\\d+)', 'https?://(?:www\\.)?spreaker\\.com/podcast/[\\w-]+--(?P<id>[\\d]+)', 'https?://(?:www\\.)?spreaker\\.com/show/(?P<id>\\d+)/episodes/feed']
  8245. _RETURN_TYPE = 'playlist'
  8246. class SpringboardPlatformIE(LazyLoadExtractor):
  8247. _module = 'yt_dlp.extractor.springboardplatform'
  8248. IE_NAME = 'SpringboardPlatform'
  8249. _VALID_URL = '(?x)\n https?://\n cms\\.springboardplatform\\.com/\n (?:\n (?:previews|embed_iframe)/(?P<index>\\d+)/video/(?P<id>\\d+)|\n xml_feeds_advanced/index/(?P<index_2>\\d+)/rss3/(?P<id_2>\\d+)\n )\n '
  8250. _RETURN_TYPE = 'video'
  8251. class SproutIE(AdobePassIE):
  8252. _module = 'yt_dlp.extractor.sprout'
  8253. IE_NAME = 'Sprout'
  8254. _VALID_URL = 'https?://(?:www\\.)?(?:sproutonline|universalkids)\\.com/(?:watch|(?:[^/]+/)*videos)/(?P<id>[^/?#]+)'
  8255. _RETURN_TYPE = 'video'
  8256. class SproutVideoIE(LazyLoadExtractor):
  8257. _module = 'yt_dlp.extractor.sproutvideo'
  8258. IE_NAME = 'SproutVideo'
  8259. _VALID_URL = 'https?://videos\\.sproutvideo\\.com/embed/(?P<id>[\\da-f]+)/[\\da-f]+'
  8260. _RETURN_TYPE = 'video'
  8261. class VidsIoIE(LazyLoadExtractor):
  8262. _module = 'yt_dlp.extractor.sproutvideo'
  8263. IE_NAME = 'vids.io'
  8264. _VALID_URL = 'https?://[\\w-]+\\.vids\\.io/videos/(?P<id>[\\da-f]+)/(?P<display_id>[\\w-]+)'
  8265. _RETURN_TYPE = 'video'
  8266. class SRGSSRIE(LazyLoadExtractor):
  8267. _module = 'yt_dlp.extractor.srgssr'
  8268. IE_NAME = 'SRGSSR'
  8269. _VALID_URL = '(?x)\n (?:\n https?://tp\\.srgssr\\.ch/p(?:/[^/]+)+\\?urn=urn|\n srgssr\n ):\n (?P<bu>\n srf|rts|rsi|rtr|swi\n ):(?:[^:]+:)?\n (?P<type>\n video|audio\n ):\n (?P<id>\n [0-9a-f\\-]{36}|\\d+\n )\n '
  8270. class RTSIE(SRGSSRIE):
  8271. _module = 'yt_dlp.extractor.rts'
  8272. IE_NAME = 'RTS'
  8273. _VALID_URL = 'rts:(?P<rts_id>\\d+)|https?://(?:.+?\\.)?rts\\.ch/(?:[^/]+/){2,}(?P<id>[0-9]+)-(?P<display_id>.+?)\\.html'
  8274. _WORKING = False
  8275. IE_DESC = 'RTS.ch'
  8276. _RETURN_TYPE = 'any'
  8277. class SRGSSRPlayIE(LazyLoadExtractor):
  8278. _module = 'yt_dlp.extractor.srgssr'
  8279. IE_NAME = 'SRGSSRPlay'
  8280. _VALID_URL = '(?x)\n https?://\n (?:(?:www|play)\\.)?\n (?P<bu>srf|rts|rsi|rtr|swissinfo)\\.ch/play/(?:tv|radio)/\n (?:\n [^/]+/(?P<type>video|audio)/[^?]+|\n popup(?P<type_2>video|audio)player\n )\n \\?.*?\\b(?:id=|urn=urn:[^:]+:video:)(?P<id>[0-9a-f\\-]{36}|\\d+)\n '
  8281. IE_DESC = 'srf.ch, rts.ch, rsi.ch, rtr.ch and swissinfo.ch play sites'
  8282. _RETURN_TYPE = 'video'
  8283. class ARDMediathekBaseIE(LazyLoadExtractor):
  8284. _module = 'yt_dlp.extractor.ard'
  8285. IE_NAME = 'ARDMediathekBase'
  8286. class SRMediathekIE(ARDMediathekBaseIE):
  8287. _module = 'yt_dlp.extractor.srmediathek'
  8288. IE_NAME = 'sr:mediathek'
  8289. _VALID_URL = 'https?://sr-mediathek(?:\\.sr-online)?\\.de/index\\.php\\?.*?&id=(?P<id>[0-9]+)'
  8290. _WORKING = False
  8291. IE_DESC = 'Saarländischer Rundfunk'
  8292. _RETURN_TYPE = 'video'
  8293. class WrestleUniverseBaseIE(LazyLoadExtractor):
  8294. _module = 'yt_dlp.extractor.wrestleuniverse'
  8295. IE_NAME = 'WrestleUniverseBase'
  8296. _NETRC_MACHINE = 'wrestleuniverse'
  8297. class StacommuBaseIE(WrestleUniverseBaseIE):
  8298. _module = 'yt_dlp.extractor.stacommu'
  8299. IE_NAME = 'StacommuBase'
  8300. _NETRC_MACHINE = 'stacommu'
  8301. class StacommuLiveIE(StacommuBaseIE):
  8302. _module = 'yt_dlp.extractor.stacommu'
  8303. IE_NAME = 'StacommuLive'
  8304. _VALID_URL = 'https?://www\\.stacommu\\.jp/(?:en/)?live/(?P<id>[\\da-zA-Z]+)'
  8305. _NETRC_MACHINE = 'stacommu'
  8306. _RETURN_TYPE = 'video'
  8307. class StacommuVODIE(StacommuBaseIE):
  8308. _module = 'yt_dlp.extractor.stacommu'
  8309. IE_NAME = 'StacommuVOD'
  8310. _VALID_URL = 'https?://www\\.stacommu\\.jp/(?:en/)?videos/episodes/(?P<id>[\\da-zA-Z]+)'
  8311. _NETRC_MACHINE = 'stacommu'
  8312. _RETURN_TYPE = 'video'
  8313. class TheaterComplexTownBaseIE(StacommuBaseIE):
  8314. _module = 'yt_dlp.extractor.stacommu'
  8315. IE_NAME = 'TheaterComplexTownBase'
  8316. _NETRC_MACHINE = 'theatercomplextown'
  8317. class TheaterComplexTownPPVIE(TheaterComplexTownBaseIE):
  8318. _module = 'yt_dlp.extractor.stacommu'
  8319. IE_NAME = 'theatercomplextown:ppv'
  8320. _VALID_URL = 'https?://(?:www\\.)?theater-complex\\.town/(?:(?:en|ja)/)?ppv/(?P<id>\\w+)'
  8321. _NETRC_MACHINE = 'theatercomplextown'
  8322. _RETURN_TYPE = 'video'
  8323. class TheaterComplexTownVODIE(TheaterComplexTownBaseIE):
  8324. _module = 'yt_dlp.extractor.stacommu'
  8325. IE_NAME = 'theatercomplextown:vod'
  8326. _VALID_URL = 'https?://(?:www\\.)?theater-complex\\.town/(?:(?:en|ja)/)?videos/episodes/(?P<id>\\w+)'
  8327. _NETRC_MACHINE = 'theatercomplextown'
  8328. _RETURN_TYPE = 'video'
  8329. class StagePlusVODConcertIE(LazyLoadExtractor):
  8330. _module = 'yt_dlp.extractor.stageplus'
  8331. IE_NAME = 'StagePlusVODConcert'
  8332. _VALID_URL = 'https?://(?:www\\.)?stage-plus\\.com/video/(?P<id>vod_concert_\\w+)'
  8333. _NETRC_MACHINE = 'stageplus'
  8334. _RETURN_TYPE = 'playlist'
  8335. class StanfordOpenClassroomIE(LazyLoadExtractor):
  8336. _module = 'yt_dlp.extractor.stanfordoc'
  8337. IE_NAME = 'stanfordoc'
  8338. _VALID_URL = 'https?://openclassroom\\.stanford\\.edu(?P<path>/?|(/MainFolder/(?:HomePage|CoursePage|VideoPage)\\.php([?]course=(?P<course>[^&]+)(&video=(?P<video>[^&]+))?(&.*)?)?))$'
  8339. IE_DESC = 'Stanford Open ClassRoom'
  8340. _RETURN_TYPE = 'video'
  8341. class StarTrekIE(LazyLoadExtractor):
  8342. _module = 'yt_dlp.extractor.startrek'
  8343. IE_NAME = 'StarTrek'
  8344. _VALID_URL = '(?P<base>https?://(?:intl|www)\\.startrek\\.com)/videos/(?P<id>[^/]+)'
  8345. _WORKING = False
  8346. _RETURN_TYPE = 'video'
  8347. class StarTVIE(LazyLoadExtractor):
  8348. _module = 'yt_dlp.extractor.startv'
  8349. IE_NAME = 'startv'
  8350. _VALID_URL = '(?x)\n https?://(?:www\\.)?startv\\.com\\.tr/\n (?:\n (?:dizi|program)/(?:[^/?#&]+)/(?:bolumler|fragmanlar|ekstralar)|\n video/arsiv/(?:dizi|program)/(?:[^/?#&]+)\n )/\n (?P<id>[^/?#&]+)\n '
  8351. _RETURN_TYPE = 'video'
  8352. class SteamCommunityBroadcastIE(LazyLoadExtractor):
  8353. _module = 'yt_dlp.extractor.steam'
  8354. IE_NAME = 'SteamCommunityBroadcast'
  8355. _VALID_URL = 'https?://steamcommunity\\.(?:com)/broadcast/watch/(?P<id>\\d+)'
  8356. _RETURN_TYPE = 'video'
  8357. class SteamIE(LazyLoadExtractor):
  8358. _module = 'yt_dlp.extractor.steam'
  8359. IE_NAME = 'Steam'
  8360. _VALID_URL = '(?x)\n https?://(?:store\\.steampowered|steamcommunity)\\.com/\n (?:agecheck/)?\n (?P<urltype>video|app)/ #If the page is only for videos or for a game\n (?P<gameID>\\d+)/?\n (?P<videoID>\\d*)(?P<extra>\\??) # For urltype == video we sometimes get the videoID\n |\n https?://(?:www\\.)?steamcommunity\\.com/sharedfiles/filedetails/\\?id=(?P<fileID>[0-9]+)\n '
  8361. _RETURN_TYPE = 'playlist'
  8362. class StitcherBaseIE(LazyLoadExtractor):
  8363. _module = 'yt_dlp.extractor.stitcher'
  8364. IE_NAME = 'StitcherBase'
  8365. class StitcherIE(StitcherBaseIE):
  8366. _module = 'yt_dlp.extractor.stitcher'
  8367. IE_NAME = 'Stitcher'
  8368. _VALID_URL = 'https?://(?:www\\.)?stitcher\\.com/(?:podcast|show)/(?:[^/]+/)+e(?:pisode)?/(?:[^/#?&]+-)?(?P<id>\\d+)'
  8369. _RETURN_TYPE = 'video'
  8370. class StitcherShowIE(StitcherBaseIE):
  8371. _module = 'yt_dlp.extractor.stitcher'
  8372. IE_NAME = 'StitcherShow'
  8373. _VALID_URL = 'https?://(?:www\\.)?stitcher\\.com/(?:podcast|show)/(?P<id>[^/#?&]+)/?(?:[?#&]|$)'
  8374. _RETURN_TYPE = 'playlist'
  8375. class StoryFireBaseIE(LazyLoadExtractor):
  8376. _module = 'yt_dlp.extractor.storyfire'
  8377. IE_NAME = 'StoryFireBase'
  8378. class StoryFireIE(StoryFireBaseIE):
  8379. _module = 'yt_dlp.extractor.storyfire'
  8380. IE_NAME = 'StoryFire'
  8381. _VALID_URL = 'https?://(?:www\\.)?storyfire\\.com/video-details/(?P<id>[0-9a-f]{24})'
  8382. _RETURN_TYPE = 'video'
  8383. class StoryFireSeriesIE(StoryFireBaseIE):
  8384. _module = 'yt_dlp.extractor.storyfire'
  8385. IE_NAME = 'StoryFireSeries'
  8386. _VALID_URL = 'https?://(?:www\\.)?storyfire\\.com/write/series/stories/(?P<id>[^/?&#]+)'
  8387. _RETURN_TYPE = 'playlist'
  8388. class StoryFireUserIE(StoryFireBaseIE):
  8389. _module = 'yt_dlp.extractor.storyfire'
  8390. IE_NAME = 'StoryFireUser'
  8391. _VALID_URL = 'https?://(?:www\\.)?storyfire\\.com/user/(?P<id>[^/]+)/video'
  8392. _RETURN_TYPE = 'playlist'
  8393. class StreamableIE(LazyLoadExtractor):
  8394. _module = 'yt_dlp.extractor.streamable'
  8395. IE_NAME = 'Streamable'
  8396. _VALID_URL = 'https?://streamable\\.com/(?:[es]/)?(?P<id>\\w+)'
  8397. _RETURN_TYPE = 'video'
  8398. class StreamCZIE(LazyLoadExtractor):
  8399. _module = 'yt_dlp.extractor.streamcz'
  8400. IE_NAME = 'StreamCZ'
  8401. _VALID_URL = 'https?://(?:www\\.)?(?:stream|televizeseznam)\\.cz/[^?#]+/(?P<display_id>[^?#]+)-(?P<id>[0-9]+)'
  8402. _RETURN_TYPE = 'video'
  8403. class StreetVoiceIE(LazyLoadExtractor):
  8404. _module = 'yt_dlp.extractor.streetvoice'
  8405. IE_NAME = 'StreetVoice'
  8406. _VALID_URL = 'https?://(?:.+?\\.)?streetvoice\\.com/[^/]+/songs/(?P<id>[0-9]+)'
  8407. _RETURN_TYPE = 'video'
  8408. class StretchInternetIE(LazyLoadExtractor):
  8409. _module = 'yt_dlp.extractor.stretchinternet'
  8410. IE_NAME = 'StretchInternet'
  8411. _VALID_URL = 'https?://portal\\.stretchinternet\\.com/[^/]+/(?:portal|full)\\.htm\\?.*?\\beventId=(?P<id>\\d+)'
  8412. _RETURN_TYPE = 'video'
  8413. class StripchatIE(LazyLoadExtractor):
  8414. _module = 'yt_dlp.extractor.stripchat'
  8415. IE_NAME = 'Stripchat'
  8416. _VALID_URL = 'https?://stripchat\\.com/(?P<id>[^/?#]+)'
  8417. age_limit = 18
  8418. _RETURN_TYPE = 'video'
  8419. class STVPlayerIE(LazyLoadExtractor):
  8420. _module = 'yt_dlp.extractor.stv'
  8421. IE_NAME = 'stv:player'
  8422. _VALID_URL = 'https?://player\\.stv\\.tv/(?P<type>episode|video)/(?P<id>[a-z0-9]{4})'
  8423. _RETURN_TYPE = 'video'
  8424. class SubstackIE(LazyLoadExtractor):
  8425. _module = 'yt_dlp.extractor.substack'
  8426. IE_NAME = 'Substack'
  8427. _VALID_URL = 'https?://(?P<username>[\\w-]+)\\.substack\\.com/p/(?P<id>[\\w-]+)'
  8428. _RETURN_TYPE = 'video'
  8429. class SunPornoIE(LazyLoadExtractor):
  8430. _module = 'yt_dlp.extractor.sunporno'
  8431. IE_NAME = 'SunPorno'
  8432. _VALID_URL = 'https?://(?:(?:www\\.)?sunporno\\.com/videos|embeds\\.sunporno\\.com/embed)/(?P<id>\\d+)'
  8433. age_limit = 18
  8434. _RETURN_TYPE = 'video'
  8435. class SverigesRadioBaseIE(LazyLoadExtractor):
  8436. _module = 'yt_dlp.extractor.sverigesradio'
  8437. IE_NAME = 'SverigesRadioBase'
  8438. class SverigesRadioEpisodeIE(SverigesRadioBaseIE):
  8439. _module = 'yt_dlp.extractor.sverigesradio'
  8440. IE_NAME = 'sverigesradio:episode'
  8441. _VALID_URL = 'https?://(?:www\\.)?sverigesradio\\.se/(?:sida/)?avsnitt/(?:(?P<id>\\d+)|(?P<slug>[\\w-]+))(?:$|[#?])'
  8442. _RETURN_TYPE = 'video'
  8443. class SverigesRadioPublicationIE(SverigesRadioBaseIE):
  8444. _module = 'yt_dlp.extractor.sverigesradio'
  8445. IE_NAME = 'sverigesradio:publication'
  8446. _VALID_URL = 'https?://(?:www\\.)?sverigesradio\\.se/(?:sida/)?(?:artikel|gruppsida)(?:\\.aspx\\?.*?\\bartikel=(?P<id>[0-9]+)|/(?P<slug>[\\w-]+))'
  8447. _RETURN_TYPE = 'video'
  8448. class SVTBaseIE(LazyLoadExtractor):
  8449. _module = 'yt_dlp.extractor.svt'
  8450. IE_NAME = 'SVTBase'
  8451. class SVTIE(SVTBaseIE):
  8452. _module = 'yt_dlp.extractor.svt'
  8453. IE_NAME = 'SVT'
  8454. _VALID_URL = 'https?://(?:www\\.)?svt\\.se/wd\\?(?:.*?&)?widgetId=(?P<widget_id>\\d+)&.*?\\barticleId=(?P<id>\\d+)'
  8455. _RETURN_TYPE = 'video'
  8456. class SVTPageIE(SVTBaseIE):
  8457. _module = 'yt_dlp.extractor.svt'
  8458. IE_NAME = 'SVTPage'
  8459. _VALID_URL = 'https?://(?:www\\.)?svt\\.se/(?:[^/?#]+/)*(?P<id>[^/?&#]+)'
  8460. _RETURN_TYPE = 'any'
  8461. @classmethod
  8462. def suitable(cls, url):
  8463. return False if SVTIE.suitable(url) or SVTPlayIE.suitable(url) else super().suitable(url)
  8464. class SVTPlayBaseIE(SVTBaseIE):
  8465. _module = 'yt_dlp.extractor.svt'
  8466. IE_NAME = 'SVTPlayBase'
  8467. class SVTPlayIE(SVTPlayBaseIE):
  8468. _module = 'yt_dlp.extractor.svt'
  8469. IE_NAME = 'SVTPlay'
  8470. _VALID_URL = '(?x)\n (?:\n (?:\n svt:|\n https?://(?:www\\.)?svt\\.se/barnkanalen/barnplay/[^/]+/\n )\n (?P<svt_id>[^/?#&]+)|\n https?://(?:www\\.)?(?:svtplay|oppetarkiv)\\.se/(?:video|klipp|kanaler)/(?P<id>[^/?#&]+)\n (?:.*?(?:modalId|id)=(?P<modal_id>[\\da-zA-Z-]+))?\n )\n '
  8471. IE_DESC = 'SVT Play and Öppet arkiv'
  8472. _RETURN_TYPE = 'video'
  8473. class SVTSeriesIE(SVTPlayBaseIE):
  8474. _module = 'yt_dlp.extractor.svt'
  8475. IE_NAME = 'SVTSeries'
  8476. _VALID_URL = 'https?://(?:www\\.)?svtplay\\.se/(?P<id>[^/?&#]+)(?:.+?\\btab=(?P<season_slug>[^&#]+))?'
  8477. _RETURN_TYPE = 'playlist'
  8478. @classmethod
  8479. def suitable(cls, url):
  8480. return False if SVTIE.suitable(url) or SVTPlayIE.suitable(url) else super().suitable(url)
  8481. class SwearnetEpisodeIE(VidyardBaseIE):
  8482. _module = 'yt_dlp.extractor.swearnet'
  8483. IE_NAME = 'SwearnetEpisode'
  8484. _VALID_URL = 'https?://www\\.swearnet\\.com/shows/(?P<id>[\\w-]+)/seasons/(?P<season_num>\\d+)/episodes/(?P<episode_num>\\d+)'
  8485. _RETURN_TYPE = 'video'
  8486. class SyfyIE(AdobePassIE):
  8487. _module = 'yt_dlp.extractor.syfy'
  8488. IE_NAME = 'Syfy'
  8489. _VALID_URL = 'https?://(?:www\\.)?syfy\\.com/(?:[^/]+/)?videos/(?P<id>[^/?#]+)'
  8490. _WORKING = False
  8491. _RETURN_TYPE = 'video'
  8492. class SYVDKIE(LazyLoadExtractor):
  8493. _module = 'yt_dlp.extractor.syvdk'
  8494. IE_NAME = 'SYVDK'
  8495. _VALID_URL = 'https?://(?:www\\.)?24syv\\.dk/episode/(?P<id>[\\w-]+)'
  8496. _RETURN_TYPE = 'video'
  8497. class SztvHuIE(LazyLoadExtractor):
  8498. _module = 'yt_dlp.extractor.sztvhu'
  8499. IE_NAME = 'SztvHu'
  8500. _VALID_URL = 'https?://(?:(?:www\\.)?sztv\\.hu|www\\.tvszombathely\\.hu)/(?:[^/]+)/.+-(?P<id>[0-9]+)'
  8501. _RETURN_TYPE = 'video'
  8502. class TagesschauIE(LazyLoadExtractor):
  8503. _module = 'yt_dlp.extractor.tagesschau'
  8504. IE_NAME = 'Tagesschau'
  8505. _VALID_URL = 'https?://(?:www\\.)?tagesschau\\.de/(?P<path>[^/]+/(?:[^/]+/)*?(?P<id>[^/#?]+?(?:-?[0-9]+)?))(?:~_?[^/#?]+?)?\\.html'
  8506. _WORKING = False
  8507. _RETURN_TYPE = 'any'
  8508. class TapTapBaseIE(LazyLoadExtractor):
  8509. _module = 'yt_dlp.extractor.taptap'
  8510. IE_NAME = 'TapTapBase'
  8511. class TapTapAppIE(TapTapBaseIE):
  8512. _module = 'yt_dlp.extractor.taptap'
  8513. IE_NAME = 'TapTapApp'
  8514. _VALID_URL = 'https?://www\\.taptap\\.cn/app/(?P<id>\\d+)'
  8515. _RETURN_TYPE = 'playlist'
  8516. class TapTapIntlBase(TapTapBaseIE):
  8517. _module = 'yt_dlp.extractor.taptap'
  8518. IE_NAME = 'TapTapIntlBa'
  8519. class TapTapAppIntlIE(TapTapIntlBase):
  8520. _module = 'yt_dlp.extractor.taptap'
  8521. IE_NAME = 'TapTapAppIntl'
  8522. _VALID_URL = 'https?://www\\.taptap\\.io/app/(?P<id>\\d+)'
  8523. _RETURN_TYPE = 'playlist'
  8524. class TapTapMomentIE(TapTapBaseIE):
  8525. _module = 'yt_dlp.extractor.taptap'
  8526. IE_NAME = 'TapTapMoment'
  8527. _VALID_URL = 'https?://www\\.taptap\\.cn/moment/(?P<id>\\d+)'
  8528. _RETURN_TYPE = 'playlist'
  8529. class TapTapPostIntlIE(TapTapIntlBase):
  8530. _module = 'yt_dlp.extractor.taptap'
  8531. IE_NAME = 'TapTapPostIntl'
  8532. _VALID_URL = 'https?://www\\.taptap\\.io/post/(?P<id>\\d+)'
  8533. _RETURN_TYPE = 'playlist'
  8534. class TassIE(LazyLoadExtractor):
  8535. _module = 'yt_dlp.extractor.tass'
  8536. IE_NAME = 'Tass'
  8537. _VALID_URL = 'https?://(?:tass\\.ru|itar-tass\\.com)/[^/]+/(?P<id>\\d+)'
  8538. _WORKING = False
  8539. _RETURN_TYPE = 'video'
  8540. class TBSIE(TurnerBaseIE):
  8541. _module = 'yt_dlp.extractor.tbs'
  8542. IE_NAME = 'TBS'
  8543. _VALID_URL = 'https?://(?:www\\.)?(?P<site>tbs|tntdrama)\\.com(?P<path>/(?:movies|watchtnt|watchtbs|shows/[^/]+/(?:clips|season-\\d+/episode-\\d+))/(?P<id>[^/?#]+))'
  8544. _RETURN_TYPE = 'video'
  8545. class TBSJPEpisodeIE(LazyLoadExtractor):
  8546. _module = 'yt_dlp.extractor.tbsjp'
  8547. IE_NAME = 'TBSJPEpisode'
  8548. _VALID_URL = 'https?://cu\\.tbs\\.co\\.jp/episode/(?P<id>[\\d_]+)'
  8549. _RETURN_TYPE = 'video'
  8550. class TBSJPPlaylistIE(LazyLoadExtractor):
  8551. _module = 'yt_dlp.extractor.tbsjp'
  8552. IE_NAME = 'TBSJPPlaylist'
  8553. _VALID_URL = 'https?://cu\\.tbs\\.co\\.jp/playlist/(?P<id>[\\da-f]+)'
  8554. _RETURN_TYPE = 'playlist'
  8555. class TBSJPProgramIE(LazyLoadExtractor):
  8556. _module = 'yt_dlp.extractor.tbsjp'
  8557. IE_NAME = 'TBSJPProgram'
  8558. _VALID_URL = 'https?://cu\\.tbs\\.co\\.jp/program/(?P<id>\\d+)'
  8559. _RETURN_TYPE = 'playlist'
  8560. class TeachableBaseIE(LazyLoadExtractor):
  8561. _module = 'yt_dlp.extractor.teachable'
  8562. IE_NAME = 'TeachableBase'
  8563. _NETRC_MACHINE = 'teachable'
  8564. class TeachableCourseIE(TeachableBaseIE):
  8565. _module = 'yt_dlp.extractor.teachable'
  8566. IE_NAME = 'TeachableCourse'
  8567. _VALID_URL = '(?x)\n (?:\n teachable:https?://(?P<site_t>[^/]+)|\n https?://(?:www\\.)?(?P<site>v1\\.upskillcourses\\.com|gns3\\.teachable\\.com|academyhacker\\.com|stackskills\\.com|market\\.saleshacker\\.com|learnability\\.org|edurila\\.com|courses\\.workitdaily\\.com)\n )\n /(?:courses|p)/(?:enrolled/)?(?P<id>[^/?#&]+)\n '
  8568. _NETRC_MACHINE = 'teachable'
  8569. _RETURN_TYPE = 'playlist'
  8570. @classmethod
  8571. def suitable(cls, url):
  8572. return False if TeachableIE.suitable(url) else super().suitable(url)
  8573. class TeachableIE(TeachableBaseIE):
  8574. _module = 'yt_dlp.extractor.teachable'
  8575. IE_NAME = 'Teachable'
  8576. _VALID_URL = '(?x)\n (?:\n teachable:https?://(?P<site_t>[^/]+)|\n https?://(?:www\\.)?(?P<site>v1\\.upskillcourses\\.com|gns3\\.teachable\\.com|academyhacker\\.com|stackskills\\.com|market\\.saleshacker\\.com|learnability\\.org|edurila\\.com|courses\\.workitdaily\\.com)\n )\n /courses/[^/]+/lectures/(?P<id>\\d+)\n '
  8577. _WORKING = False
  8578. _NETRC_MACHINE = 'teachable'
  8579. _RETURN_TYPE = 'video'
  8580. class TeacherTubeIE(LazyLoadExtractor):
  8581. _module = 'yt_dlp.extractor.teachertube'
  8582. IE_NAME = 'teachertube'
  8583. _VALID_URL = 'https?://(?:www\\.)?teachertube\\.com/(viewVideo\\.php\\?video_id=|music\\.php\\?music_id=|video/(?:[\\da-z-]+-)?|audio/)(?P<id>\\d+)'
  8584. _WORKING = False
  8585. IE_DESC = 'teachertube.com videos'
  8586. _RETURN_TYPE = 'video'
  8587. class TeacherTubeUserIE(LazyLoadExtractor):
  8588. _module = 'yt_dlp.extractor.teachertube'
  8589. IE_NAME = 'teachertube:user:collection'
  8590. _VALID_URL = 'https?://(?:www\\.)?teachertube\\.com/(user/profile|collection)/(?P<user>[0-9a-zA-Z]+)/?'
  8591. _WORKING = False
  8592. IE_DESC = 'teachertube.com user and collection videos'
  8593. _RETURN_TYPE = 'playlist'
  8594. class TeachingChannelIE(LazyLoadExtractor):
  8595. _module = 'yt_dlp.extractor.teachingchannel'
  8596. IE_NAME = 'TeachingChannel'
  8597. _VALID_URL = 'https?://(?:www\\.)?teachingchannel\\.org/videos?/(?P<id>[^/?&#]+)'
  8598. _WORKING = False
  8599. _RETURN_TYPE = 'video'
  8600. class TeamcocoBaseIE(TurnerBaseIE):
  8601. _module = 'yt_dlp.extractor.teamcoco'
  8602. IE_NAME = 'TeamcocoBase'
  8603. class ConanClassicIE(TeamcocoBaseIE):
  8604. _module = 'yt_dlp.extractor.teamcoco'
  8605. IE_NAME = 'ConanClassic'
  8606. _VALID_URL = 'https?://(?:(?:www\\.)?conanclassic|conan25\\.teamcoco)\\.com/(?P<id>([^/]+/)*[^/?#]+)'
  8607. _RETURN_TYPE = 'video'
  8608. class TeamcocoIE(TeamcocoBaseIE):
  8609. _module = 'yt_dlp.extractor.teamcoco'
  8610. IE_NAME = 'Teamcoco'
  8611. _VALID_URL = 'https?://(?:www\\.)?teamcoco\\.com/(?P<id>([^/]+/)*[^/?#]+)'
  8612. _RETURN_TYPE = 'video'
  8613. class TeamTreeHouseIE(LazyLoadExtractor):
  8614. _module = 'yt_dlp.extractor.teamtreehouse'
  8615. IE_NAME = 'TeamTreeHouse'
  8616. _VALID_URL = 'https?://(?:www\\.)?teamtreehouse\\.com/library/(?P<id>[^/]+)'
  8617. _NETRC_MACHINE = 'teamtreehouse'
  8618. _RETURN_TYPE = 'any'
  8619. class TedEmbedIE(LazyLoadExtractor):
  8620. _module = 'yt_dlp.extractor.ted'
  8621. IE_NAME = 'TedEmbed'
  8622. _VALID_URL = 'https?://embed(?:-ssl)?\\.ted\\.com/'
  8623. _RETURN_TYPE = 'video'
  8624. class TedBaseIE(LazyLoadExtractor):
  8625. _module = 'yt_dlp.extractor.ted'
  8626. IE_NAME = 'TedBase'
  8627. class TedPlaylistIE(TedBaseIE):
  8628. _module = 'yt_dlp.extractor.ted'
  8629. IE_NAME = 'TedPlaylist'
  8630. _VALID_URL = 'https?://www\\.ted\\.com/(?:playlists(?:/\\d+)?)(?:/lang/[^/#?]+)?/(?P<id>[\\w-]+)'
  8631. _RETURN_TYPE = 'playlist'
  8632. class TedSeriesIE(TedBaseIE):
  8633. _module = 'yt_dlp.extractor.ted'
  8634. IE_NAME = 'TedSeries'
  8635. _VALID_URL = 'https?://www\\.ted\\.com/(?:series)(?:/lang/[^/#?]+)?/(?P<id>[\\w-]+)(?:#season_(?P<season>\\d+))?'
  8636. _RETURN_TYPE = 'playlist'
  8637. class TedTalkIE(TedBaseIE):
  8638. _module = 'yt_dlp.extractor.ted'
  8639. IE_NAME = 'TedTalk'
  8640. _VALID_URL = 'https?://www\\.ted\\.com/(?:talks)(?:/lang/[^/#?]+)?/(?P<id>[\\w-]+)'
  8641. _RETURN_TYPE = 'video'
  8642. class Tele5IE(DiscoveryPlusBaseIE):
  8643. _module = 'yt_dlp.extractor.tele5'
  8644. IE_NAME = 'Tele5'
  8645. _VALID_URL = 'https?://(?:www\\.)?tele5\\.de/(?P<parent_slug>[\\w-]+)/(?P<slug_a>[\\w-]+)(?:/(?P<slug_b>[\\w-]+))?'
  8646. _RETURN_TYPE = 'any'
  8647. class Tele13IE(LazyLoadExtractor):
  8648. _module = 'yt_dlp.extractor.tele13'
  8649. IE_NAME = 'Tele13'
  8650. _VALID_URL = 'https?://(?:www\\.)?t13\\.cl/videos(?:/[^/]+)+/(?P<id>[\\w-]+)'
  8651. _RETURN_TYPE = 'video'
  8652. class TeleBruxellesIE(LazyLoadExtractor):
  8653. _module = 'yt_dlp.extractor.telebruxelles'
  8654. IE_NAME = 'TeleBruxelles'
  8655. _VALID_URL = 'https?://(?:www\\.)?(?:telebruxelles|bx1)\\.be/(?:[^/]+/)*(?P<id>[^/#?]+)'
  8656. _RETURN_TYPE = 'video'
  8657. class TelecaribePlayIE(LazyLoadExtractor):
  8658. _module = 'yt_dlp.extractor.telecaribe'
  8659. IE_NAME = 'TelecaribePlay'
  8660. _VALID_URL = 'https?://(?:www\\.)?play\\.telecaribe\\.co/(?P<id>[\\w-]+)'
  8661. _RETURN_TYPE = 'any'
  8662. class TelecincoIE(TelecincoBaseIE):
  8663. _module = 'yt_dlp.extractor.telecinco'
  8664. IE_NAME = 'Telecinco'
  8665. _VALID_URL = 'https?://(?:www\\.)?(?:telecinco\\.es|cuatro\\.com|mediaset\\.es)/(?:[^/]+/)+(?P<id>.+?)\\.html'
  8666. IE_DESC = 'telecinco.es, cuatro.com and mediaset.es'
  8667. _RETURN_TYPE = 'any'
  8668. class TelegraafIE(LazyLoadExtractor):
  8669. _module = 'yt_dlp.extractor.telegraaf'
  8670. IE_NAME = 'Telegraaf'
  8671. _VALID_URL = 'https?://(?:www\\.)?telegraaf\\.nl/video/(?P<id>\\d+)'
  8672. _RETURN_TYPE = 'video'
  8673. class TelegramEmbedIE(LazyLoadExtractor):
  8674. _module = 'yt_dlp.extractor.telegram'
  8675. IE_NAME = 'telegram:embed'
  8676. _VALID_URL = 'https?://t\\.me/(?P<channel_id>[^/]+)/(?P<id>\\d+)'
  8677. _RETURN_TYPE = 'any'
  8678. class TeleMBIE(LazyLoadExtractor):
  8679. _module = 'yt_dlp.extractor.telemb'
  8680. IE_NAME = 'TeleMB'
  8681. _VALID_URL = 'https?://(?:www\\.)?telemb\\.be/(?P<display_id>.+?)_d_(?P<id>\\d+)\\.html'
  8682. _WORKING = False
  8683. _RETURN_TYPE = 'video'
  8684. class TelemundoIE(LazyLoadExtractor):
  8685. _module = 'yt_dlp.extractor.telemundo'
  8686. IE_NAME = 'Telemundo'
  8687. _VALID_URL = 'https?:\\/\\/(?:www\\.)?telemundo\\.com\\/.+?video\\/[^\\/]+(?P<id>tmvo\\d{7})'
  8688. _WORKING = False
  8689. _RETURN_TYPE = 'video'
  8690. class TeleQuebecEmissionIE(LazyLoadExtractor):
  8691. _module = 'yt_dlp.extractor.telequebec'
  8692. IE_NAME = 'TeleQuebecEmission'
  8693. _VALID_URL = '(?x)\n https?://\n (?:\n [^/]+\\.telequebec\\.tv/emissions/|\n (?:www\\.)?telequebec\\.tv/\n )\n (?P<id>[^?#&]+)\n '
  8694. _RETURN_TYPE = 'video'
  8695. class TeleQuebecBaseIE(LazyLoadExtractor):
  8696. _module = 'yt_dlp.extractor.telequebec'
  8697. IE_NAME = 'TeleQuebecBase'
  8698. class TeleQuebecIE(TeleQuebecBaseIE):
  8699. _module = 'yt_dlp.extractor.telequebec'
  8700. IE_NAME = 'TeleQuebec'
  8701. _VALID_URL = '(?x)\n https?://\n (?:\n zonevideo\\.telequebec\\.tv/media|\n coucou\\.telequebec\\.tv/videos\n )/(?P<id>\\d+)\n '
  8702. _RETURN_TYPE = 'video'
  8703. class TeleQuebecLiveIE(TeleQuebecBaseIE):
  8704. _module = 'yt_dlp.extractor.telequebec'
  8705. IE_NAME = 'TeleQuebecLive'
  8706. _VALID_URL = 'https?://zonevideo\\.telequebec\\.tv/(?P<id>endirect)'
  8707. _RETURN_TYPE = 'video'
  8708. class TeleQuebecSquatIE(LazyLoadExtractor):
  8709. _module = 'yt_dlp.extractor.telequebec'
  8710. IE_NAME = 'TeleQuebecSquat'
  8711. _VALID_URL = 'https?://squat\\.telequebec\\.tv/videos/(?P<id>\\d+)'
  8712. _RETURN_TYPE = 'video'
  8713. class TeleQuebecVideoIE(TeleQuebecBaseIE):
  8714. _module = 'yt_dlp.extractor.telequebec'
  8715. IE_NAME = 'TeleQuebecVideo'
  8716. _VALID_URL = 'https?://video\\.telequebec\\.tv/player(?:-live)?/(?P<id>\\d+)'
  8717. _RETURN_TYPE = 'video'
  8718. class TeleTaskIE(LazyLoadExtractor):
  8719. _module = 'yt_dlp.extractor.teletask'
  8720. IE_NAME = 'TeleTask'
  8721. _VALID_URL = 'https?://(?:www\\.)?tele-task\\.de/archive/video/html5/(?P<id>[0-9]+)'
  8722. _WORKING = False
  8723. _RETURN_TYPE = 'playlist'
  8724. class TelewebionIE(LazyLoadExtractor):
  8725. _module = 'yt_dlp.extractor.telewebion'
  8726. IE_NAME = 'Telewebion'
  8727. _VALID_URL = 'https?://(?:www\\.)?telewebion\\.com/episode/(?P<id>(?:0x[a-fA-F\\d]+|\\d+))'
  8728. _WORKING = False
  8729. _RETURN_TYPE = 'video'
  8730. class IVXPlayerIE(LazyLoadExtractor):
  8731. _module = 'yt_dlp.extractor.tempo'
  8732. IE_NAME = 'IVXPlayer'
  8733. _VALID_URL = 'ivxplayer:(?P<video_id>\\d+):(?P<player_key>\\w+)'
  8734. _RETURN_TYPE = 'video'
  8735. class TempoIE(LazyLoadExtractor):
  8736. _module = 'yt_dlp.extractor.tempo'
  8737. IE_NAME = 'Tempo'
  8738. _VALID_URL = 'https?://video\\.tempo\\.co/\\w+/\\d+/(?P<id>[\\w-]+)'
  8739. _RETURN_TYPE = 'video'
  8740. class TencentBaseIE(LazyLoadExtractor):
  8741. _module = 'yt_dlp.extractor.tencent'
  8742. IE_NAME = 'TencentBase'
  8743. class WeTvBaseIE(TencentBaseIE):
  8744. _module = 'yt_dlp.extractor.tencent'
  8745. IE_NAME = 'WeTvBase'
  8746. class IflixBaseIE(WeTvBaseIE):
  8747. _module = 'yt_dlp.extractor.tencent'
  8748. IE_NAME = 'IflixBase'
  8749. class IflixEpisodeIE(IflixBaseIE):
  8750. _module = 'yt_dlp.extractor.tencent'
  8751. IE_NAME = 'iflix:episode'
  8752. _VALID_URL = 'https?://(?:www\\.)?iflix\\.com/(?:[^?#]+/)?play/(?P<series_id>\\w+)(?:-[^?#]+)?/(?P<id>\\w+)(?:-[^?#]+)?'
  8753. _RETURN_TYPE = 'video'
  8754. class IflixSeriesIE(IflixBaseIE):
  8755. _module = 'yt_dlp.extractor.tencent'
  8756. IE_NAME = 'IflixSeries'
  8757. _VALID_URL = 'https?://(?:www\\.)?iflix\\.com/(?:[^?#]+/)?play/(?P<id>\\w+)(?:-[^/?#]+)?/?(?:[?#]|$)'
  8758. _RETURN_TYPE = 'playlist'
  8759. class VQQBaseIE(TencentBaseIE):
  8760. _module = 'yt_dlp.extractor.tencent'
  8761. IE_NAME = 'VQQBase'
  8762. class VQQSeriesIE(VQQBaseIE):
  8763. _module = 'yt_dlp.extractor.tencent'
  8764. IE_NAME = 'vqq:series'
  8765. _VALID_URL = 'https?://v\\.qq\\.com/x/cover/(?P<id>\\w+)\\.html/?(?:[?#]|$)'
  8766. _RETURN_TYPE = 'playlist'
  8767. class VQQVideoIE(VQQBaseIE):
  8768. _module = 'yt_dlp.extractor.tencent'
  8769. IE_NAME = 'vqq:video'
  8770. _VALID_URL = 'https?://v\\.qq\\.com/x/(?:page|cover/(?P<series_id>\\w+))/(?P<id>\\w+)'
  8771. _RETURN_TYPE = 'video'
  8772. class WeTvEpisodeIE(WeTvBaseIE):
  8773. _module = 'yt_dlp.extractor.tencent'
  8774. IE_NAME = 'wetv:episode'
  8775. _VALID_URL = 'https?://(?:www\\.)?wetv\\.vip/(?:[^?#]+/)?play/(?P<series_id>\\w+)(?:-[^?#]+)?/(?P<id>\\w+)(?:-[^?#]+)?'
  8776. _RETURN_TYPE = 'video'
  8777. class WeTvSeriesIE(WeTvBaseIE):
  8778. _module = 'yt_dlp.extractor.tencent'
  8779. IE_NAME = 'WeTvSeries'
  8780. _VALID_URL = 'https?://(?:www\\.)?wetv\\.vip/(?:[^?#]+/)?play/(?P<id>\\w+)(?:-[^/?#]+)?/?(?:[?#]|$)'
  8781. _RETURN_TYPE = 'playlist'
  8782. class TennisTVIE(LazyLoadExtractor):
  8783. _module = 'yt_dlp.extractor.tennistv'
  8784. IE_NAME = 'TennisTV'
  8785. _VALID_URL = 'https?://(?:www\\.)?tennistv\\.com/videos/(?P<id>[-a-z0-9]+)'
  8786. _NETRC_MACHINE = 'tennistv'
  8787. _RETURN_TYPE = 'video'
  8788. class TenPlayIE(LazyLoadExtractor):
  8789. _module = 'yt_dlp.extractor.tenplay'
  8790. IE_NAME = 'TenPlay'
  8791. _VALID_URL = 'https?://(?:www\\.)?10play\\.com\\.au/(?:[^/]+/)+(?P<id>tpv\\d{6}[a-z]{5})'
  8792. _NETRC_MACHINE = '10play'
  8793. age_limit = 15
  8794. _RETURN_TYPE = 'video'
  8795. class TenPlaySeasonIE(LazyLoadExtractor):
  8796. _module = 'yt_dlp.extractor.tenplay'
  8797. IE_NAME = 'TenPlaySeason'
  8798. _VALID_URL = 'https?://(?:www\\.)?10play\\.com\\.au/(?P<show>[^/?#]+)/episodes/(?P<season>[^/?#]+)/?(?:$|[?#])'
  8799. _RETURN_TYPE = 'playlist'
  8800. class TestURLIE(LazyLoadExtractor):
  8801. _module = 'yt_dlp.extractor.testurl'
  8802. IE_NAME = 'TestURL'
  8803. _VALID_URL = 'test(?:url)?:(?P<extractor>.*?)(?:_(?P<num>\\d+|all))?$'
  8804. IE_DESC = False
  8805. class TF1IE(LazyLoadExtractor):
  8806. _module = 'yt_dlp.extractor.tf1'
  8807. IE_NAME = 'TF1'
  8808. _VALID_URL = 'https?://(?:www\\.)?tf1\\.fr/[^/]+/(?P<program_slug>[^/]+)/videos/(?P<id>[^/?&#]+)\\.html'
  8809. _RETURN_TYPE = 'video'
  8810. class TFOIE(LazyLoadExtractor):
  8811. _module = 'yt_dlp.extractor.tfo'
  8812. IE_NAME = 'TFO'
  8813. _VALID_URL = 'https?://(?:www\\.)?tfo\\.org/(?:en|fr)/(?:[^/]+/){2}(?P<id>\\d+)'
  8814. _RETURN_TYPE = 'video'
  8815. class TheGuardianPodcastIE(LazyLoadExtractor):
  8816. _module = 'yt_dlp.extractor.theguardian'
  8817. IE_NAME = 'TheGuardianPodcast'
  8818. _VALID_URL = 'https?://(?:www\\.)?theguardian\\.com/\\w+/audio/\\d{4}/\\w{3}/\\d{1,2}/(?P<id>[\\w-]+)'
  8819. _RETURN_TYPE = 'video'
  8820. class TheGuardianPodcastPlaylistIE(LazyLoadExtractor):
  8821. _module = 'yt_dlp.extractor.theguardian'
  8822. IE_NAME = 'TheGuardianPodcastPlaylist'
  8823. _VALID_URL = 'https?://(?:www\\.)?theguardian\\.com/\\w+/series/(?P<id>[\\w-]+)(?:\\?page=\\d+)?'
  8824. _RETURN_TYPE = 'playlist'
  8825. class TheHoleTvIE(LazyLoadExtractor):
  8826. _module = 'yt_dlp.extractor.theholetv'
  8827. IE_NAME = 'TheHoleTv'
  8828. _VALID_URL = 'https?://(?:www\\.)?the-hole\\.tv/episodes/(?P<id>[\\w-]+)'
  8829. _RETURN_TYPE = 'video'
  8830. class TheInterceptIE(LazyLoadExtractor):
  8831. _module = 'yt_dlp.extractor.theintercept'
  8832. IE_NAME = 'TheIntercept'
  8833. _VALID_URL = 'https?://theintercept\\.com/fieldofvision/(?P<id>[^/?#]+)'
  8834. _RETURN_TYPE = 'video'
  8835. class ThePlatformFeedIE(ThePlatformBaseIE):
  8836. _module = 'yt_dlp.extractor.theplatform'
  8837. IE_NAME = 'ThePlatformFeed'
  8838. _VALID_URL = 'https?://feed\\.theplatform\\.com/f/(?P<provider_id>[^/]+)/(?P<feed_id>[^?/]+)\\?(?:[^&]+&)*(?P<filter>by(?:Gui|I)d=(?P<id>[^&]+))'
  8839. _RETURN_TYPE = 'video'
  8840. class CBSBaseIE(ThePlatformFeedIE):
  8841. _module = 'yt_dlp.extractor.cbs'
  8842. IE_NAME = 'CBSBase'
  8843. _VALID_URL = 'https?://feed\\.theplatform\\.com/f/(?P<provider_id>[^/]+)/(?P<feed_id>[^?/]+)\\?(?:[^&]+&)*(?P<filter>by(?:Gui|I)d=(?P<id>[^&]+))'
  8844. class CBSIE(CBSBaseIE):
  8845. _module = 'yt_dlp.extractor.cbs'
  8846. IE_NAME = 'CBS'
  8847. _VALID_URL = '(?x)\n (?:\n cbs:|\n https?://(?:www\\.)?(?:\n cbs\\.com/(?:shows|movies)/(?:video|[^/]+/video|[^/]+)/|\n colbertlateshow\\.com/(?:video|podcasts)/)\n )(?P<id>[\\w-]+)'
  8848. _WORKING = False
  8849. _RETURN_TYPE = 'video'
  8850. class CorusIE(ThePlatformFeedIE):
  8851. _module = 'yt_dlp.extractor.corus'
  8852. IE_NAME = 'Corus'
  8853. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?\n (?P<domain>\n (?:\n globaltv|\n etcanada|\n seriesplus|\n wnetwork|\n ytv\n )\\.com|\n (?:\n hgtv|\n foodnetwork|\n slice|\n history|\n showcase|\n bigbrothercanada|\n abcspark|\n disney(?:channel|lachaine)\n )\\.ca\n )\n /(?:[^/]+/)*\n (?:\n video\\.html\\?.*?\\bv=|\n videos?/(?:[^/]+/)*(?:[a-z0-9-]+-)?\n )\n (?P<id>\n [\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}|\n (?:[A-Z]{4})?\\d{12,20}\n )\n '
  8854. _RETURN_TYPE = 'video'
  8855. class ParamountPlusIE(CBSBaseIE):
  8856. _module = 'yt_dlp.extractor.paramountplus'
  8857. IE_NAME = 'ParamountPlus'
  8858. _VALID_URL = '(?x)\n (?:\n paramountplus:|\n https?://(?:www\\.)?(?:\n paramountplus\\.com/(?:shows|movies)/(?:video|[^/]+/video|[^/]+)/\n )(?P<id>[\\w-]+))'
  8859. _RETURN_TYPE = 'video'
  8860. class ThePlatformIE(ThePlatformBaseIE, AdobePassIE):
  8861. _module = 'yt_dlp.extractor.theplatform'
  8862. IE_NAME = 'ThePlatform'
  8863. _VALID_URL = '(?x)\n (?:https?://(?:link|player)\\.theplatform\\.com/[sp]/(?P<provider_id>[^/]+)/\n (?:(?:(?:[^/]+/)+select/)?(?P<media>media/(?:guid/\\d+/)?)?|(?P<config>(?:[^/\\?]+/(?:swf|config)|onsite)/select/))?\n |theplatform:)(?P<id>[^/\\?&]+)'
  8864. _RETURN_TYPE = 'video'
  8865. class AENetworksBaseIE(ThePlatformIE):
  8866. _module = 'yt_dlp.extractor.aenetworks'
  8867. IE_NAME = 'AENetworksBase'
  8868. _VALID_URL = '(?x)\n (?:https?://(?:link|player)\\.theplatform\\.com/[sp]/(?P<provider_id>[^/]+)/\n (?:(?:(?:[^/]+/)+select/)?(?P<media>media/(?:guid/\\d+/)?)?|(?P<config>(?:[^/\\?]+/(?:swf|config)|onsite)/select/))?\n |theplatform:)(?P<id>[^/\\?&]+)'
  8869. class AENetworksListBaseIE(AENetworksBaseIE):
  8870. _module = 'yt_dlp.extractor.aenetworks'
  8871. IE_NAME = 'AENetworksListBase'
  8872. _VALID_URL = '(?x)\n (?:https?://(?:link|player)\\.theplatform\\.com/[sp]/(?P<provider_id>[^/]+)/\n (?:(?:(?:[^/]+/)+select/)?(?P<media>media/(?:guid/\\d+/)?)?|(?P<config>(?:[^/\\?]+/(?:swf|config)|onsite)/select/))?\n |theplatform:)(?P<id>[^/\\?&]+)'
  8873. class AENetworksCollectionIE(AENetworksListBaseIE):
  8874. _module = 'yt_dlp.extractor.aenetworks'
  8875. IE_NAME = 'aenetworks:collection'
  8876. _VALID_URL = '(?x)https?://\n (?:(?:www|play|watch)\\.)?\n (?P<domain>\n (?:history(?:vault)?|aetv|mylifetime|lifetimemovieclub)\\.com|\n fyi\\.tv\n )/(?:[^/]+/)*(?:list|collections)/(?P<id>[^/?#&]+)/?(?:[?#&]|$)'
  8877. _RETURN_TYPE = 'playlist'
  8878. class AENetworksIE(AENetworksBaseIE):
  8879. _module = 'yt_dlp.extractor.aenetworks'
  8880. IE_NAME = 'aenetworks'
  8881. _VALID_URL = '(?x)https?://\n (?:(?:www|play|watch)\\.)?\n (?P<domain>\n (?:history(?:vault)?|aetv|mylifetime|lifetimemovieclub)\\.com|\n fyi\\.tv\n )/(?P<id>\n shows/[^/]+/season-\\d+/episode-\\d+|\n (?:\n (?:movie|special)s/[^/]+|\n (?:shows/[^/]+/)?videos\n )/[^/?#&]+\n )'
  8882. IE_DESC = 'A+E Networks: A&E, Lifetime, History.com, FYI Network and History Vault'
  8883. _RETURN_TYPE = 'video'
  8884. class AENetworksShowIE(AENetworksListBaseIE):
  8885. _module = 'yt_dlp.extractor.aenetworks'
  8886. IE_NAME = 'aenetworks:show'
  8887. _VALID_URL = '(?x)https?://\n (?:(?:www|play|watch)\\.)?\n (?P<domain>\n (?:history(?:vault)?|aetv|mylifetime|lifetimemovieclub)\\.com|\n fyi\\.tv\n )/shows/(?P<id>[^/?#&]+)/?(?:[?#&]|$)'
  8888. _RETURN_TYPE = 'playlist'
  8889. class BiographyIE(AENetworksBaseIE):
  8890. _module = 'yt_dlp.extractor.aenetworks'
  8891. IE_NAME = 'Biography'
  8892. _VALID_URL = 'https?://(?:www\\.)?biography\\.com/video/(?P<id>[^/?#&]+)'
  8893. _RETURN_TYPE = 'video'
  8894. class HistoryPlayerIE(AENetworksBaseIE):
  8895. _module = 'yt_dlp.extractor.aenetworks'
  8896. IE_NAME = 'history:player'
  8897. _VALID_URL = 'https?://(?:www\\.)?(?P<domain>(?:history|biography)\\.com)/player/(?P<id>\\d+)'
  8898. class HistoryTopicIE(AENetworksBaseIE):
  8899. _module = 'yt_dlp.extractor.aenetworks'
  8900. IE_NAME = 'history:topic'
  8901. _VALID_URL = 'https?://(?:www\\.)?history\\.com/topics/[^/]+/(?P<id>[\\w+-]+?)-video'
  8902. IE_DESC = 'History.com Topic'
  8903. _RETURN_TYPE = 'video'
  8904. class AMCNetworksIE(ThePlatformIE):
  8905. _module = 'yt_dlp.extractor.amcnetworks'
  8906. IE_NAME = 'AMCNetworks'
  8907. _VALID_URL = 'https?://(?:www\\.)?(?P<site>amc|bbcamerica|ifc|(?:we|sundance)tv)\\.com/(?P<id>(?:movies|shows(?:/[^/]+)+)/[^/?#&]+)'
  8908. _RETURN_TYPE = 'video'
  8909. class NBCIE(ThePlatformIE):
  8910. _module = 'yt_dlp.extractor.nbc'
  8911. IE_NAME = 'NBC'
  8912. _VALID_URL = 'https?(?P<permalink>://(?:www\\.)?nbc\\.com/(?:classic-tv/)?[^/]+/video/[^/]+/(?P<id>(?:NBCE|n)?\\d+))'
  8913. _RETURN_TYPE = 'video'
  8914. class NBCNewsIE(ThePlatformIE):
  8915. _module = 'yt_dlp.extractor.nbc'
  8916. IE_NAME = 'NBCNews'
  8917. _VALID_URL = '(?x)https?://(?:www\\.)?(?:nbcnews|today|msnbc)\\.com/([^/]+/)*(?:.*-)?(?P<id>[^/?]+)'
  8918. _RETURN_TYPE = 'video'
  8919. class TheStarIE(LazyLoadExtractor):
  8920. _module = 'yt_dlp.extractor.thestar'
  8921. IE_NAME = 'TheStar'
  8922. _VALID_URL = 'https?://(?:www\\.)?thestar\\.com/(?:[^/]+/)*(?P<id>.+)\\.html'
  8923. _RETURN_TYPE = 'video'
  8924. class TheSunIE(LazyLoadExtractor):
  8925. _module = 'yt_dlp.extractor.thesun'
  8926. IE_NAME = 'TheSun'
  8927. _VALID_URL = 'https?://(?:www\\.)?the-?sun(\\.co\\.uk|\\.com)/[^/]+/(?P<id>\\d+)'
  8928. _RETURN_TYPE = 'playlist'
  8929. class TheWeatherChannelIE(ThePlatformIE):
  8930. _module = 'yt_dlp.extractor.theweatherchannel'
  8931. IE_NAME = 'TheWeatherChannel'
  8932. _VALID_URL = 'https?://(?:www\\.)?weather\\.com(?P<asset_name>(?:/(?P<locale>[a-z]{2}-[A-Z]{2}))?/(?:[^/]+/)*video/(?P<id>[^/?#]+))'
  8933. _RETURN_TYPE = 'video'
  8934. class ThisAmericanLifeIE(LazyLoadExtractor):
  8935. _module = 'yt_dlp.extractor.thisamericanlife'
  8936. IE_NAME = 'ThisAmericanLife'
  8937. _VALID_URL = 'https?://(?:www\\.)?thisamericanlife\\.org/(?:radio-archives/episode/|play_full\\.php\\?play=)(?P<id>\\d+)'
  8938. _RETURN_TYPE = 'video'
  8939. class ThisOldHouseIE(LazyLoadExtractor):
  8940. _module = 'yt_dlp.extractor.thisoldhouse'
  8941. IE_NAME = 'ThisOldHouse'
  8942. _VALID_URL = 'https?://(?:www\\.)?thisoldhouse\\.com/(?:watch|how-to|tv-episode|(?:[^/?#]+/)?\\d+)/(?P<id>[^/?#]+)'
  8943. _NETRC_MACHINE = 'thisoldhouse'
  8944. _RETURN_TYPE = 'video'
  8945. class ThisVidIE(LazyLoadExtractor):
  8946. _module = 'yt_dlp.extractor.thisvid'
  8947. IE_NAME = 'ThisVid'
  8948. _VALID_URL = 'https?://(?:www\\.)?thisvid\\.com/(?P<type>videos|embed)/(?P<id>[A-Za-z0-9-]+)'
  8949. age_limit = 18
  8950. _RETURN_TYPE = 'video'
  8951. class ThisVidPlaylistBaseIE(LazyLoadExtractor):
  8952. _module = 'yt_dlp.extractor.thisvid'
  8953. IE_NAME = 'ThisVidPlaylistBase'
  8954. class ThisVidMemberIE(ThisVidPlaylistBaseIE):
  8955. _module = 'yt_dlp.extractor.thisvid'
  8956. IE_NAME = 'ThisVidMember'
  8957. _VALID_URL = 'https?://thisvid\\.com/members/(?P<id>\\d+)'
  8958. _RETURN_TYPE = 'playlist'
  8959. class ThisVidPlaylistIE(ThisVidPlaylistBaseIE):
  8960. _module = 'yt_dlp.extractor.thisvid'
  8961. IE_NAME = 'ThisVidPlaylist'
  8962. _VALID_URL = 'https?://thisvid\\.com/playlist/(?P<id>\\d+)/video/(?P<video_id>[A-Za-z0-9-]+)'
  8963. age_limit = 18
  8964. _RETURN_TYPE = 'any'
  8965. class ThreeQSDNIE(LazyLoadExtractor):
  8966. _module = 'yt_dlp.extractor.threeqsdn'
  8967. IE_NAME = '3qsdn'
  8968. _VALID_URL = 'https?://playout\\.3qsdn\\.com/(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  8969. IE_DESC = '3Q SDN'
  8970. _RETURN_TYPE = 'video'
  8971. class ThreeSpeakIE(LazyLoadExtractor):
  8972. _module = 'yt_dlp.extractor.threespeak'
  8973. IE_NAME = 'ThreeSpeak'
  8974. _VALID_URL = 'https?://(?:www\\.)?3speak\\.tv/watch\\?v\\=[^/]+/(?P<id>[^/$&#?]+)'
  8975. _RETURN_TYPE = 'video'
  8976. class ThreeSpeakUserIE(LazyLoadExtractor):
  8977. _module = 'yt_dlp.extractor.threespeak'
  8978. IE_NAME = 'ThreeSpeakUser'
  8979. _VALID_URL = 'https?://(?:www\\.)?3speak\\.tv/user/(?P<id>[^/$&?#]+)'
  8980. _RETURN_TYPE = 'playlist'
  8981. class TikTokBaseIE(LazyLoadExtractor):
  8982. _module = 'yt_dlp.extractor.tiktok'
  8983. IE_NAME = 'TikTokBase'
  8984. class DouyinIE(TikTokBaseIE):
  8985. _module = 'yt_dlp.extractor.tiktok'
  8986. IE_NAME = 'Douyin'
  8987. _VALID_URL = 'https?://(?:www\\.)?douyin\\.com/video/(?P<id>[0-9]+)'
  8988. _RETURN_TYPE = 'video'
  8989. class TikTokCollectionIE(TikTokBaseIE):
  8990. _module = 'yt_dlp.extractor.tiktok'
  8991. IE_NAME = 'tiktok:collection'
  8992. _VALID_URL = 'https?://www\\.tiktok\\.com/@(?P<user_id>[\\w.-]+)/collection/(?P<title>[^/?#]+)-(?P<id>\\d+)/?(?:[?#]|$)'
  8993. _RETURN_TYPE = 'playlist'
  8994. class TikTokBaseListIE(TikTokBaseIE):
  8995. _module = 'yt_dlp.extractor.tiktok'
  8996. IE_NAME = 'TikTokBaseList'
  8997. class TikTokEffectIE(TikTokBaseListIE):
  8998. _module = 'yt_dlp.extractor.tiktok'
  8999. IE_NAME = 'tiktok:effect'
  9000. _VALID_URL = 'https?://(?:www\\.)?tiktok\\.com/sticker/[\\w\\.-]+-(?P<id>[\\d]+)[/?#&]?'
  9001. _WORKING = False
  9002. _RETURN_TYPE = 'playlist'
  9003. class TikTokIE(TikTokBaseIE):
  9004. _module = 'yt_dlp.extractor.tiktok'
  9005. IE_NAME = 'TikTok'
  9006. _VALID_URL = 'https?://www\\.tiktok\\.com/(?:embed|@(?P<user_id>[\\w\\.-]+)?/video)/(?P<id>\\d+)'
  9007. _RETURN_TYPE = 'video'
  9008. class TikTokLiveIE(TikTokBaseIE):
  9009. _module = 'yt_dlp.extractor.tiktok'
  9010. IE_NAME = 'tiktok:live'
  9011. _VALID_URL = '(?x)https?://(?:\n (?:www\\.)?tiktok\\.com/@(?P<uploader>[\\w.-]+)/live|\n m\\.tiktok\\.com/share/live/(?P<id>\\d+)\n )'
  9012. _RETURN_TYPE = 'video'
  9013. class TikTokSoundIE(TikTokBaseListIE):
  9014. _module = 'yt_dlp.extractor.tiktok'
  9015. IE_NAME = 'tiktok:sound'
  9016. _VALID_URL = 'https?://(?:www\\.)?tiktok\\.com/music/[\\w\\.-]+-(?P<id>[\\d]+)[/?#&]?'
  9017. _WORKING = False
  9018. _RETURN_TYPE = 'playlist'
  9019. class TikTokTagIE(TikTokBaseListIE):
  9020. _module = 'yt_dlp.extractor.tiktok'
  9021. IE_NAME = 'tiktok:tag'
  9022. _VALID_URL = 'https?://(?:www\\.)?tiktok\\.com/tag/(?P<id>[^/?#&]+)'
  9023. _WORKING = False
  9024. _RETURN_TYPE = 'playlist'
  9025. class TikTokUserIE(TikTokBaseIE):
  9026. _module = 'yt_dlp.extractor.tiktok'
  9027. IE_NAME = 'tiktok:user'
  9028. _VALID_URL = '(?:tiktokuser:|https?://(?:www\\.)?tiktok\\.com/@)(?P<id>[\\w.-]+)/?(?:$|[#?])'
  9029. _RETURN_TYPE = 'playlist'
  9030. class TikTokVMIE(LazyLoadExtractor):
  9031. _module = 'yt_dlp.extractor.tiktok'
  9032. IE_NAME = 'vm.tiktok'
  9033. _VALID_URL = 'https?://(?:(?:vm|vt)\\.tiktok\\.com|(?:www\\.)tiktok\\.com/t)/(?P<id>\\w+)'
  9034. _RETURN_TYPE = 'video'
  9035. class TMZIE(LazyLoadExtractor):
  9036. _module = 'yt_dlp.extractor.tmz'
  9037. IE_NAME = 'TMZ'
  9038. _VALID_URL = 'https?://(?:www\\.)?tmz\\.com/.*'
  9039. _RETURN_TYPE = 'video'
  9040. class TNAFlixNetworkBaseIE(LazyLoadExtractor):
  9041. _module = 'yt_dlp.extractor.tnaflix'
  9042. IE_NAME = 'TNAFlixNetworkBase'
  9043. class TNAEMPFlixBaseIE(TNAFlixNetworkBaseIE):
  9044. _module = 'yt_dlp.extractor.tnaflix'
  9045. IE_NAME = 'TNAEMPFlixBase'
  9046. class EMPFlixIE(TNAEMPFlixBaseIE):
  9047. _module = 'yt_dlp.extractor.tnaflix'
  9048. IE_NAME = 'EMPFlix'
  9049. _VALID_URL = 'https?://(?:www\\.)?(?P<host>empflix)\\.com/(?:videos/(?P<display_id>.+?)-|[^/]+/(?P<display_id_2>[^/]+)/video)(?P<id>[0-9]+)'
  9050. age_limit = 18
  9051. _RETURN_TYPE = 'video'
  9052. class MovieFapIE(TNAFlixNetworkBaseIE):
  9053. _module = 'yt_dlp.extractor.tnaflix'
  9054. IE_NAME = 'MovieFap'
  9055. _VALID_URL = 'https?://(?:www\\.)?(?P<host>moviefap)\\.com/videos/(?P<id>[0-9a-f]+)/(?P<display_id>[^/]+)\\.html'
  9056. age_limit = 18
  9057. _RETURN_TYPE = 'video'
  9058. class TNAFlixIE(TNAEMPFlixBaseIE):
  9059. _module = 'yt_dlp.extractor.tnaflix'
  9060. IE_NAME = 'TNAFlix'
  9061. _VALID_URL = 'https?://(?:www\\.)?(?P<host>tnaflix)\\.com/[^/]+/(?P<display_id>[^/]+)/video(?P<id>\\d+)'
  9062. age_limit = 18
  9063. _RETURN_TYPE = 'video'
  9064. class TNAFlixNetworkEmbedIE(TNAFlixNetworkBaseIE):
  9065. _module = 'yt_dlp.extractor.tnaflix'
  9066. IE_NAME = 'TNAFlixNetworkEmbed'
  9067. _VALID_URL = 'https?://player\\.(?P<host>tnaflix|empflix)\\.com/video/(?P<id>\\d+)'
  9068. age_limit = 18
  9069. _RETURN_TYPE = 'video'
  9070. class MeWatchIE(LazyLoadExtractor):
  9071. _module = 'yt_dlp.extractor.toggle'
  9072. IE_NAME = 'mewatch'
  9073. _VALID_URL = 'https?://(?:(?:www|live)\\.)?mewatch\\.sg/watch/[^/?#&]+-(?P<id>[0-9]+)'
  9074. _RETURN_TYPE = 'video'
  9075. class ToggleIE(LazyLoadExtractor):
  9076. _module = 'yt_dlp.extractor.toggle'
  9077. IE_NAME = 'toggle'
  9078. _VALID_URL = '(?:https?://(?:(?:www\\.)?mewatch|video\\.toggle)\\.sg/(?:en|zh)/(?:[^/]+/){2,}|toggle:)(?P<id>[0-9]+)'
  9079. _RETURN_TYPE = 'video'
  9080. class ToggoIE(LazyLoadExtractor):
  9081. _module = 'yt_dlp.extractor.toggo'
  9082. IE_NAME = 'toggo'
  9083. _VALID_URL = 'https?://(?:www\\.)?toggo\\.de/(?:toggolino/)?[^/?#]+/(?:folge|video)/(?P<id>[^/?#]+)'
  9084. _RETURN_TYPE = 'video'
  9085. class TOnlineIE(LazyLoadExtractor):
  9086. _module = 'yt_dlp.extractor.tonline'
  9087. IE_NAME = 't-online.de'
  9088. _ENABLED = None
  9089. _VALID_URL = 'https?://(?:www\\.)?t-online\\.de/tv/(?:[^/]+/)*id_(?P<id>\\d+)'
  9090. _WORKING = False
  9091. _RETURN_TYPE = 'video'
  9092. class ToonGogglesIE(LazyLoadExtractor):
  9093. _module = 'yt_dlp.extractor.toongoggles'
  9094. IE_NAME = 'ToonGoggles'
  9095. _VALID_URL = 'https?://(?:www\\.)?toongoggles\\.com/shows/(?P<show_id>\\d+)(?:/[^/]+/episodes/(?P<episode_id>\\d+))?'
  9096. _RETURN_TYPE = 'any'
  9097. class TouTvIE(RadioCanadaIE):
  9098. _module = 'yt_dlp.extractor.toutv'
  9099. IE_NAME = 'tou.tv'
  9100. _VALID_URL = 'https?://ici\\.tou\\.tv/(?P<id>[a-zA-Z0-9_-]+(?:/S[0-9]+[EC][0-9]+)?)'
  9101. _NETRC_MACHINE = 'toutv'
  9102. _RETURN_TYPE = 'video'
  9103. class ToypicsIE(LazyLoadExtractor):
  9104. _module = 'yt_dlp.extractor.toypics'
  9105. IE_NAME = 'Toypics'
  9106. _VALID_URL = 'https?://videos\\.toypics\\.net/view/(?P<id>[0-9]+)'
  9107. _WORKING = False
  9108. IE_DESC = 'Toypics video'
  9109. age_limit = 18
  9110. _RETURN_TYPE = 'video'
  9111. class ToypicsUserIE(LazyLoadExtractor):
  9112. _module = 'yt_dlp.extractor.toypics'
  9113. IE_NAME = 'ToypicsUser'
  9114. _VALID_URL = 'https?://videos\\.toypics\\.net/(?!view)(?P<id>[^/?#&]+)'
  9115. _WORKING = False
  9116. IE_DESC = 'Toypics user profile'
  9117. _RETURN_TYPE = 'playlist'
  9118. class TrailerAddictIE(LazyLoadExtractor):
  9119. _module = 'yt_dlp.extractor.traileraddict'
  9120. IE_NAME = 'TrailerAddict'
  9121. _VALID_URL = '(?:https?://)?(?:www\\.)?traileraddict\\.com/(?:trailer|clip)/(?P<movie>.+?)/(?P<trailer_name>.+)'
  9122. _WORKING = False
  9123. _RETURN_TYPE = 'video'
  9124. class TrillerBaseIE(LazyLoadExtractor):
  9125. _module = 'yt_dlp.extractor.triller'
  9126. IE_NAME = 'TrillerBase'
  9127. _NETRC_MACHINE = 'triller'
  9128. class TrillerIE(TrillerBaseIE):
  9129. _module = 'yt_dlp.extractor.triller'
  9130. IE_NAME = 'Triller'
  9131. _VALID_URL = '(?x)\n https?://(?:www\\.)?triller\\.co/\n @(?P<username>[\\w.]+)/video/(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})\n '
  9132. _NETRC_MACHINE = 'triller'
  9133. _RETURN_TYPE = 'video'
  9134. class TrillerShortIE(LazyLoadExtractor):
  9135. _module = 'yt_dlp.extractor.triller'
  9136. IE_NAME = 'TrillerShort'
  9137. _VALID_URL = 'https?://v\\.triller\\.co/(?P<id>\\w+)'
  9138. _RETURN_TYPE = 'video'
  9139. class TrillerUserIE(TrillerBaseIE):
  9140. _module = 'yt_dlp.extractor.triller'
  9141. IE_NAME = 'TrillerUser'
  9142. _VALID_URL = 'https?://(?:www\\.)?triller\\.co/@(?P<id>[\\w.]+)/?(?:$|[#?])'
  9143. _NETRC_MACHINE = 'triller'
  9144. _RETURN_TYPE = 'playlist'
  9145. class TrovoBaseIE(LazyLoadExtractor):
  9146. _module = 'yt_dlp.extractor.trovo'
  9147. IE_NAME = 'TrovoBase'
  9148. class TrovoChannelBaseIE(TrovoBaseIE):
  9149. _module = 'yt_dlp.extractor.trovo'
  9150. IE_NAME = 'TrovoChannelBase'
  9151. class TrovoChannelClipIE(TrovoChannelBaseIE):
  9152. _module = 'yt_dlp.extractor.trovo'
  9153. IE_NAME = 'TrovoChannelClip'
  9154. _VALID_URL = 'trovoclip:(?P<id>[^\\s]+)'
  9155. IE_DESC = 'All Clips of a trovo.live channel; "trovoclip:" prefix'
  9156. _RETURN_TYPE = 'playlist'
  9157. class TrovoChannelVodIE(TrovoChannelBaseIE):
  9158. _module = 'yt_dlp.extractor.trovo'
  9159. IE_NAME = 'TrovoChannelVod'
  9160. _VALID_URL = 'trovovod:(?P<id>[^\\s]+)'
  9161. IE_DESC = 'All VODs of a trovo.live channel; "trovovod:" prefix'
  9162. _RETURN_TYPE = 'playlist'
  9163. class TrovoIE(TrovoBaseIE):
  9164. _module = 'yt_dlp.extractor.trovo'
  9165. IE_NAME = 'Trovo'
  9166. _VALID_URL = 'https?://(?:www\\.)?trovo\\.live/(?:s/)?(?!(?:clip|video)/)(?P<id>(?!s/)[^/?&#]+(?![^#]+[?&]vid=))'
  9167. _RETURN_TYPE = 'video'
  9168. class TrovoVodIE(TrovoBaseIE):
  9169. _module = 'yt_dlp.extractor.trovo'
  9170. IE_NAME = 'TrovoVod'
  9171. _VALID_URL = 'https?://(?:www\\.)?trovo\\.live/(?:clip|video|s)/(?:[^/]+/\\d+[^#]*[?&]vid=)?(?P<id>(?<!/s/)[^/?&#]+)'
  9172. _RETURN_TYPE = 'video'
  9173. class TrtCocukVideoIE(LazyLoadExtractor):
  9174. _module = 'yt_dlp.extractor.trtcocuk'
  9175. IE_NAME = 'TrtCocukVideo'
  9176. _VALID_URL = 'https?://www\\.trtcocuk\\.net\\.tr/video/(?P<id>[\\w-]+)'
  9177. _RETURN_TYPE = 'video'
  9178. class TrtWorldIE(LazyLoadExtractor):
  9179. _module = 'yt_dlp.extractor.trtworld'
  9180. IE_NAME = 'TrtWorld'
  9181. _VALID_URL = 'https?://www\\.trtworld\\.com/video/[\\w-]+/[\\w-]+-(?P<id>\\d+)'
  9182. _RETURN_TYPE = 'video'
  9183. class TrueIDIE(LazyLoadExtractor):
  9184. _module = 'yt_dlp.extractor.trueid'
  9185. IE_NAME = 'TrueID'
  9186. _VALID_URL = 'https?://(?P<domain>vn\\.trueid\\.net|trueid\\.(?:id|ph))/(?:movie|series/[^/]+)/(?P<id>[^/?#&]+)'
  9187. age_limit = 13
  9188. _RETURN_TYPE = 'video'
  9189. class TruNewsIE(LazyLoadExtractor):
  9190. _module = 'yt_dlp.extractor.trunews'
  9191. IE_NAME = 'TruNews'
  9192. _VALID_URL = 'https?://(?:www\\.)?trunews\\.com/stream/(?P<id>[^/?#&]+)'
  9193. _RETURN_TYPE = 'video'
  9194. class TruthIE(LazyLoadExtractor):
  9195. _module = 'yt_dlp.extractor.truth'
  9196. IE_NAME = 'Truth'
  9197. _VALID_URL = 'https?://truthsocial\\.com/@[^/]+/posts/(?P<id>\\d+)'
  9198. _RETURN_TYPE = 'video'
  9199. class TruTVIE(TurnerBaseIE):
  9200. _module = 'yt_dlp.extractor.trutv'
  9201. IE_NAME = 'TruTV'
  9202. _VALID_URL = 'https?://(?:www\\.)?trutv\\.com/(?:shows|full-episodes)/(?P<series_slug>[0-9A-Za-z-]+)/(?:videos/(?P<clip_slug>[0-9A-Za-z-]+)|(?P<id>\\d+))'
  9203. _RETURN_TYPE = 'video'
  9204. class Tube8IE(LazyLoadExtractor):
  9205. _module = 'yt_dlp.extractor.tube8'
  9206. IE_NAME = 'Tube8'
  9207. _VALID_URL = 'https?://(?:www\\.)?tube8\\.com/(?:[^/]+/)+(?P<display_id>[^/]+)/(?P<id>\\d+)'
  9208. _WORKING = False
  9209. age_limit = 18
  9210. _RETURN_TYPE = 'video'
  9211. class TubeTuGrazBaseIE(LazyLoadExtractor):
  9212. _module = 'yt_dlp.extractor.tubetugraz'
  9213. IE_NAME = 'TubeTuGrazBase'
  9214. _NETRC_MACHINE = 'tubetugraz'
  9215. class TubeTuGrazIE(TubeTuGrazBaseIE):
  9216. _module = 'yt_dlp.extractor.tubetugraz'
  9217. IE_NAME = 'TubeTuGraz'
  9218. _VALID_URL = '(?x)\n https?://tube\\.tugraz\\.at/paella/ui/watch.html\\?id=\n (?P<id>[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})\n '
  9219. IE_DESC = 'tube.tugraz.at'
  9220. _NETRC_MACHINE = 'tubetugraz'
  9221. _RETURN_TYPE = 'video'
  9222. class TubeTuGrazSeriesIE(TubeTuGrazBaseIE):
  9223. _module = 'yt_dlp.extractor.tubetugraz'
  9224. IE_NAME = 'TubeTuGrazSeries'
  9225. _VALID_URL = '(?x)\n https?://tube\\.tugraz\\.at/paella/ui/browse\\.html\\?series=\n (?P<id>[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})\n '
  9226. _NETRC_MACHINE = 'tubetugraz'
  9227. _RETURN_TYPE = 'playlist'
  9228. class TubiTvIE(LazyLoadExtractor):
  9229. _module = 'yt_dlp.extractor.tubitv'
  9230. IE_NAME = 'tubitv'
  9231. _VALID_URL = 'https?://(?:www\\.)?tubitv\\.com/(?P<type>video|movies|tv-shows)/(?P<id>\\d+)'
  9232. _NETRC_MACHINE = 'tubitv'
  9233. _RETURN_TYPE = 'video'
  9234. class TubiTvShowIE(LazyLoadExtractor):
  9235. _module = 'yt_dlp.extractor.tubitv'
  9236. IE_NAME = 'tubitv:series'
  9237. _VALID_URL = 'https?://(?:www\\.)?tubitv\\.com/series/\\d+/(?P<show_name>[^/?#]+)(?:/season-(?P<season>\\d+))?'
  9238. _RETURN_TYPE = 'playlist'
  9239. class TumblrIE(LazyLoadExtractor):
  9240. _module = 'yt_dlp.extractor.tumblr'
  9241. IE_NAME = 'Tumblr'
  9242. _VALID_URL = 'https?://(?P<blog_name_1>[^/?#&]+)\\.tumblr\\.com/(?:post|video|(?P<blog_name_2>[a-zA-Z\\d-]+))/(?P<id>[0-9]+)(?:$|[/?#])'
  9243. _NETRC_MACHINE = 'tumblr'
  9244. _RETURN_TYPE = 'any'
  9245. class TuneInBaseIE(LazyLoadExtractor):
  9246. _module = 'yt_dlp.extractor.tunein'
  9247. IE_NAME = 'TuneInBase'
  9248. class TuneInPodcastEpisodeIE(TuneInBaseIE):
  9249. _module = 'yt_dlp.extractor.tunein'
  9250. IE_NAME = 'TuneInPodcastEpisode'
  9251. _VALID_URL = 'https?://(?:www\\.)?tunein\\.com/podcasts/(?:[^?&]+-)?(?P<podcast_id>p\\d+)/?\\?topicId=(?P<id>\\w\\d+)'
  9252. _RETURN_TYPE = 'video'
  9253. class TuneInPodcastIE(TuneInBaseIE):
  9254. _module = 'yt_dlp.extractor.tunein'
  9255. IE_NAME = 'TuneInPodcast'
  9256. _VALID_URL = 'https?://(?:www\\.)?tunein\\.com/(?:podcasts/[^?#]+-|embed/player/)(?P<id>p\\d+)/?(?:#|$)'
  9257. _RETURN_TYPE = 'playlist'
  9258. class TuneInShortenerIE(LazyLoadExtractor):
  9259. _module = 'yt_dlp.extractor.tunein'
  9260. IE_NAME = 'tunein:shortener'
  9261. _VALID_URL = 'https?://tun\\.in/(?P<id>[A-Za-z0-9]+)'
  9262. IE_DESC = False
  9263. _RETURN_TYPE = 'video'
  9264. class TuneInStationIE(TuneInBaseIE):
  9265. _module = 'yt_dlp.extractor.tunein'
  9266. IE_NAME = 'TuneInStation'
  9267. _VALID_URL = 'https?://(?:www\\.)?tunein\\.com(?:/radio/[^?#]+-|/embed/player/)(?P<id>s\\d+)'
  9268. _RETURN_TYPE = 'video'
  9269. class TV2IE(LazyLoadExtractor):
  9270. _module = 'yt_dlp.extractor.tv2'
  9271. IE_NAME = 'TV2'
  9272. _VALID_URL = 'https?://(?:www\\.)?tv2\\.no/v(?:ideo)?\\d*/(?:[^?#]+/)*(?P<id>\\d+)'
  9273. _RETURN_TYPE = 'video'
  9274. class KatsomoIE(LazyLoadExtractor):
  9275. _module = 'yt_dlp.extractor.tv2'
  9276. IE_NAME = 'Katsomo'
  9277. _VALID_URL = 'https?://(?:www\\.)?(?:katsomo|mtv(uutiset)?)\\.fi/(?:sarja/[0-9a-z-]+-\\d+/[0-9a-z-]+-|(?:#!/)?jakso/(?:\\d+/[^/]+/)?|video/prog)(?P<id>\\d+)'
  9278. _WORKING = False
  9279. _RETURN_TYPE = 'video'
  9280. class MTVUutisetArticleIE(LazyLoadExtractor):
  9281. _module = 'yt_dlp.extractor.tv2'
  9282. IE_NAME = 'MTVUutisetArticle'
  9283. _VALID_URL = 'https?://(?:www\\.)mtvuutiset\\.fi/artikkeli/[^/]+/(?P<id>\\d+)'
  9284. _WORKING = False
  9285. _RETURN_TYPE = 'video'
  9286. class TV2ArticleIE(LazyLoadExtractor):
  9287. _module = 'yt_dlp.extractor.tv2'
  9288. IE_NAME = 'TV2Article'
  9289. _VALID_URL = 'https?://(?:www\\.)?tv2\\.no/(?!v(?:ideo)?\\d*/)[^?#]+/(?P<id>\\d+)'
  9290. _RETURN_TYPE = 'playlist'
  9291. class TV2DKIE(LazyLoadExtractor):
  9292. _module = 'yt_dlp.extractor.tv2dk'
  9293. IE_NAME = 'TV2DK'
  9294. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?\n (?:\n tvsyd|\n tv2ostjylland|\n tvmidtvest|\n tv2fyn|\n tv2east|\n tv2lorry|\n tv2nord\n )\\.dk/\n (:[^/]+/)*\n (?P<id>[^/?\\#&]+)\n '
  9295. _RETURN_TYPE = 'video'
  9296. class TV2DKBornholmPlayIE(LazyLoadExtractor):
  9297. _module = 'yt_dlp.extractor.tv2dk'
  9298. IE_NAME = 'TV2DKBornholmPlay'
  9299. _VALID_URL = 'https?://play\\.tv2bornholm\\.dk/\\?.*?\\bid=(?P<id>\\d+)'
  9300. _RETURN_TYPE = 'video'
  9301. class TV2HuIE(LazyLoadExtractor):
  9302. _module = 'yt_dlp.extractor.tv2hu'
  9303. IE_NAME = 'tv2play.hu'
  9304. _VALID_URL = 'https?://(?:www\\.)?tv2play\\.hu/(?!szalag/)(?P<id>[^#&?]+)'
  9305. _RETURN_TYPE = 'video'
  9306. class TV2HuSeriesIE(LazyLoadExtractor):
  9307. _module = 'yt_dlp.extractor.tv2hu'
  9308. IE_NAME = 'tv2playseries.hu'
  9309. _VALID_URL = 'https?://(?:www\\.)?tv2play\\.hu/szalag/(?P<id>[^#&?]+)'
  9310. _RETURN_TYPE = 'playlist'
  9311. class TV4IE(LazyLoadExtractor):
  9312. _module = 'yt_dlp.extractor.tv4'
  9313. IE_NAME = 'TV4'
  9314. _VALID_URL = '(?x)https?://(?:www\\.)?\n (?:\n tv4\\.se/(?:[^/]+)/klipp/(?:.*)-|\n tv4play\\.se/\n (?:\n (?:program|barn)/(?:(?:[^/]+/){1,2}|(?:[^\\?]+)\\?video_id=)|\n iframe/video/|\n film/|\n sport/|\n )\n )(?P<id>[0-9]+)'
  9315. IE_DESC = 'tv4.se and tv4play.se'
  9316. _RETURN_TYPE = 'video'
  9317. class TV5MondePlusIE(LazyLoadExtractor):
  9318. _module = 'yt_dlp.extractor.tv5mondeplus'
  9319. IE_NAME = 'TV5MONDE'
  9320. _VALID_URL = 'https?://(?:www\\.)?tv5monde\\.com/tv/video/(?P<id>[^/?#]+)'
  9321. _RETURN_TYPE = 'video'
  9322. class TV5UnisBaseIE(LazyLoadExtractor):
  9323. _module = 'yt_dlp.extractor.tv5unis'
  9324. IE_NAME = 'TV5UnisBase'
  9325. class TV5UnisIE(TV5UnisBaseIE):
  9326. _module = 'yt_dlp.extractor.tv5unis'
  9327. IE_NAME = 'tv5unis'
  9328. _VALID_URL = 'https?://(?:www\\.)?tv5unis\\.ca/videos/(?P<id>[^/]+)(?:/saisons/(?P<season_number>\\d+)/episodes/(?P<episode_number>\\d+))?/?(?:[?#&]|$)'
  9329. age_limit = 8
  9330. _RETURN_TYPE = 'video'
  9331. class TV5UnisVideoIE(TV5UnisBaseIE):
  9332. _module = 'yt_dlp.extractor.tv5unis'
  9333. IE_NAME = 'tv5unis:video'
  9334. _VALID_URL = 'https?://(?:www\\.)?tv5unis\\.ca/videos/[^/]+/(?P<id>\\d+)'
  9335. _RETURN_TYPE = 'video'
  9336. class TV24UAVideoIE(LazyLoadExtractor):
  9337. _module = 'yt_dlp.extractor.tv24ua'
  9338. IE_NAME = '24tv.ua'
  9339. _VALID_URL = 'https?://24tv\\.ua/news/showPlayer\\.do.*?(?:\\?|&)objectId=(?P<id>\\d+)'
  9340. _RETURN_TYPE = 'video'
  9341. class TVAIE(LazyLoadExtractor):
  9342. _module = 'yt_dlp.extractor.tva'
  9343. IE_NAME = 'tvaplus'
  9344. _VALID_URL = 'https?://(?:www\\.)?tvaplus\\.ca/(?:[^/?#]+/)*[\\w-]+-(?P<id>\\d+)(?:$|[#?])'
  9345. IE_DESC = 'TVA+'
  9346. _RETURN_TYPE = 'video'
  9347. class TVANouvellesArticleIE(LazyLoadExtractor):
  9348. _module = 'yt_dlp.extractor.tvanouvelles'
  9349. IE_NAME = 'TVANouvellesArticle'
  9350. _VALID_URL = 'https?://(?:www\\.)?tvanouvelles\\.ca/(?:[^/]+/)+(?P<id>[^/?#&]+)'
  9351. _RETURN_TYPE = 'playlist'
  9352. @classmethod
  9353. def suitable(cls, url):
  9354. return False if TVANouvellesIE.suitable(url) else super().suitable(url)
  9355. class TVANouvellesIE(LazyLoadExtractor):
  9356. _module = 'yt_dlp.extractor.tvanouvelles'
  9357. IE_NAME = 'TVANouvelles'
  9358. _VALID_URL = 'https?://(?:www\\.)?tvanouvelles\\.ca/videos/(?P<id>\\d+)'
  9359. _RETURN_TYPE = 'video'
  9360. class TVCIE(LazyLoadExtractor):
  9361. _module = 'yt_dlp.extractor.tvc'
  9362. IE_NAME = 'TVC'
  9363. _VALID_URL = 'https?://(?:www\\.)?tvc\\.ru/video/iframe/id/(?P<id>\\d+)'
  9364. _RETURN_TYPE = 'video'
  9365. class TVCArticleIE(LazyLoadExtractor):
  9366. _module = 'yt_dlp.extractor.tvc'
  9367. IE_NAME = 'TVCArticle'
  9368. _VALID_URL = 'https?://(?:www\\.)?tvc\\.ru/(?!video/iframe/id/)(?P<id>[^?#]+)'
  9369. _RETURN_TYPE = 'video'
  9370. class TVerIE(LazyLoadExtractor):
  9371. _module = 'yt_dlp.extractor.tver'
  9372. IE_NAME = 'TVer'
  9373. _VALID_URL = 'https?://(?:www\\.)?tver\\.jp/(?:(?P<type>lp|corner|series|episodes?|feature)/)+(?P<id>[a-zA-Z0-9]+)'
  9374. _RETURN_TYPE = 'any'
  9375. class TvigleIE(LazyLoadExtractor):
  9376. _module = 'yt_dlp.extractor.tvigle'
  9377. IE_NAME = 'tvigle'
  9378. _VALID_URL = 'https?://(?:www\\.)?(?:tvigle\\.ru/(?:[^/]+/)+(?P<display_id>[^/]+)/$|cloud\\.tvigle\\.ru/video/(?P<id>\\d+))'
  9379. IE_DESC = 'Интернет-телевидение Tvigle.ru'
  9380. age_limit = 12
  9381. _RETURN_TYPE = 'video'
  9382. class TVIPlayerIE(LazyLoadExtractor):
  9383. _module = 'yt_dlp.extractor.tviplayer'
  9384. IE_NAME = 'TVIPlayer'
  9385. _VALID_URL = 'https?://tviplayer\\.iol\\.pt(/programa/[\\w-]+/[a-f0-9]+)?/\\w+/(?P<id>\\w+)'
  9386. _RETURN_TYPE = 'video'
  9387. class TVLandIE(MTVServicesInfoExtractor):
  9388. _module = 'yt_dlp.extractor.tvland'
  9389. IE_NAME = 'tvland.com'
  9390. _VALID_URL = 'https?://(?:www\\.)?tvland\\.com/(?:video-clips|(?:full-)?episodes)/(?P<id>[^/?#.]+)'
  9391. _RETURN_TYPE = 'any'
  9392. class TVN24IE(LazyLoadExtractor):
  9393. _module = 'yt_dlp.extractor.tvn24'
  9394. IE_NAME = 'TVN24'
  9395. _VALID_URL = 'https?://(?:(?!eurosport)[^/]+\\.)?tvn24(?:bis)?\\.pl/(?:[^/?#]+/)*(?P<id>[^/?#]+)'
  9396. _WORKING = False
  9397. _RETURN_TYPE = 'video'
  9398. class TVNoeIE(LazyLoadExtractor):
  9399. _module = 'yt_dlp.extractor.tvnoe'
  9400. IE_NAME = 'TVNoe'
  9401. _VALID_URL = 'https?://(?:www\\.)?tvnoe\\.cz/video/(?P<id>[0-9]+)'
  9402. _WORKING = False
  9403. _RETURN_TYPE = 'video'
  9404. class TVOpenGrBaseIE(LazyLoadExtractor):
  9405. _module = 'yt_dlp.extractor.tvopengr'
  9406. IE_NAME = 'TVOpenGrBase'
  9407. class TVOpenGrEmbedIE(TVOpenGrBaseIE):
  9408. _module = 'yt_dlp.extractor.tvopengr'
  9409. IE_NAME = 'tvopengr:embed'
  9410. _VALID_URL = '(?:https?:)?//(?:www\\.|cdn\\.|)(?:tvopen|ethnos).gr/embed/(?P<id>\\d+)'
  9411. IE_DESC = 'tvopen.gr embedded videos'
  9412. _RETURN_TYPE = 'video'
  9413. class TVOpenGrWatchIE(TVOpenGrBaseIE):
  9414. _module = 'yt_dlp.extractor.tvopengr'
  9415. IE_NAME = 'tvopengr:watch'
  9416. _VALID_URL = 'https?://(?P<netloc>(?:www\\.)?(?:tvopen|ethnos)\\.gr)/watch/(?P<id>\\d+)/(?P<slug>[^/]+)'
  9417. IE_DESC = 'tvopen.gr (and ethnos.gr) videos'
  9418. _RETURN_TYPE = 'video'
  9419. class TVPIE(LazyLoadExtractor):
  9420. _module = 'yt_dlp.extractor.tvp'
  9421. IE_NAME = 'tvp'
  9422. _VALID_URL = 'https?://(?:[^/]+\\.)?(?:tvp(?:parlament)?\\.(?:pl|info)|tvpworld\\.com|swipeto\\.pl)/(?:(?!\\d+/)[^/]+/)*(?P<id>\\d+)(?:[/?#]|$)'
  9423. IE_DESC = 'Telewizja Polska'
  9424. age_limit = 12
  9425. _RETURN_TYPE = 'any'
  9426. class TVPEmbedIE(LazyLoadExtractor):
  9427. _module = 'yt_dlp.extractor.tvp'
  9428. IE_NAME = 'tvp:embed'
  9429. _VALID_URL = '(?x)\n (?:\n tvp:\n |https?://\n (?:[^/]+\\.)?\n (?:tvp(?:parlament)?\\.pl|tvp\\.info|tvpworld\\.com|swipeto\\.pl)/\n (?:sess/\n (?:tvplayer\\.php\\?.*?object_id\n |TVPlayer2/(?:embed|api)\\.php\\?.*[Ii][Dd])\n |shared/details\\.php\\?.*?object_id)\n =)\n (?P<id>\\d+)\n '
  9430. IE_DESC = 'Telewizja Polska'
  9431. age_limit = 12
  9432. _RETURN_TYPE = 'video'
  9433. class TVPStreamIE(LazyLoadExtractor):
  9434. _module = 'yt_dlp.extractor.tvp'
  9435. IE_NAME = 'tvp:stream'
  9436. _VALID_URL = '(?:tvpstream:|https?://(?:tvpstream\\.vod|stream)\\.tvp\\.pl/(?:\\?(?:[^&]+[&;])*channel_id=)?)(?P<id>\\d*)'
  9437. class TVPVODBaseIE(LazyLoadExtractor):
  9438. _module = 'yt_dlp.extractor.tvp'
  9439. IE_NAME = 'TVPVODBase'
  9440. class TVPVODSeriesIE(TVPVODBaseIE):
  9441. _module = 'yt_dlp.extractor.tvp'
  9442. IE_NAME = 'tvp:vod:series'
  9443. _VALID_URL = 'https?://vod\\.tvp\\.pl/[a-z\\d-]+,\\d+/[a-z\\d-]+-odcinki,(?P<id>\\d+)(?:\\?[^#]+)?(?:#.+)?$'
  9444. age_limit = 12
  9445. _RETURN_TYPE = 'playlist'
  9446. class TVPVODVideoIE(TVPVODBaseIE):
  9447. _module = 'yt_dlp.extractor.tvp'
  9448. IE_NAME = 'tvp:vod'
  9449. _VALID_URL = 'https?://vod\\.tvp\\.pl/(?P<category>[a-z\\d-]+,\\d+)/[a-z\\d-]+(?<!-odcinki)(?:-odcinki,\\d+/odcinek-\\d+,S\\d+E\\d+)?,(?P<id>\\d+)/?(?:[?#]|$)'
  9450. age_limit = 16
  9451. _RETURN_TYPE = 'video'
  9452. class TVPlayHomeIE(LazyLoadExtractor):
  9453. _module = 'yt_dlp.extractor.tvplay'
  9454. IE_NAME = 'TVPlayHome'
  9455. _VALID_URL = '(?x)\n https?://\n (?:tv3?)?\n play\\.(?:tv3|skaties)\\.(?P<country>lv|lt|ee)/\n (?P<live>lives/)?\n [^?#&]+(?:episode|programme|clip)-(?P<id>\\d+)\n '
  9456. _RETURN_TYPE = 'video'
  9457. class TVPlayIE(LazyLoadExtractor):
  9458. _module = 'yt_dlp.extractor.tvplay'
  9459. IE_NAME = 'mtg'
  9460. _VALID_URL = '(?x)\n (?:\n mtg:|\n https?://\n (?:www\\.)?\n (?:\n tvplay(?:\\.skaties)?\\.lv(?:/parraides)?|\n (?:tv3play|play\\.tv3)\\.lt(?:/programos)?|\n tv3play(?:\\.tv3)?\\.ee/sisu\n )\n /(?:[^/]+/)+\n )\n (?P<id>\\d+)\n '
  9461. IE_DESC = 'MTG services'
  9462. _RETURN_TYPE = 'video'
  9463. class TVPlayerIE(LazyLoadExtractor):
  9464. _module = 'yt_dlp.extractor.tvplayer'
  9465. IE_NAME = 'TVPlayer'
  9466. _VALID_URL = 'https?://(?:www\\.)?tvplayer\\.com/watch/(?P<id>[^/?#]+)'
  9467. _RETURN_TYPE = 'video'
  9468. class TweakersIE(LazyLoadExtractor):
  9469. _module = 'yt_dlp.extractor.tweakers'
  9470. IE_NAME = 'Tweakers'
  9471. _VALID_URL = 'https?://tweakers\\.net/video/(?P<id>\\d+)'
  9472. _RETURN_TYPE = 'video'
  9473. class TwentyMinutenIE(LazyLoadExtractor):
  9474. _module = 'yt_dlp.extractor.twentymin'
  9475. IE_NAME = '20min'
  9476. _VALID_URL = '(?x)\n https?://\n (?:www\\.)?20min\\.ch/\n (?:\n videotv/*\\?.*?\\bvid=|\n videoplayer/videoplayer\\.html\\?.*?\\bvideoId@\n )\n (?P<id>\\d+)\n '
  9477. _RETURN_TYPE = 'video'
  9478. class TwentyThreeVideoIE(LazyLoadExtractor):
  9479. _module = 'yt_dlp.extractor.twentythreevideo'
  9480. IE_NAME = '23video'
  9481. _VALID_URL = 'https?://(?P<domain>[^.]+\\.(?:twentythree\\.net|23video\\.com|filmweb\\.no))/v\\.ihtml/player\\.html\\?(?P<query>.*?\\bphoto(?:_|%5f)id=(?P<id>\\d+).*)'
  9482. _RETURN_TYPE = 'video'
  9483. class TwitCastingIE(LazyLoadExtractor):
  9484. _module = 'yt_dlp.extractor.twitcasting'
  9485. IE_NAME = 'TwitCasting'
  9486. _VALID_URL = 'https?://(?:[^/?#]+\\.)?twitcasting\\.tv/(?P<uploader_id>[^/?#]+)/(?:movie|twplayer)/(?P<id>\\d+)'
  9487. _RETURN_TYPE = 'video'
  9488. class TwitCastingLiveIE(LazyLoadExtractor):
  9489. _module = 'yt_dlp.extractor.twitcasting'
  9490. IE_NAME = 'TwitCastingLive'
  9491. _VALID_URL = 'https?://(?:[^/?#]+\\.)?twitcasting\\.tv/(?P<id>[^/?#]+)/?(?:[#?]|$)'
  9492. _RETURN_TYPE = 'video'
  9493. class TwitCastingUserIE(LazyLoadExtractor):
  9494. _module = 'yt_dlp.extractor.twitcasting'
  9495. IE_NAME = 'TwitCastingUser'
  9496. _VALID_URL = 'https?://(?:[^/?#]+\\.)?twitcasting\\.tv/(?P<id>[^/?#]+)/(?:show|archive)/?(?:[#?]|$)'
  9497. _RETURN_TYPE = 'playlist'
  9498. class TwitchBaseIE(LazyLoadExtractor):
  9499. _module = 'yt_dlp.extractor.twitch'
  9500. IE_NAME = 'TwitchBase'
  9501. _NETRC_MACHINE = 'twitch'
  9502. class TwitchClipsIE(TwitchBaseIE):
  9503. _module = 'yt_dlp.extractor.twitch'
  9504. IE_NAME = 'twitch:clips'
  9505. _VALID_URL = '(?x)\n https?://\n (?:\n clips\\.twitch\\.tv/(?:embed\\?.*?\\bclip=|(?:[^/]+/)*)|\n (?:(?:www|go|m)\\.)?twitch\\.tv/(?:[^/]+/)?clip/\n )\n (?P<id>[^/?#&]+)\n '
  9506. _NETRC_MACHINE = 'twitch'
  9507. _RETURN_TYPE = 'video'
  9508. class TwitchCollectionIE(TwitchBaseIE):
  9509. _module = 'yt_dlp.extractor.twitch'
  9510. IE_NAME = 'TwitchCollection'
  9511. _VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/collections/(?P<id>[^/]+)'
  9512. _NETRC_MACHINE = 'twitch'
  9513. _RETURN_TYPE = 'playlist'
  9514. class TwitchStreamIE(TwitchBaseIE):
  9515. _module = 'yt_dlp.extractor.twitch'
  9516. IE_NAME = 'twitch:stream'
  9517. _VALID_URL = '(?x)\n https?://\n (?:\n (?:(?:www|go|m)\\.)?twitch\\.tv/|\n player\\.twitch\\.tv/\\?.*?\\bchannel=\n )\n (?P<id>[^/#?]+)\n '
  9518. _NETRC_MACHINE = 'twitch'
  9519. _RETURN_TYPE = 'video'
  9520. @classmethod
  9521. def suitable(cls, url):
  9522. return (False
  9523. if any(ie.suitable(url) for ie in (
  9524. TwitchVodIE,
  9525. TwitchCollectionIE,
  9526. TwitchVideosIE,
  9527. TwitchVideosClipsIE,
  9528. TwitchVideosCollectionsIE,
  9529. TwitchClipsIE))
  9530. else super().suitable(url))
  9531. class TwitchPlaylistBaseIE(TwitchBaseIE):
  9532. _module = 'yt_dlp.extractor.twitch'
  9533. IE_NAME = 'TwitchPlaylistBase'
  9534. _NETRC_MACHINE = 'twitch'
  9535. class TwitchVideosClipsIE(TwitchPlaylistBaseIE):
  9536. _module = 'yt_dlp.extractor.twitch'
  9537. IE_NAME = 'TwitchVideosClips'
  9538. _VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/(?P<id>[^/]+)/(?:clips|videos/*?\\?.*?\\bfilter=clips)'
  9539. _NETRC_MACHINE = 'twitch'
  9540. _RETURN_TYPE = 'playlist'
  9541. class TwitchVideosCollectionsIE(TwitchPlaylistBaseIE):
  9542. _module = 'yt_dlp.extractor.twitch'
  9543. IE_NAME = 'TwitchVideosCollections'
  9544. _VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/(?P<id>[^/]+)/videos/*?\\?.*?\\bfilter=collections'
  9545. _NETRC_MACHINE = 'twitch'
  9546. _RETURN_TYPE = 'playlist'
  9547. class TwitchVideosIE(TwitchPlaylistBaseIE):
  9548. _module = 'yt_dlp.extractor.twitch'
  9549. IE_NAME = 'TwitchVideos'
  9550. _VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/(?P<id>[^/]+)/(?:videos|profile)'
  9551. _NETRC_MACHINE = 'twitch'
  9552. _RETURN_TYPE = 'playlist'
  9553. @classmethod
  9554. def suitable(cls, url):
  9555. return (False
  9556. if any(ie.suitable(url) for ie in (
  9557. TwitchVideosClipsIE,
  9558. TwitchVideosCollectionsIE))
  9559. else super().suitable(url))
  9560. class TwitchVodIE(TwitchBaseIE):
  9561. _module = 'yt_dlp.extractor.twitch'
  9562. IE_NAME = 'twitch:vod'
  9563. _VALID_URL = '(?x)\n https?://\n (?:\n (?:(?:www|go|m)\\.)?twitch\\.tv/(?:[^/]+/v(?:ideo)?|videos)/|\n player\\.twitch\\.tv/\\?.*?\\bvideo=v?|\n www\\.twitch\\.tv/[^/]+/schedule\\?vodID=\n )\n (?P<id>\\d+)\n '
  9564. _NETRC_MACHINE = 'twitch'
  9565. _RETURN_TYPE = 'video'
  9566. class TwitterBaseIE(LazyLoadExtractor):
  9567. _module = 'yt_dlp.extractor.twitter'
  9568. IE_NAME = 'TwitterBase'
  9569. _NETRC_MACHINE = 'twitter'
  9570. class TwitterAmplifyIE(TwitterBaseIE):
  9571. _module = 'yt_dlp.extractor.twitter'
  9572. IE_NAME = 'twitter:amplify'
  9573. _VALID_URL = 'https?://amp\\.twimg\\.com/v/(?P<id>[0-9a-f\\-]{36})'
  9574. _NETRC_MACHINE = 'twitter'
  9575. _RETURN_TYPE = 'video'
  9576. class TwitterBroadcastIE(TwitterBaseIE, PeriscopeBaseIE):
  9577. _module = 'yt_dlp.extractor.twitter'
  9578. IE_NAME = 'twitter:broadcast'
  9579. _VALID_URL = 'https?://(?:(?:www|m(?:obile)?)\\.)?(?:(?:twitter|x)\\.com|twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid\\.onion)/i/broadcasts/(?P<id>[0-9a-zA-Z]{13})'
  9580. _NETRC_MACHINE = 'twitter'
  9581. _RETURN_TYPE = 'video'
  9582. class TwitterCardIE(LazyLoadExtractor):
  9583. _module = 'yt_dlp.extractor.twitter'
  9584. IE_NAME = 'twitter:card'
  9585. _VALID_URL = 'https?://(?:(?:www|m(?:obile)?)\\.)?(?:(?:twitter|x)\\.com|twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid\\.onion)/i/(?:cards/tfw/v1|videos(?:/tweet)?)/(?P<id>\\d+)'
  9586. _RETURN_TYPE = 'video'
  9587. class TwitterIE(TwitterBaseIE):
  9588. _module = 'yt_dlp.extractor.twitter'
  9589. IE_NAME = 'twitter'
  9590. _VALID_URL = 'https?://(?:(?:www|m(?:obile)?)\\.)?(?:(?:twitter|x)\\.com|twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid\\.onion)/(?:(?:i/web|[^/]+)/status|statuses)/(?P<id>\\d+)(?:/(?:video|photo)/(?P<index>\\d+))?'
  9591. _NETRC_MACHINE = 'twitter'
  9592. age_limit = 18
  9593. _RETURN_TYPE = 'any'
  9594. class TwitterShortenerIE(TwitterBaseIE):
  9595. _module = 'yt_dlp.extractor.twitter'
  9596. IE_NAME = 'twitter:shortener'
  9597. _VALID_URL = 'https?://t\\.co/(?P<id>[^?#]+)|tco:(?P<eid>[^?#]+)'
  9598. _NETRC_MACHINE = 'twitter'
  9599. class TwitterSpacesIE(TwitterBaseIE):
  9600. _module = 'yt_dlp.extractor.twitter'
  9601. IE_NAME = 'twitter:spaces'
  9602. _VALID_URL = 'https?://(?:(?:www|m(?:obile)?)\\.)?(?:(?:twitter|x)\\.com|twitter3e4tixl4xyajtrzo62zg5vztmjuricljdp2c5kshju4avyoid\\.onion)/i/spaces/(?P<id>[0-9a-zA-Z]{13})'
  9603. _NETRC_MACHINE = 'twitter'
  9604. _RETURN_TYPE = 'video'
  9605. class PornTopIE(LazyLoadExtractor):
  9606. _module = 'yt_dlp.extractor.txxx'
  9607. IE_NAME = 'PornTop'
  9608. _VALID_URL = 'https?://(?P<host>(?:www\\.)?porntop\\.com)/video/(?P<id>\\d+)(?:/(?P<display_id>[^/?]+))?'
  9609. age_limit = 18
  9610. _RETURN_TYPE = 'video'
  9611. class TxxxIE(LazyLoadExtractor):
  9612. _module = 'yt_dlp.extractor.txxx'
  9613. IE_NAME = 'Txxx'
  9614. _VALID_URL = '(?x)\n https?://(?:www\\.)?(?P<host>hclips\\.com|hdzog\\.com|hdzog\\.tube|hotmovs\\.com|hotmovs\\.tube|inporn\\.com|privatehomeclips\\.com|tubepornclassic\\.com|txxx\\.com|txxx\\.tube|upornia\\.com|upornia\\.tube|vjav\\.com|vjav\\.tube|vxxx\\.com|voyeurhit\\.com|voyeurhit\\.tube)/\n (?:videos?[/-]|embed/)(?P<id>\\d+)(?:/(?P<display_id>[^/?#]+))?\n '
  9615. age_limit = 18
  9616. _RETURN_TYPE = 'video'
  9617. class UdemyIE(LazyLoadExtractor):
  9618. _module = 'yt_dlp.extractor.udemy'
  9619. IE_NAME = 'udemy'
  9620. _VALID_URL = '(?x)\n https?://\n (?:[^/]+\\.)?udemy\\.com/\n (?:\n [^#]+\\#/lecture/|\n lecture/view/?\\?lectureId=|\n [^/]+/learn/v4/t/lecture/\n )\n (?P<id>\\d+)\n '
  9621. _NETRC_MACHINE = 'udemy'
  9622. _RETURN_TYPE = 'video'
  9623. class UdemyCourseIE(UdemyIE):
  9624. _module = 'yt_dlp.extractor.udemy'
  9625. IE_NAME = 'udemy:course'
  9626. _VALID_URL = 'https?://(?:[^/]+\\.)?udemy\\.com/(?P<id>[^/?#&]+)'
  9627. _NETRC_MACHINE = 'udemy'
  9628. @classmethod
  9629. def suitable(cls, url):
  9630. return False if UdemyIE.suitable(url) else super().suitable(url)
  9631. class UDNEmbedIE(LazyLoadExtractor):
  9632. _module = 'yt_dlp.extractor.udn'
  9633. IE_NAME = 'UDNEmbed'
  9634. _VALID_URL = 'https?://video\\.udn\\.com/(?:embed|play)/news/(?P<id>\\d+)'
  9635. IE_DESC = '聯合影音'
  9636. _RETURN_TYPE = 'video'
  9637. class ImgGamingBaseIE(LazyLoadExtractor):
  9638. _module = 'yt_dlp.extractor.imggaming'
  9639. IE_NAME = 'ImgGamingBase'
  9640. class UFCTVIE(ImgGamingBaseIE):
  9641. _module = 'yt_dlp.extractor.ufctv'
  9642. IE_NAME = 'UFCTV'
  9643. _VALID_URL = 'https?://(?P<domain>(?:(?:app|www)\\.)?(?:ufc\\.tv|(?:ufc)?fightpass\\.com)|ufcfightpass\\.img(?:dge|gaming)\\.com)/(?P<type>live|playlist|video)/(?P<id>\\d+)(?:\\?.*?\\bplaylistId=(?P<playlist_id>\\d+))?'
  9644. _NETRC_MACHINE = 'ufctv'
  9645. class UFCArabiaIE(ImgGamingBaseIE):
  9646. _module = 'yt_dlp.extractor.ufctv'
  9647. IE_NAME = 'UFCArabia'
  9648. _VALID_URL = 'https?://(?P<domain>(?:(?:app|www)\\.)?ufcarabia\\.(?:ae|com))/(?P<type>live|playlist|video)/(?P<id>\\d+)(?:\\?.*?\\bplaylistId=(?P<playlist_id>\\d+))?'
  9649. _NETRC_MACHINE = 'ufcarabia'
  9650. class UkColumnIE(LazyLoadExtractor):
  9651. _module = 'yt_dlp.extractor.ukcolumn'
  9652. IE_NAME = 'ukcolumn'
  9653. _VALID_URL = '(?i)https?://(?:www\\.)?ukcolumn\\.org(/index\\.php)?/(?:video|ukcolumn-news)/(?P<id>[-a-z0-9]+)'
  9654. _WORKING = False
  9655. _RETURN_TYPE = 'video'
  9656. class UKTVPlayIE(LazyLoadExtractor):
  9657. _module = 'yt_dlp.extractor.uktvplay'
  9658. IE_NAME = 'UKTVPlay'
  9659. _VALID_URL = 'https?://uktvplay\\.(?:uktv\\.)?co\\.uk/(?:.+?\\?.*?\\bvideo=|([^/]+/)*)(?P<id>\\d+)'
  9660. _RETURN_TYPE = 'video'
  9661. class UlizaPlayerIE(LazyLoadExtractor):
  9662. _module = 'yt_dlp.extractor.uliza'
  9663. IE_NAME = 'UlizaPlayer'
  9664. _VALID_URL = 'https://player-api\\.p\\.uliza\\.jp/v1/players/[^?#]+\\?(?:[^#]*&)?name=(?P<id>[^#&]+)'
  9665. _RETURN_TYPE = 'video'
  9666. class UlizaPortalIE(LazyLoadExtractor):
  9667. _module = 'yt_dlp.extractor.uliza'
  9668. IE_NAME = 'UlizaPortal'
  9669. _VALID_URL = 'https?://(?:www\\.)?ulizaportal\\.jp/pages/(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})'
  9670. IE_DESC = 'ulizaportal.jp'
  9671. _RETURN_TYPE = 'video'
  9672. class UMGDeIE(LazyLoadExtractor):
  9673. _module = 'yt_dlp.extractor.umg'
  9674. IE_NAME = 'umg:de'
  9675. _VALID_URL = 'https?://(?:www\\.)?universal-music\\.de/[^/]+/videos/[^/?#]+-(?P<id>\\d+)'
  9676. _WORKING = False
  9677. IE_DESC = 'Universal Music Deutschland'
  9678. _RETURN_TYPE = 'video'
  9679. class UnistraIE(LazyLoadExtractor):
  9680. _module = 'yt_dlp.extractor.unistra'
  9681. IE_NAME = 'Unistra'
  9682. _VALID_URL = 'https?://utv\\.unistra\\.fr/(?:index|video)\\.php\\?id_video\\=(?P<id>\\d+)'
  9683. _RETURN_TYPE = 'video'
  9684. class UnityIE(LazyLoadExtractor):
  9685. _module = 'yt_dlp.extractor.unity'
  9686. IE_NAME = 'Unity'
  9687. _VALID_URL = 'https?://(?:www\\.)?unity3d\\.com/learn/tutorials/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  9688. _WORKING = False
  9689. _RETURN_TYPE = 'video'
  9690. class UnsupportedInfoExtractor(LazyLoadExtractor):
  9691. _module = 'yt_dlp.extractor.unsupported'
  9692. IE_NAME = 'UnsupportedInfoExtract'
  9693. _VALID_URL = 'https?://(?:www\\.)?(?:)'
  9694. IE_DESC = False
  9695. class KnownDRMIE(UnsupportedInfoExtractor):
  9696. _module = 'yt_dlp.extractor.unsupported'
  9697. IE_NAME = 'DRM'
  9698. _VALID_URL = 'https?://(?:www\\.)?(?:play\\.hbomax\\.com|channel(?:4|5)\\.com|peacocktv\\.com|(?:[\\w\\.]+\\.)?disneyplus\\.com|open\\.spotify\\.com/(?:track|playlist|album|artist)|tvnz\\.co\\.nz|oneplus\\.ch|artstation\\.com/learning/courses|philo\\.com|(?:[\\w\\.]+\\.)?mech-plus\\.com|aha\\.video|mubi\\.com|vootkids\\.com|nowtv\\.it/watch|tv\\.apple\\.com|primevideo\\.com|hulu\\.com|resource\\.inkryptvideos\\.com|joyn\\.de|amazon\\.(?:\\w{2}\\.)?\\w+/gp/video|music\\.amazon\\.(?:\\w{2}\\.)?\\w+|(?:watch|front)\\.njpwworld\\.com|qub\\.ca/vrai)'
  9699. IE_DESC = False
  9700. class KnownPiracyIE(UnsupportedInfoExtractor):
  9701. _module = 'yt_dlp.extractor.unsupported'
  9702. IE_NAME = 'Piracy'
  9703. _VALID_URL = 'https?://(?:www\\.)?(?:dood\\.(?:to|watch|so|pm|wf|re)|viewsb\\.com|filemoon\\.sx|hentai\\.animestigma\\.com|thisav\\.com|gounlimited\\.to|highstream\\.tv|uqload\\.com|vedbam\\.xyz|vadbam\\.netvidlo\\.us|wolfstream\\.tv|xvideosharing\\.com|(?:\\w+\\.)?viidshar\\.com|sxyprn\\.com|jable\\.tv|91porn\\.com|einthusan\\.(?:tv|com|ca)|yourupload\\.com)'
  9704. IE_DESC = False
  9705. class UOLIE(LazyLoadExtractor):
  9706. _module = 'yt_dlp.extractor.uol'
  9707. IE_NAME = 'uol.com.br'
  9708. _VALID_URL = 'https?://(?:.+?\\.)?uol\\.com\\.br/.*?(?:(?:mediaId|v)=|view/(?:[a-z0-9]+/)?|video(?:=|/(?:\\d{4}/\\d{2}/\\d{2}/)?))(?P<id>\\d+|[\\w-]+-[A-Z0-9]+)'
  9709. _RETURN_TYPE = 'video'
  9710. class UplynkBaseIE(LazyLoadExtractor):
  9711. _module = 'yt_dlp.extractor.uplynk'
  9712. IE_NAME = 'UplynkBase'
  9713. class UplynkIE(UplynkBaseIE):
  9714. _module = 'yt_dlp.extractor.uplynk'
  9715. IE_NAME = 'uplynk'
  9716. _VALID_URL = '(?x)\n https?://[\\w-]+\\.uplynk\\.com/(?P<path>\n ext/[0-9a-f]{32}/(?P<external_id>[^/?&]+)|\n (?P<id>[0-9a-f]{32})\n )\\.(?:m3u8|json)\n (?:.*?\\bpbs=(?P<session_id>[^&]+))?'
  9717. _RETURN_TYPE = 'video'
  9718. class UplynkPreplayIE(UplynkBaseIE):
  9719. _module = 'yt_dlp.extractor.uplynk'
  9720. IE_NAME = 'uplynk:preplay'
  9721. _VALID_URL = 'https?://[\\w-]+\\.uplynk\\.com/preplay2?/(?P<path>ext/[0-9a-f]{32}/(?P<external_id>[^/?&]+)|(?P<id>[0-9a-f]{32}))\\.json'
  9722. class UrortIE(LazyLoadExtractor):
  9723. _module = 'yt_dlp.extractor.urort'
  9724. IE_NAME = 'Urort'
  9725. _VALID_URL = 'https?://(?:www\\.)?urort\\.p3\\.no/#!/Band/(?P<id>[^/]+)$'
  9726. _WORKING = False
  9727. IE_DESC = 'NRK P3 Urørt'
  9728. _RETURN_TYPE = 'video'
  9729. class URPlayIE(LazyLoadExtractor):
  9730. _module = 'yt_dlp.extractor.urplay'
  9731. IE_NAME = 'URPlay'
  9732. _VALID_URL = 'https?://(?:www\\.)?ur(?:play|skola)\\.se/(?:program|Produkter)/(?P<id>[0-9]+)'
  9733. age_limit = 15
  9734. _RETURN_TYPE = 'video'
  9735. class USANetworkIE(NBCIE):
  9736. _module = 'yt_dlp.extractor.usanetwork'
  9737. IE_NAME = 'USANetwork'
  9738. _VALID_URL = 'https?(?P<permalink>://(?:www\\.)?usanetwork\\.com/(?:[^/]+/videos?|movies?)/(?:[^/]+/)?(?P<id>\\d+))'
  9739. _RETURN_TYPE = 'video'
  9740. class USATodayIE(LazyLoadExtractor):
  9741. _module = 'yt_dlp.extractor.usatoday'
  9742. IE_NAME = 'USAToday'
  9743. _VALID_URL = 'https?://(?:www\\.)?usatoday\\.com/(?:[^/]+/)*(?P<id>[^?/#]+)'
  9744. _RETURN_TYPE = 'video'
  9745. class UstreamChannelIE(LazyLoadExtractor):
  9746. _module = 'yt_dlp.extractor.ustream'
  9747. IE_NAME = 'ustream:channel'
  9748. _VALID_URL = 'https?://(?:www\\.)?ustream\\.tv/channel/(?P<slug>.+)'
  9749. _RETURN_TYPE = 'playlist'
  9750. class UstreamIE(LazyLoadExtractor):
  9751. _module = 'yt_dlp.extractor.ustream'
  9752. IE_NAME = 'ustream'
  9753. _VALID_URL = 'https?://(?:www\\.)?(?:ustream\\.tv|video\\.ibm\\.com)/(?P<type>recorded|embed|embed/recorded)/(?P<id>\\d+)'
  9754. _RETURN_TYPE = 'any'
  9755. class UstudioEmbedIE(LazyLoadExtractor):
  9756. _module = 'yt_dlp.extractor.ustudio'
  9757. IE_NAME = 'ustudio:embed'
  9758. _VALID_URL = 'https?://(?:(?:app|embed)\\.)?ustudio\\.com/embed/(?P<uid>[^/]+)/(?P<id>[^/]+)'
  9759. _RETURN_TYPE = 'video'
  9760. class UstudioIE(LazyLoadExtractor):
  9761. _module = 'yt_dlp.extractor.ustudio'
  9762. IE_NAME = 'ustudio'
  9763. _VALID_URL = 'https?://(?:(?:www|v1)\\.)?ustudio\\.com/video/(?P<id>[^/]+)/(?P<display_id>[^/?#&]+)'
  9764. _RETURN_TYPE = 'video'
  9765. class UtreonIE(LazyLoadExtractor):
  9766. _module = 'yt_dlp.extractor.utreon'
  9767. IE_NAME = 'playeur'
  9768. _VALID_URL = 'https?://(?:www\\.)?(?:utreon|playeur)\\.com/v/(?P<id>[\\w-]+)'
  9769. _RETURN_TYPE = 'video'
  9770. class Varzesh3IE(LazyLoadExtractor):
  9771. _module = 'yt_dlp.extractor.varzesh3'
  9772. IE_NAME = 'Varzesh3'
  9773. _VALID_URL = 'https?://(?:www\\.)?video\\.varzesh3\\.com/(?:[^/]+/)+(?P<id>[^/]+)/?'
  9774. _WORKING = False
  9775. _RETURN_TYPE = 'video'
  9776. class Vbox7IE(LazyLoadExtractor):
  9777. _module = 'yt_dlp.extractor.vbox7'
  9778. IE_NAME = 'Vbox7'
  9779. _VALID_URL = '(?x)\n https?://\n (?:[^/]+\\.)?vbox7\\.com/\n (?:\n play:|\n (?:\n emb/external\\.php|\n player/ext\\.swf\n )\\?.*?\\bvid=\n )\n (?P<id>[\\da-fA-F]+)\n '
  9780. _RETURN_TYPE = 'video'
  9781. class VeoIE(LazyLoadExtractor):
  9782. _module = 'yt_dlp.extractor.veo'
  9783. IE_NAME = 'Veo'
  9784. _VALID_URL = 'https?://app\\.veo\\.co/matches/(?P<id>[0-9A-Za-z-_]+)'
  9785. _RETURN_TYPE = 'video'
  9786. class VestiIE(LazyLoadExtractor):
  9787. _module = 'yt_dlp.extractor.vesti'
  9788. IE_NAME = 'Vesti'
  9789. _VALID_URL = 'https?://(?:.+?\\.)?vesti\\.ru/(?P<id>.+)'
  9790. _WORKING = False
  9791. IE_DESC = 'Вести.Ru'
  9792. _RETURN_TYPE = 'video'
  9793. class VevoBaseIE(LazyLoadExtractor):
  9794. _module = 'yt_dlp.extractor.vevo'
  9795. IE_NAME = 'VevoBase'
  9796. class VevoIE(VevoBaseIE):
  9797. _module = 'yt_dlp.extractor.vevo'
  9798. IE_NAME = 'Vevo'
  9799. _VALID_URL = '(?x)\n (?:https?://(?:www\\.)?vevo\\.com/watch/(?!playlist|genre)(?:[^/]+/(?:[^/]+/)?)?|\n https?://cache\\.vevo\\.com/m/html/embed\\.html\\?video=|\n https?://videoplayer\\.vevo\\.com/embed/embedded\\?videoId=|\n https?://embed\\.vevo\\.com/.*?[?&]isrc=|\n https?://tv\\.vevo\\.com/watch/artist/(?:[^/]+)/|\n vevo:)\n (?P<id>[^&?#]+)'
  9800. age_limit = 18
  9801. _RETURN_TYPE = 'video'
  9802. class VevoPlaylistIE(VevoBaseIE):
  9803. _module = 'yt_dlp.extractor.vevo'
  9804. IE_NAME = 'VevoPlaylist'
  9805. _VALID_URL = 'https?://(?:www\\.)?vevo\\.com/watch/(?P<kind>playlist|genre)/(?P<id>[^/?#&]+)'
  9806. _RETURN_TYPE = 'playlist'
  9807. class BTArticleIE(LazyLoadExtractor):
  9808. _module = 'yt_dlp.extractor.vgtv'
  9809. IE_NAME = 'bt:article'
  9810. _VALID_URL = 'https?://(?:www\\.)?bt\\.no/(?:[^/]+/)+(?P<id>[^/]+)-\\d+\\.html'
  9811. IE_DESC = 'Bergens Tidende Articles'
  9812. _RETURN_TYPE = 'video'
  9813. class BTVestlendingenIE(LazyLoadExtractor):
  9814. _module = 'yt_dlp.extractor.vgtv'
  9815. IE_NAME = 'bt:vestlendingen'
  9816. _VALID_URL = 'https?://(?:www\\.)?bt\\.no/spesial/vestlendingen/#!/(?P<id>\\d+)'
  9817. IE_DESC = 'Bergens Tidende - Vestlendingen'
  9818. _RETURN_TYPE = 'video'
  9819. class VH1IE(MTVServicesInfoExtractor):
  9820. _module = 'yt_dlp.extractor.vh1'
  9821. IE_NAME = 'vh1.com'
  9822. _VALID_URL = 'https?://(?:www\\.)?vh1\\.com/(?:video-clips|episodes)/(?P<id>[^/?#.]+)'
  9823. _RETURN_TYPE = 'any'
  9824. class ViceBaseIE(LazyLoadExtractor):
  9825. _module = 'yt_dlp.extractor.vice'
  9826. IE_NAME = 'ViceBase'
  9827. class ViceArticleIE(ViceBaseIE):
  9828. _module = 'yt_dlp.extractor.vice'
  9829. IE_NAME = 'vice:article'
  9830. _VALID_URL = 'https?://(?:www\\.)?vice\\.com/(?P<locale>[^/]+)/article/(?:[0-9a-z]{6}/)?(?P<id>[^?#]+)'
  9831. age_limit = 17
  9832. _RETURN_TYPE = 'video'
  9833. class ViceIE(ViceBaseIE, AdobePassIE):
  9834. _module = 'yt_dlp.extractor.vice'
  9835. IE_NAME = 'vice'
  9836. _VALID_URL = 'https?://(?:(?:video|vms)\\.vice|(?:www\\.)?vice(?:land|tv))\\.com/(?P<locale>[^/]+)/(?:video/[^/]+|embed)/(?P<id>[\\da-f]{24})'
  9837. age_limit = 14
  9838. _RETURN_TYPE = 'video'
  9839. class ViceShowIE(ViceBaseIE):
  9840. _module = 'yt_dlp.extractor.vice'
  9841. IE_NAME = 'vice:show'
  9842. _VALID_URL = 'https?://(?:video\\.vice|(?:www\\.)?vice(?:land|tv))\\.com/(?P<locale>[^/]+)/show/(?P<id>[^/?#&]+)'
  9843. _RETURN_TYPE = 'playlist'
  9844. class ViddlerIE(LazyLoadExtractor):
  9845. _module = 'yt_dlp.extractor.viddler'
  9846. IE_NAME = 'Viddler'
  9847. _VALID_URL = 'https?://(?:www\\.)?viddler\\.com/(?:v|embed|player)/(?P<id>[a-z0-9]+)(?:.+?\\bsecret=(\\d+))?'
  9848. _RETURN_TYPE = 'video'
  9849. class VideaIE(LazyLoadExtractor):
  9850. _module = 'yt_dlp.extractor.videa'
  9851. IE_NAME = 'Videa'
  9852. _VALID_URL = '(?x)\n https?://\n videa(?:kid)?\\.hu/\n (?:\n videok/(?:[^/]+/)*[^?#&]+-|\n (?:videojs_)?player\\?.*?\\bv=|\n player/v/\n )\n (?P<id>[^?#&]+)\n '
  9853. _RETURN_TYPE = 'video'
  9854. class VideocampusSachsenIE(LazyLoadExtractor):
  9855. _module = 'yt_dlp.extractor.videocampus_sachsen'
  9856. IE_NAME = 'ViMP'
  9857. _VALID_URL = '(?x)https?://(?P<host>bergauf\\.tv|campus\\.demo\\.vimp\\.com|corporate\\.demo\\.vimp\\.com|dancehalldatabase\\.com|drehzahl\\.tv|educhannel\\.hs\\-gesundheit\\.de|emedia\\.ls\\.haw\\-hamburg\\.de|globale\\-evolution\\.net|hohu\\.tv|htvideos\\.hightechhigh\\.org|k210039\\.vimp\\.mivitec\\.net|media\\.cmslegal\\.com|media\\.hs\\-furtwangen\\.de|media\\.hwr\\-berlin\\.de|mediathek\\.dkfz\\.de|mediathek\\.htw\\-berlin\\.de|mediathek\\.polizei\\-bw\\.de|medien\\.hs\\-merseburg\\.de|mportal\\.europa\\-uni\\.de|pacific\\.demo\\.vimp\\.com|slctv\\.com|streaming\\.prairiesouth\\.ca|tube\\.isbonline\\.cn|univideo\\.uni\\-kassel\\.de|ursula2\\.genetics\\.emory\\.edu|ursulablicklevideoarchiv\\.com|v\\.agrarumweltpaedagogik\\.at|video\\.eplay\\-tv\\.de|video\\.fh\\-dortmund\\.de|video\\.hs\\-offenburg\\.de|video\\.hs\\-pforzheim\\.de|video\\.hspv\\.nrw\\.de|video\\.irtshdf\\.fr|video\\.pareygo\\.de|video\\.tu\\-freiberg\\.de|videocampus\\.sachsen\\.de|videoportal\\.uni\\-freiburg\\.de|videoportal\\.vm\\.uni\\-freiburg\\.de|videos\\.duoc\\.cl|videos\\.uni\\-paderborn\\.de|vimp\\-bemus\\.udk\\-berlin\\.de|vimp\\.aekwl\\.de|vimp\\.hs\\-mittweida\\.de|vimp\\.oth\\-regensburg\\.de|vimp\\.ph\\-heidelberg\\.de|vimp\\.sma\\-events\\.com|vimp\\.weka\\-fachmedien\\.de|webtv\\.univ\\-montp3\\.fr|www\\.b\\-tu\\.de/media|www\\.bergauf\\.tv|www\\.bigcitytv\\.de|www\\.cad\\-videos\\.de|www\\.drehzahl\\.tv|www\\.fh\\-bielefeld\\.de/medienportal|www\\.hohu\\.tv|www\\.orvovideo\\.com|www\\.rwe\\.tv|www\\.salzi\\.tv|www\\.wenglor\\-media\\.com|www2\\.univ\\-sba\\.dz)/(?:\n m/(?P<tmp_id>[0-9a-f]+)|\n (?:category/)?video/(?P<display_id>[\\w-]+)/(?P<id>[0-9a-f]{32})|\n media/embed.*(?:\\?|&)key=(?P<embed_id>[0-9a-f]{32}&?)\n )'
  9858. _RETURN_TYPE = 'video'
  9859. class ViMPPlaylistIE(LazyLoadExtractor):
  9860. _module = 'yt_dlp.extractor.videocampus_sachsen'
  9861. IE_NAME = 'ViMP:Playlist'
  9862. _VALID_URL = '(?x)(?P<host>https?://(?:bergauf\\.tv|campus\\.demo\\.vimp\\.com|corporate\\.demo\\.vimp\\.com|dancehalldatabase\\.com|drehzahl\\.tv|educhannel\\.hs\\-gesundheit\\.de|emedia\\.ls\\.haw\\-hamburg\\.de|globale\\-evolution\\.net|hohu\\.tv|htvideos\\.hightechhigh\\.org|k210039\\.vimp\\.mivitec\\.net|media\\.cmslegal\\.com|media\\.hs\\-furtwangen\\.de|media\\.hwr\\-berlin\\.de|mediathek\\.dkfz\\.de|mediathek\\.htw\\-berlin\\.de|mediathek\\.polizei\\-bw\\.de|medien\\.hs\\-merseburg\\.de|mportal\\.europa\\-uni\\.de|pacific\\.demo\\.vimp\\.com|slctv\\.com|streaming\\.prairiesouth\\.ca|tube\\.isbonline\\.cn|univideo\\.uni\\-kassel\\.de|ursula2\\.genetics\\.emory\\.edu|ursulablicklevideoarchiv\\.com|v\\.agrarumweltpaedagogik\\.at|video\\.eplay\\-tv\\.de|video\\.fh\\-dortmund\\.de|video\\.hs\\-offenburg\\.de|video\\.hs\\-pforzheim\\.de|video\\.hspv\\.nrw\\.de|video\\.irtshdf\\.fr|video\\.pareygo\\.de|video\\.tu\\-freiberg\\.de|videocampus\\.sachsen\\.de|videoportal\\.uni\\-freiburg\\.de|videoportal\\.vm\\.uni\\-freiburg\\.de|videos\\.duoc\\.cl|videos\\.uni\\-paderborn\\.de|vimp\\-bemus\\.udk\\-berlin\\.de|vimp\\.aekwl\\.de|vimp\\.hs\\-mittweida\\.de|vimp\\.oth\\-regensburg\\.de|vimp\\.ph\\-heidelberg\\.de|vimp\\.sma\\-events\\.com|vimp\\.weka\\-fachmedien\\.de|webtv\\.univ\\-montp3\\.fr|www\\.b\\-tu\\.de/media|www\\.bergauf\\.tv|www\\.bigcitytv\\.de|www\\.cad\\-videos\\.de|www\\.drehzahl\\.tv|www\\.fh\\-bielefeld\\.de/medienportal|www\\.hohu\\.tv|www\\.orvovideo\\.com|www\\.rwe\\.tv|www\\.salzi\\.tv|www\\.wenglor\\-media\\.com|www2\\.univ\\-sba\\.dz))/(?:\n album/view/aid/(?P<album_id>[0-9]+)|\n (?P<mode>category|channel)/(?P<name>[\\w-]+)/(?P<id>[0-9]+)\n )'
  9863. _RETURN_TYPE = 'playlist'
  9864. class VideoDetectiveIE(LazyLoadExtractor):
  9865. _module = 'yt_dlp.extractor.videodetective'
  9866. IE_NAME = 'VideoDetective'
  9867. _VALID_URL = 'https?://(?:www\\.)?videodetective\\.com/[^/]+/[^/]+/(?P<id>\\d+)'
  9868. _RETURN_TYPE = 'video'
  9869. class VideofyMeIE(LazyLoadExtractor):
  9870. _module = 'yt_dlp.extractor.videofyme'
  9871. IE_NAME = 'videofy.me'
  9872. _VALID_URL = 'https?://(?:www\\.videofy\\.me/.+?|p\\.videofy\\.me/v)/(?P<id>\\d+)(&|#|$)'
  9873. _WORKING = False
  9874. _RETURN_TYPE = 'video'
  9875. class VideoKenBaseIE(LazyLoadExtractor):
  9876. _module = 'yt_dlp.extractor.videoken'
  9877. IE_NAME = 'VideoKenBase'
  9878. class VideoKenCategoryIE(VideoKenBaseIE):
  9879. _module = 'yt_dlp.extractor.videoken'
  9880. IE_NAME = 'VideoKenCategory'
  9881. _VALID_URL = 'https?://(?P<host>videos\\.icts\\.res\\.in|videos\\.cncf\\.io|videos\\.neurips\\.cc)/category/(?P<id>\\d+)/?(?:$|[?#])'
  9882. _RETURN_TYPE = 'playlist'
  9883. class VideoKenIE(VideoKenBaseIE):
  9884. _module = 'yt_dlp.extractor.videoken'
  9885. IE_NAME = 'VideoKen'
  9886. _VALID_URL = 'https?://(?P<host>videos\\.icts\\.res\\.in|videos\\.cncf\\.io|videos\\.neurips\\.cc)/(?:(?:topic|category)/[^/#?]+/)?video/(?P<id>[\\w-]+)'
  9887. _RETURN_TYPE = 'video'
  9888. class VideoKenPlayerIE(VideoKenBaseIE):
  9889. _module = 'yt_dlp.extractor.videoken'
  9890. IE_NAME = 'VideoKenPlayer'
  9891. _VALID_URL = 'https?://player\\.videoken\\.com/embed/slideslive-(?P<id>\\d+)'
  9892. _RETURN_TYPE = 'video'
  9893. class VideoKenPlaylistIE(VideoKenBaseIE):
  9894. _module = 'yt_dlp.extractor.videoken'
  9895. IE_NAME = 'VideoKenPlaylist'
  9896. _VALID_URL = 'https?://(?P<host>videos\\.icts\\.res\\.in|videos\\.cncf\\.io|videos\\.neurips\\.cc)/(?:category/\\d+/)?playlist/(?P<id>\\d+)'
  9897. _RETURN_TYPE = 'playlist'
  9898. class VideoKenTopicIE(VideoKenBaseIE):
  9899. _module = 'yt_dlp.extractor.videoken'
  9900. IE_NAME = 'VideoKenTopic'
  9901. _VALID_URL = 'https?://(?P<host>videos\\.icts\\.res\\.in|videos\\.cncf\\.io|videos\\.neurips\\.cc)/topic/(?P<id>[^/#?]+)/?(?:$|[?#])'
  9902. _RETURN_TYPE = 'playlist'
  9903. class VideomoreIE(LazyLoadExtractor):
  9904. _module = 'yt_dlp.extractor.videomore'
  9905. IE_NAME = 'videomore'
  9906. _VALID_URL = '(?x)\n videomore:(?P<sid>\\d+)$|\n https?://\n (?:\n videomore\\.ru/\n (?:\n embed|\n [^/]+/[^/]+\n )/|\n (?:\n (?:player\\.)?videomore\\.ru|\n siren\\.more\\.tv/player\n )/[^/]*\\?.*?\\btrack_id=|\n odysseus\\.more.tv/player/(?P<partner_id>\\d+)/\n )\n (?P<id>\\d+)\n (?:[/?#&]|\\.(?:xml|json)|$)\n '
  9907. age_limit = 16
  9908. _RETURN_TYPE = 'video'
  9909. class VideomoreBaseIE(LazyLoadExtractor):
  9910. _module = 'yt_dlp.extractor.videomore'
  9911. IE_NAME = 'VideomoreBase'
  9912. class VideomoreSeasonIE(VideomoreBaseIE):
  9913. _module = 'yt_dlp.extractor.videomore'
  9914. IE_NAME = 'videomore:season'
  9915. _VALID_URL = 'https?://(?:videomore\\.ru|more\\.tv)/(?!embed)(?P<id>[^/]+/[^/?#&]+)(?:/*|[?#&].*?)$'
  9916. _RETURN_TYPE = 'playlist'
  9917. @classmethod
  9918. def suitable(cls, url):
  9919. return (False if (VideomoreIE.suitable(url) or VideomoreVideoIE.suitable(url))
  9920. else super().suitable(url))
  9921. class VideomoreVideoIE(VideomoreBaseIE):
  9922. _module = 'yt_dlp.extractor.videomore'
  9923. IE_NAME = 'videomore:video'
  9924. _VALID_URL = 'https?://(?:videomore\\.ru|more\\.tv)/(?P<id>(?:(?:[^/]+/){2})?[^/?#&]+)(?:/*|[?#&].*?)$'
  9925. age_limit = 16
  9926. _RETURN_TYPE = 'video'
  9927. @classmethod
  9928. def suitable(cls, url):
  9929. return False if VideomoreIE.suitable(url) else super().suitable(url)
  9930. class VideoPressIE(LazyLoadExtractor):
  9931. _module = 'yt_dlp.extractor.videopress'
  9932. IE_NAME = 'VideoPress'
  9933. _VALID_URL = 'https?://video(?:\\.word)?press\\.com/embed/(?P<id>[\\da-zA-Z]{8})'
  9934. _RETURN_TYPE = 'video'
  9935. class VidflexIE(LazyLoadExtractor):
  9936. _module = 'yt_dlp.extractor.vidflex'
  9937. IE_NAME = 'Vidflex'
  9938. _VALID_URL = 'https?://(?:[^.]+\\.vidflex\\.tv|(?:www\\.)?acactv\\.ca|(?:www\\.)?albertalacrossetv\\.com|(?:www\\.)?cjfltv\\.com|(?:www\\.)?figureitoutbaseball\\.com|(?:www\\.)?ocaalive\\.com|(?:www\\.)?pegasussports\\.tv|(?:www\\.)?praxisseries\\.ca|(?:www\\.)?silenticetv\\.com|(?:www\\.)?tuffhedemantv\\.com|(?:www\\.)?watchfuntv\\.com|live\\.ofsaa\\.on\\.ca|tv\\.procoro\\.ca|tv\\.realcastmedia\\.net|tv\\.fringetheatre\\.ca|video\\.haisla\\.ca|video\\.hockeycanada\\.ca|video\\.huuayaht\\.org|video\\.turningpointensemble\\.ca|videos\\.livingworks\\.net|videos\\.telusworldofscienceedmonton\\.ca|watch\\.binghamtonbulldogs\\.com|watch\\.rekindle\\.tv|watch\\.wpca\\.com)/[a-z]{2}(?:-[a-z]{2})?/c/[\\w-]+\\.(?P<id>\\d+)'
  9939. _RETURN_TYPE = 'video'
  9940. class VidioBaseIE(LazyLoadExtractor):
  9941. _module = 'yt_dlp.extractor.vidio'
  9942. IE_NAME = 'VidioBase'
  9943. _NETRC_MACHINE = 'vidio'
  9944. class VidioIE(VidioBaseIE):
  9945. _module = 'yt_dlp.extractor.vidio'
  9946. IE_NAME = 'Vidio'
  9947. _VALID_URL = 'https?://(?:www\\.)?vidio\\.com/(watch|embed)/(?P<id>\\d+)-(?P<display_id>[^/?#&]+)'
  9948. _NETRC_MACHINE = 'vidio'
  9949. _RETURN_TYPE = 'video'
  9950. class VidioLiveIE(VidioBaseIE):
  9951. _module = 'yt_dlp.extractor.vidio'
  9952. IE_NAME = 'VidioLive'
  9953. _VALID_URL = 'https?://(?:www\\.)?vidio\\.com/live/(?P<id>\\d+)-(?P<display_id>[^/?#&]+)'
  9954. _NETRC_MACHINE = 'vidio'
  9955. _RETURN_TYPE = 'video'
  9956. class VidioPremierIE(VidioBaseIE):
  9957. _module = 'yt_dlp.extractor.vidio'
  9958. IE_NAME = 'VidioPremier'
  9959. _VALID_URL = 'https?://(?:www\\.)?vidio\\.com/premier/(?P<id>\\d+)/(?P<display_id>[^/?#&]+)'
  9960. _NETRC_MACHINE = 'vidio'
  9961. _RETURN_TYPE = 'playlist'
  9962. class VidLiiIE(LazyLoadExtractor):
  9963. _module = 'yt_dlp.extractor.vidlii'
  9964. IE_NAME = 'VidLii'
  9965. _VALID_URL = 'https?://(?:www\\.)?vidlii\\.com/(?:watch|embed)\\?.*?\\bv=(?P<id>[0-9A-Za-z_-]{11})'
  9966. _RETURN_TYPE = 'video'
  9967. class VidlyIE(LazyLoadExtractor):
  9968. _module = 'yt_dlp.extractor.vidly'
  9969. IE_NAME = 'Vidly'
  9970. _VALID_URL = 'https?://(?:vid\\.ly/|(?:s\\.)?vid\\.ly/embeded\\.html\\?(?:[^#]+&)?link=)(?P<id>\\w+)'
  9971. _RETURN_TYPE = 'video'
  9972. class VidyardIE(VidyardBaseIE):
  9973. _module = 'yt_dlp.extractor.vidyard'
  9974. IE_NAME = 'Vidyard'
  9975. _VALID_URL = ['https?://[\\w-]+(?:\\.hubs)?\\.vidyard\\.com/watch/(?P<id>[\\w-]+)', 'https?://(?:embed|share)\\.vidyard\\.com/share/(?P<id>[\\w-]+)', 'https?://play\\.vidyard\\.com/(?:player/)?(?P<id>[\\w-]+)']
  9976. _RETURN_TYPE = 'any'
  9977. class ViewLiftBaseIE(LazyLoadExtractor):
  9978. _module = 'yt_dlp.extractor.viewlift'
  9979. IE_NAME = 'ViewLiftBase'
  9980. class ViewLiftEmbedIE(ViewLiftBaseIE):
  9981. _module = 'yt_dlp.extractor.viewlift'
  9982. IE_NAME = 'viewlift:embed'
  9983. _VALID_URL = 'https?://(?:(?:www|embed)\\.)?(?P<domain>(?:(?:main\\.)?snagfilms|snagxtreme|funnyforfree|kiddovid|winnersview|(?:monumental|lax)sportsnetwork|vayafilm|failarmy|ftfnext|lnppass\\.legapallacanestro|moviespree|app\\.myoutdoortv|neoufitness|pflmma|theidentitytb|chorki)\\.com|(?:hoichoi|app\\.horseandcountry|kronon|marquee|supercrosslive)\\.tv)/embed/player\\?.*\\bfilmId=(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})'
  9984. _RETURN_TYPE = 'video'
  9985. class ViewLiftIE(ViewLiftBaseIE):
  9986. _module = 'yt_dlp.extractor.viewlift'
  9987. IE_NAME = 'viewlift'
  9988. _VALID_URL = 'https?://(?:www\\.)?(?P<domain>(?:(?:main\\.)?snagfilms|snagxtreme|funnyforfree|kiddovid|winnersview|(?:monumental|lax)sportsnetwork|vayafilm|failarmy|ftfnext|lnppass\\.legapallacanestro|moviespree|app\\.myoutdoortv|neoufitness|pflmma|theidentitytb|chorki)\\.com|(?:hoichoi|app\\.horseandcountry|kronon|marquee|supercrosslive)\\.tv)(?P<path>(?:/(?:films/title|show|(?:news/)?videos?|watch))?/(?P<id>[^?#]+))'
  9989. age_limit = 17
  9990. _RETURN_TYPE = 'any'
  9991. @classmethod
  9992. def suitable(cls, url):
  9993. return False if ViewLiftEmbedIE.suitable(url) else super().suitable(url)
  9994. class ViideaIE(LazyLoadExtractor):
  9995. _module = 'yt_dlp.extractor.viidea'
  9996. IE_NAME = 'Viidea'
  9997. _VALID_URL = '(?x)https?://(?:www\\.)?(?:\n videolectures\\.net|\n flexilearn\\.viidea\\.net|\n presentations\\.ocwconsortium\\.org|\n video\\.travel-zoom\\.si|\n video\\.pomp-forum\\.si|\n tv\\.nil\\.si|\n video\\.hekovnik.com|\n video\\.szko\\.si|\n kpk\\.viidea\\.com|\n inside\\.viidea\\.net|\n video\\.kiberpipa\\.org|\n bvvideo\\.si|\n kongres\\.viidea\\.net|\n edemokracija\\.viidea\\.com\n )(?:/lecture)?/(?P<id>[^/]+)(?:/video/(?P<part>\\d+))?/*(?:[#?].*)?$'
  9998. _RETURN_TYPE = 'any'
  9999. class VikiBaseIE(LazyLoadExtractor):
  10000. _module = 'yt_dlp.extractor.viki'
  10001. IE_NAME = 'VikiBase'
  10002. _NETRC_MACHINE = 'viki'
  10003. class VikiChannelIE(VikiBaseIE):
  10004. _module = 'yt_dlp.extractor.viki'
  10005. IE_NAME = 'viki:channel'
  10006. _VALID_URL = 'https?://(?:www\\.)?viki\\.(?:com|net|mx|jp|fr)/(?:tv|news|movies|artists)/(?P<id>[0-9]+c)'
  10007. _NETRC_MACHINE = 'viki'
  10008. _RETURN_TYPE = 'playlist'
  10009. class VikiIE(VikiBaseIE):
  10010. _module = 'yt_dlp.extractor.viki'
  10011. IE_NAME = 'viki'
  10012. _VALID_URL = 'https?://(?:www\\.)?viki\\.(?:com|net|mx|jp|fr)/(?:videos|player)/(?P<id>[0-9]+v)'
  10013. _NETRC_MACHINE = 'viki'
  10014. age_limit = 13
  10015. _RETURN_TYPE = 'video'
  10016. class VimeoBaseInfoExtractor(LazyLoadExtractor):
  10017. _module = 'yt_dlp.extractor.vimeo'
  10018. IE_NAME = 'VimeoBaseInfoExtract'
  10019. _NETRC_MACHINE = 'vimeo'
  10020. class VHXEmbedIE(VimeoBaseInfoExtractor):
  10021. _module = 'yt_dlp.extractor.vimeo'
  10022. IE_NAME = 'vhx:embed'
  10023. _VALID_URL = 'https?://embed\\.vhx\\.tv/videos/(?P<id>\\d+)'
  10024. _NETRC_MACHINE = 'vimeo'
  10025. class VimeoAlbumIE(VimeoBaseInfoExtractor):
  10026. _module = 'yt_dlp.extractor.vimeo'
  10027. IE_NAME = 'vimeo:album'
  10028. _VALID_URL = 'https://vimeo\\.com/(?:album|showcase)/(?P<id>\\d+)(?:$|[?#]|/(?!video))'
  10029. _NETRC_MACHINE = 'vimeo'
  10030. _RETURN_TYPE = 'playlist'
  10031. class VimeoChannelIE(VimeoBaseInfoExtractor):
  10032. _module = 'yt_dlp.extractor.vimeo'
  10033. IE_NAME = 'vimeo:channel'
  10034. _VALID_URL = 'https://vimeo\\.com/channels/(?P<id>[^/?#]+)/?(?:$|[?#])'
  10035. _NETRC_MACHINE = 'vimeo'
  10036. _RETURN_TYPE = 'playlist'
  10037. class VimeoGroupsIE(VimeoChannelIE):
  10038. _module = 'yt_dlp.extractor.vimeo'
  10039. IE_NAME = 'vimeo:group'
  10040. _VALID_URL = 'https://vimeo\\.com/groups/(?P<id>[^/]+)(?:/(?!videos?/\\d+)|$)'
  10041. _NETRC_MACHINE = 'vimeo'
  10042. _RETURN_TYPE = 'playlist'
  10043. class VimeoIE(VimeoBaseInfoExtractor):
  10044. _module = 'yt_dlp.extractor.vimeo'
  10045. IE_NAME = 'vimeo'
  10046. _VALID_URL = '(?x)\n https?://\n (?:\n (?:\n www|\n player\n )\n \\.\n )?\n vimeo\\.com/\n (?:\n (?P<u>user)|\n (?!(?:channels|album|showcase)/[^/?#]+/?(?:$|[?#])|[^/]+/review/|ondemand/)\n (?:.*?/)??\n (?P<q>\n (?:\n play_redirect_hls|\n moogaloop\\.swf)\\?clip_id=\n )?\n (?:videos?/)?\n )\n (?P<id>[0-9]+)\n (?(u)\n /(?!videos|likes)[^/?#]+/?|\n (?(q)|/(?P<unlisted_hash>[\\da-f]{10}))?\n )\n (?:(?(q)[&]|(?(u)|/?)[?]).*?)?(?:[#].*)?$\n '
  10047. _NETRC_MACHINE = 'vimeo'
  10048. _RETURN_TYPE = 'video'
  10049. class VimeoLikesIE(VimeoChannelIE):
  10050. _module = 'yt_dlp.extractor.vimeo'
  10051. IE_NAME = 'vimeo:likes'
  10052. _VALID_URL = 'https://(?:www\\.)?vimeo\\.com/(?P<id>[^/]+)/likes/?(?:$|[?#]|sort:)'
  10053. IE_DESC = 'Vimeo user likes'
  10054. _NETRC_MACHINE = 'vimeo'
  10055. _RETURN_TYPE = 'playlist'
  10056. class VimeoOndemandIE(VimeoIE):
  10057. _module = 'yt_dlp.extractor.vimeo'
  10058. IE_NAME = 'vimeo:ondemand'
  10059. _VALID_URL = 'https?://(?:www\\.)?vimeo\\.com/ondemand/(?:[^/]+/)?(?P<id>[^/?#&]+)'
  10060. _NETRC_MACHINE = 'vimeo'
  10061. _RETURN_TYPE = 'video'
  10062. class VimeoProIE(VimeoBaseInfoExtractor):
  10063. _module = 'yt_dlp.extractor.vimeo'
  10064. IE_NAME = 'vimeo:pro'
  10065. _VALID_URL = 'https?://(?:www\\.)?vimeopro\\.com/[^/?#]+/(?P<slug>[^/?#]+)(?:(?:/videos?/(?P<id>[0-9]+)))?'
  10066. _NETRC_MACHINE = 'vimeo'
  10067. _RETURN_TYPE = 'video'
  10068. class VimeoReviewIE(VimeoBaseInfoExtractor):
  10069. _module = 'yt_dlp.extractor.vimeo'
  10070. IE_NAME = 'vimeo:review'
  10071. _VALID_URL = 'https?://vimeo\\.com/(?P<user>[^/?#]+)/review/(?P<id>\\d+)/(?P<hash>[\\da-f]{10})'
  10072. IE_DESC = 'Review pages on vimeo'
  10073. _NETRC_MACHINE = 'vimeo'
  10074. _RETURN_TYPE = 'video'
  10075. class VimeoUserIE(VimeoChannelIE):
  10076. _module = 'yt_dlp.extractor.vimeo'
  10077. IE_NAME = 'vimeo:user'
  10078. _VALID_URL = 'https://vimeo\\.com/(?!(?:[0-9]+|watchlater)(?:$|[?#/]))(?P<id>[^/]+)(?:/videos)?/?(?:$|[?#])'
  10079. _NETRC_MACHINE = 'vimeo'
  10080. _RETURN_TYPE = 'playlist'
  10081. class VimeoWatchLaterIE(VimeoChannelIE):
  10082. _module = 'yt_dlp.extractor.vimeo'
  10083. IE_NAME = 'vimeo:watchlater'
  10084. _VALID_URL = 'https://vimeo\\.com/(?:home/)?watchlater|:vimeowatchlater'
  10085. IE_DESC = 'Vimeo watch later list, ":vimeowatchlater" keyword (requires authentication)'
  10086. _NETRC_MACHINE = 'vimeo'
  10087. class VimmIE(LazyLoadExtractor):
  10088. _module = 'yt_dlp.extractor.vimm'
  10089. IE_NAME = 'Vimm:stream'
  10090. _VALID_URL = 'https?://(?:www\\.)?vimm\\.tv/(?:c/)?(?P<id>[0-9a-z-]+)$'
  10091. _RETURN_TYPE = 'video'
  10092. class VimmRecordingIE(LazyLoadExtractor):
  10093. _module = 'yt_dlp.extractor.vimm'
  10094. IE_NAME = 'Vimm:recording'
  10095. _VALID_URL = 'https?://(?:www\\.)?vimm\\.tv/c/(?P<channel_id>[0-9a-z-]+)\\?v=(?P<video_id>[0-9A-Za-z]+)'
  10096. _RETURN_TYPE = 'video'
  10097. class ViouslyIE(LazyLoadExtractor):
  10098. _module = 'yt_dlp.extractor.viously'
  10099. IE_NAME = 'Viously'
  10100. _VALID_URL = False
  10101. class ViqeoIE(LazyLoadExtractor):
  10102. _module = 'yt_dlp.extractor.viqeo'
  10103. IE_NAME = 'Viqeo'
  10104. _VALID_URL = '(?x)\n (?:\n viqeo:|\n https?://cdn\\.viqeo\\.tv/embed/*\\?.*?\\bvid=|\n https?://api\\.viqeo\\.tv/v\\d+/data/startup?.*?\\bvideo(?:%5B%5D|\\[\\])=\n )\n (?P<id>[\\da-f]+)\n '
  10105. _WORKING = False
  10106. _RETURN_TYPE = 'video'
  10107. class ViuBaseIE(LazyLoadExtractor):
  10108. _module = 'yt_dlp.extractor.viu'
  10109. IE_NAME = 'ViuBase'
  10110. class ViuIE(ViuBaseIE):
  10111. _module = 'yt_dlp.extractor.viu'
  10112. IE_NAME = 'Viu'
  10113. _VALID_URL = '(?:viu:|https?://[^/]+\\.viu\\.com/[a-z]{2}/media/)(?P<id>\\d+)'
  10114. _RETURN_TYPE = 'video'
  10115. class ViuOTTIE(LazyLoadExtractor):
  10116. _module = 'yt_dlp.extractor.viu'
  10117. IE_NAME = 'viu:ott'
  10118. _VALID_URL = 'https?://(?:www\\.)?viu\\.com/ott/(?P<country_code>[a-z]{2})/(?P<lang_code>[a-z]{2}-[a-z]{2})/vod/(?P<id>\\d+)'
  10119. _NETRC_MACHINE = 'viu'
  10120. _RETURN_TYPE = 'any'
  10121. class ViuOTTIndonesiaBaseIE(LazyLoadExtractor):
  10122. _module = 'yt_dlp.extractor.viu'
  10123. IE_NAME = 'ViuOTTIndonesiaBase'
  10124. class ViuOTTIndonesiaIE(ViuOTTIndonesiaBaseIE):
  10125. _module = 'yt_dlp.extractor.viu'
  10126. IE_NAME = 'ViuOTTIndonesia'
  10127. _VALID_URL = 'https?://www\\.viu\\.com/ott/\\w+/\\w+/all/video-[\\w-]+-(?P<id>\\d+)'
  10128. age_limit = 13
  10129. _RETURN_TYPE = 'video'
  10130. class ViuPlaylistIE(ViuBaseIE):
  10131. _module = 'yt_dlp.extractor.viu'
  10132. IE_NAME = 'viu:playlist'
  10133. _VALID_URL = 'https?://www\\.viu\\.com/[^/]+/listing/playlist-(?P<id>\\d+)'
  10134. _RETURN_TYPE = 'playlist'
  10135. class VKBaseIE(LazyLoadExtractor):
  10136. _module = 'yt_dlp.extractor.vk'
  10137. IE_NAME = 'VKBase'
  10138. _NETRC_MACHINE = 'vk'
  10139. class VKIE(VKBaseIE):
  10140. _module = 'yt_dlp.extractor.vk'
  10141. IE_NAME = 'vk'
  10142. _VALID_URL = '(?x)\n https?://\n (?:\n (?:\n (?:(?:m|new)\\.)?vk(?:(?:video)?\\.ru|\\.com)/video_|\n (?:www\\.)?daxab\\.com/\n )\n ext\\.php\\?(?P<embed_query>.*?\\boid=(?P<oid>-?\\d+).*?\\bid=(?P<id>\\d+).*)|\n (?:\n (?:(?:m|new)\\.)?vk(?:(?:video)?\\.ru|\\.com)/(?:.+?\\?.*?z=)?(?:video|clip)|\n (?:www\\.)?daxab\\.com/embed/\n )\n (?P<videoid>-?\\d+_\\d+)(?:.*\\blist=(?P<list_id>([\\da-f]+)|(ln-[\\da-zA-Z]+)))?\n )\n '
  10143. IE_DESC = 'VK'
  10144. _NETRC_MACHINE = 'vk'
  10145. _RETURN_TYPE = 'video'
  10146. class VKPlayBaseIE(LazyLoadExtractor):
  10147. _module = 'yt_dlp.extractor.vk'
  10148. IE_NAME = 'VKPlayBase'
  10149. class VKPlayIE(VKPlayBaseIE):
  10150. _module = 'yt_dlp.extractor.vk'
  10151. IE_NAME = 'VKPlay'
  10152. _VALID_URL = 'https?://(?:vkplay\\.live|live\\.vk(?:play|video)\\.ru)/(?P<username>[^/#?]+)/record/(?P<id>[\\da-f-]+)'
  10153. _RETURN_TYPE = 'video'
  10154. class VKPlayLiveIE(VKPlayBaseIE):
  10155. _module = 'yt_dlp.extractor.vk'
  10156. IE_NAME = 'VKPlayLive'
  10157. _VALID_URL = 'https?://(?:vkplay\\.live|live\\.vk(?:play|video)\\.ru)/(?P<id>[^/#?]+)/?(?:[#?]|$)'
  10158. _RETURN_TYPE = 'video'
  10159. class VKUserVideosIE(VKBaseIE):
  10160. _module = 'yt_dlp.extractor.vk'
  10161. IE_NAME = 'vk:uservideos'
  10162. _VALID_URL = ['https?://(?:(?:m|new)\\.)?vk(?:video\\.ru|\\.com/video)/playlist/(?P<id>-?\\d+_\\d+)', 'https?://(?:(?:m|new)\\.)?vk(?:video\\.ru|\\.com/video)/(?P<id>@[^/?#]+)(?:/all)?/?(?!\\?.*\\bz=video)(?:[?#]|$)']
  10163. IE_DESC = "VK - User's Videos"
  10164. _NETRC_MACHINE = 'vk'
  10165. _RETURN_TYPE = 'playlist'
  10166. class VKWallPostIE(VKBaseIE):
  10167. _module = 'yt_dlp.extractor.vk'
  10168. IE_NAME = 'vk:wallpost'
  10169. _VALID_URL = 'https?://(?:(?:(?:(?:m|new)\\.)?vk\\.com/(?:[^?]+\\?.*\\bw=)?wall(?P<id>-?\\d+_\\d+)))'
  10170. _NETRC_MACHINE = 'vk'
  10171. _RETURN_TYPE = 'playlist'
  10172. class VocarooIE(LazyLoadExtractor):
  10173. _module = 'yt_dlp.extractor.vocaroo'
  10174. IE_NAME = 'Vocaroo'
  10175. _VALID_URL = 'https?://(?:www\\.)?(?:vocaroo\\.com|voca\\.ro)/(?:embed/)?(?P<id>\\w+)'
  10176. _RETURN_TYPE = 'video'
  10177. class VODPlIE(OnetBaseIE):
  10178. _module = 'yt_dlp.extractor.vodpl'
  10179. IE_NAME = 'VODPl'
  10180. _VALID_URL = 'https?://vod\\.pl/(?:[^/]+/)+(?P<id>[0-9a-zA-Z]+)'
  10181. _RETURN_TYPE = 'video'
  10182. class VODPlatformIE(LazyLoadExtractor):
  10183. _module = 'yt_dlp.extractor.vodplatform'
  10184. IE_NAME = 'VODPlatform'
  10185. _VALID_URL = 'https?://(?:(?:www\\.)?vod-platform\\.net|embed\\.kwikmotion\\.com)/[eE]mbed/(?P<id>[^/?#]+)'
  10186. _RETURN_TYPE = 'video'
  10187. class VoicyBaseIE(LazyLoadExtractor):
  10188. _module = 'yt_dlp.extractor.voicy'
  10189. IE_NAME = 'VoicyBase'
  10190. class VoicyChannelIE(VoicyBaseIE):
  10191. _module = 'yt_dlp.extractor.voicy'
  10192. IE_NAME = 'voicy:channel'
  10193. _VALID_URL = 'https?://voicy\\.jp/channel/(?P<id>\\d+)'
  10194. _WORKING = False
  10195. _RETURN_TYPE = 'playlist'
  10196. @classmethod
  10197. def suitable(cls, url):
  10198. return not VoicyIE.suitable(url) and super().suitable(url)
  10199. class VoicyIE(VoicyBaseIE):
  10200. _module = 'yt_dlp.extractor.voicy'
  10201. IE_NAME = 'voicy'
  10202. _VALID_URL = 'https?://voicy\\.jp/channel/(?P<channel_id>\\d+)/(?P<id>\\d+)'
  10203. _WORKING = False
  10204. _RETURN_TYPE = 'playlist'
  10205. class VolejTVIE(LazyLoadExtractor):
  10206. _module = 'yt_dlp.extractor.volejtv'
  10207. IE_NAME = 'VolejTV'
  10208. _VALID_URL = 'https?://volej\\.tv/video/(?P<id>\\d+)'
  10209. _RETURN_TYPE = 'video'
  10210. class VoxMediaIE(LazyLoadExtractor):
  10211. _module = 'yt_dlp.extractor.voxmedia'
  10212. IE_NAME = 'VoxMedia'
  10213. _VALID_URL = 'https?://(?:www\\.)?(?:(?:theverge|vox|sbnation|eater|polygon|curbed|racked|funnyordie)\\.com|recode\\.net)/(?:[^/]+/)*(?P<id>[^/?]+)'
  10214. _RETURN_TYPE = 'any'
  10215. class VoxMediaVolumeIE(OnceIE):
  10216. _module = 'yt_dlp.extractor.voxmedia'
  10217. IE_NAME = 'VoxMediaVolume'
  10218. _VALID_URL = 'https?://volume\\.vox-cdn\\.com/embed/(?P<id>[0-9a-f]{9})'
  10219. class GigyaBaseIE(LazyLoadExtractor):
  10220. _module = 'yt_dlp.extractor.gigya'
  10221. IE_NAME = 'GigyaBase'
  10222. class VRTBaseIE(GigyaBaseIE):
  10223. _module = 'yt_dlp.extractor.vrt'
  10224. IE_NAME = 'VRTBase'
  10225. class VRTIE(VRTBaseIE):
  10226. _module = 'yt_dlp.extractor.vrt'
  10227. IE_NAME = 'VRT'
  10228. _VALID_URL = 'https?://(?:www\\.)?(?P<site>vrt\\.be/vrtnws|sporza\\.be)/[a-z]{2}/\\d{4}/\\d{2}/\\d{2}/(?P<id>[^/?&#]+)'
  10229. IE_DESC = 'VRT NWS, Flanders News, Flandern Info and Sporza'
  10230. _RETURN_TYPE = 'video'
  10231. class DagelijkseKostIE(VRTBaseIE):
  10232. _module = 'yt_dlp.extractor.vrt'
  10233. IE_NAME = 'DagelijkseKost'
  10234. _VALID_URL = 'https?://dagelijksekost\\.een\\.be/gerechten/(?P<id>[^/?#&]+)'
  10235. IE_DESC = 'dagelijksekost.een.be'
  10236. _RETURN_TYPE = 'video'
  10237. class KetnetIE(VRTBaseIE):
  10238. _module = 'yt_dlp.extractor.vrt'
  10239. IE_NAME = 'Ketnet'
  10240. _VALID_URL = 'https?://(?:www\\.)?ketnet\\.be/(?P<id>(?:[^/]+/)*[^/?#&]+)'
  10241. _RETURN_TYPE = 'video'
  10242. class Radio1BeIE(VRTBaseIE):
  10243. _module = 'yt_dlp.extractor.vrt'
  10244. IE_NAME = 'Radio1Be'
  10245. _VALID_URL = 'https?://radio1\\.be/(?:lees|luister/select)/(?P<id>[\\w/-]+)'
  10246. _RETURN_TYPE = 'playlist'
  10247. class VrtNUIE(VRTBaseIE):
  10248. _module = 'yt_dlp.extractor.vrt'
  10249. IE_NAME = 'VrtNU'
  10250. _VALID_URL = 'https?://(?:www\\.)?vrt\\.be/vrtnu/a-z/(?:[^/]+/){2}(?P<id>[^/?#&]+)'
  10251. IE_DESC = 'VRT MAX'
  10252. _NETRC_MACHINE = 'vrtnu'
  10253. age_limit = 12
  10254. _RETURN_TYPE = 'video'
  10255. class VTMIE(LazyLoadExtractor):
  10256. _module = 'yt_dlp.extractor.vtm'
  10257. IE_NAME = 'VTM'
  10258. _VALID_URL = 'https?://(?:www\\.)?vtm\\.be/([^/?&#]+)~v(?P<id>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})'
  10259. _WORKING = False
  10260. _RETURN_TYPE = 'video'
  10261. class VTVIE(LazyLoadExtractor):
  10262. _module = 'yt_dlp.extractor.vtv'
  10263. IE_NAME = 'VTV'
  10264. _VALID_URL = 'https?://(?:www\\.)?vtv\\.vn/video/[\\w-]*?(?P<id>\\d+)\\.htm'
  10265. _RETURN_TYPE = 'video'
  10266. class VTVGoIE(LazyLoadExtractor):
  10267. _module = 'yt_dlp.extractor.vtv'
  10268. IE_NAME = 'VTVGo'
  10269. _VALID_URL = ['https?://(?:www\\.)?vtvgo\\.vn/(kho-video|tin-tuc)/[\\w.-]*?(?P<id>\\d+)(?:\\.[a-z]+|/)?(?:$|[?#])', 'https?://(?:www\\.)?vtvgo\\.vn/digital/detail\\.php\\?(?:[^#]+&)?content_id=(?P<id>\\d+)']
  10270. _RETURN_TYPE = 'video'
  10271. class VuClipIE(LazyLoadExtractor):
  10272. _module = 'yt_dlp.extractor.vuclip'
  10273. IE_NAME = 'VuClip'
  10274. _VALID_URL = 'https?://(?:m\\.)?vuclip\\.com/w\\?.*?cid=(?P<id>[0-9]+)'
  10275. _RETURN_TYPE = 'video'
  10276. class VVVVIDIE(LazyLoadExtractor):
  10277. _module = 'yt_dlp.extractor.vvvvid'
  10278. IE_NAME = 'VVVVID'
  10279. _VALID_URL = 'https?://(?:www\\.)?vvvvid\\.it/(?:#!)?(?:show|anime|film|series)/(?P<show_id>\\d+)/[^/]+/(?P<season_id>\\d+)/(?P<id>[0-9]+)'
  10280. _RETURN_TYPE = 'video'
  10281. class VVVVIDShowIE(VVVVIDIE):
  10282. _module = 'yt_dlp.extractor.vvvvid'
  10283. IE_NAME = 'VVVVIDShow'
  10284. _VALID_URL = '(?P<base_url>https?://(?:www\\.)?vvvvid\\.it/(?:#!)?(?:show|anime|film|series)/(?P<id>\\d+)(?:/(?P<show_title>[^/?&#]+))?)/?(?:[?#&]|$)'
  10285. _RETURN_TYPE = 'playlist'
  10286. class WallaIE(LazyLoadExtractor):
  10287. _module = 'yt_dlp.extractor.walla'
  10288. IE_NAME = 'Walla'
  10289. _VALID_URL = 'https?://vod\\.walla\\.co\\.il/[^/]+/(?P<id>\\d+)/(?P<display_id>.+)'
  10290. _RETURN_TYPE = 'video'
  10291. class WashingtonPostArticleIE(LazyLoadExtractor):
  10292. _module = 'yt_dlp.extractor.washingtonpost'
  10293. IE_NAME = 'washingtonpost:article'
  10294. _VALID_URL = 'https?://(?:www\\.)?washingtonpost\\.com/(?:[^/]+/)*(?P<id>[^/?#]+)'
  10295. _RETURN_TYPE = 'playlist'
  10296. @classmethod
  10297. def suitable(cls, url):
  10298. return False if WashingtonPostIE.suitable(url) else super().suitable(url)
  10299. class WashingtonPostIE(LazyLoadExtractor):
  10300. _module = 'yt_dlp.extractor.washingtonpost'
  10301. IE_NAME = 'washingtonpost'
  10302. _VALID_URL = '(?:washingtonpost:|https?://(?:www\\.)?washingtonpost\\.com/(?:video|posttv)/(?:[^/]+/)*)(?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12})'
  10303. _RETURN_TYPE = 'video'
  10304. class WatIE(LazyLoadExtractor):
  10305. _module = 'yt_dlp.extractor.wat'
  10306. IE_NAME = 'wat.tv'
  10307. _VALID_URL = '(?:wat:|https?://(?:www\\.)?wat\\.tv/video/.*-)(?P<id>[0-9a-z]+)'
  10308. _RETURN_TYPE = 'video'
  10309. class WDRIE(LazyLoadExtractor):
  10310. _module = 'yt_dlp.extractor.wdr'
  10311. IE_NAME = 'WDR'
  10312. _VALID_URL = '(?x)https?://\n (?:deviceids-medp\\.wdr\\.de/ondemand/\\d+/|\n kinder\\.wdr\\.de/(?!mediathek/)[^#?]+-)\n (?P<id>\\d+)\\.(?:js|assetjsonp)\n '
  10313. _RETURN_TYPE = 'video'
  10314. class WDRElefantIE(LazyLoadExtractor):
  10315. _module = 'yt_dlp.extractor.wdr'
  10316. IE_NAME = 'WDRElefant'
  10317. _VALID_URL = 'https?://(?:www\\.)wdrmaus\\.de/elefantenseite/#(?P<id>.+)'
  10318. _RETURN_TYPE = 'video'
  10319. class WDRMobileIE(LazyLoadExtractor):
  10320. _module = 'yt_dlp.extractor.wdr'
  10321. IE_NAME = 'wdr:mobile'
  10322. _VALID_URL = '(?x)\n https?://mobile-ondemand\\.wdr\\.de/\n .*?/fsk(?P<age_limit>[0-9]+)\n /[0-9]+/[0-9]+/\n (?P<id>[0-9]+)_(?P<title>[0-9]+)'
  10323. _WORKING = False
  10324. _RETURN_TYPE = 'video'
  10325. class WDRPageIE(WDRIE):
  10326. _module = 'yt_dlp.extractor.wdr'
  10327. IE_NAME = 'WDRPage'
  10328. _VALID_URL = 'https?://(?:www\\d?\\.)?(?:(?:kinder\\.)?wdr\\d?|sportschau)\\.de/(?:mediathek/)?(?:[^/]+/)*(?P<display_id>[^/]+)\\.html|https?://(?:www\\.)wdrmaus.de/(?:[^/]+/)*?(?P<maus_id>[^/?#.]+)(?:/?|/index\\.php5|\\.php5)$'
  10329. _RETURN_TYPE = 'any'
  10330. class WebcameraplIE(LazyLoadExtractor):
  10331. _module = 'yt_dlp.extractor.webcamerapl'
  10332. IE_NAME = 'Webcamerapl'
  10333. _VALID_URL = 'https?://(?P<id>[\\w-]+)\\.webcamera\\.pl'
  10334. _RETURN_TYPE = 'video'
  10335. class WebcasterFeedIE(LazyLoadExtractor):
  10336. _module = 'yt_dlp.extractor.webcaster'
  10337. IE_NAME = 'WebcasterFeed'
  10338. _VALID_URL = 'https?://bl\\.webcaster\\.pro/feed/start/free_(?P<id>[^/]+)'
  10339. class WebcasterIE(LazyLoadExtractor):
  10340. _module = 'yt_dlp.extractor.webcaster'
  10341. IE_NAME = 'Webcaster'
  10342. _VALID_URL = 'https?://bl\\.webcaster\\.pro/(?:quote|media)/start/free_(?P<id>[^/]+)'
  10343. _RETURN_TYPE = 'video'
  10344. class WebOfStoriesIE(LazyLoadExtractor):
  10345. _module = 'yt_dlp.extractor.webofstories'
  10346. IE_NAME = 'WebOfStories'
  10347. _VALID_URL = 'https?://(?:www\\.)?webofstories\\.com/play/(?:[^/]+/)?(?P<id>[0-9]+)'
  10348. _RETURN_TYPE = 'video'
  10349. class WebOfStoriesPlaylistIE(LazyLoadExtractor):
  10350. _module = 'yt_dlp.extractor.webofstories'
  10351. IE_NAME = 'WebOfStoriesPlaylist'
  10352. _VALID_URL = 'https?://(?:www\\.)?webofstories\\.com/playAll/(?P<id>[^/]+)'
  10353. _RETURN_TYPE = 'playlist'
  10354. class WeiboBaseIE(LazyLoadExtractor):
  10355. _module = 'yt_dlp.extractor.weibo'
  10356. IE_NAME = 'WeiboBase'
  10357. class WeiboIE(WeiboBaseIE):
  10358. _module = 'yt_dlp.extractor.weibo'
  10359. IE_NAME = 'Weibo'
  10360. _VALID_URL = 'https?://(?:m\\.weibo\\.cn/status|(?:www\\.)?weibo\\.com/\\d+)/(?P<id>[a-zA-Z0-9]+)'
  10361. _RETURN_TYPE = 'video'
  10362. class WeiboUserIE(WeiboBaseIE):
  10363. _module = 'yt_dlp.extractor.weibo'
  10364. IE_NAME = 'WeiboUser'
  10365. _VALID_URL = 'https?://(?:www\\.)?weibo\\.com/u/(?P<id>\\d+)'
  10366. _RETURN_TYPE = 'playlist'
  10367. class WeiboVideoIE(WeiboBaseIE):
  10368. _module = 'yt_dlp.extractor.weibo'
  10369. IE_NAME = 'WeiboVideo'
  10370. _VALID_URL = 'https?://(?:www\\.)?weibo\\.com/tv/show/(?P<id>\\d+:\\d+)'
  10371. _RETURN_TYPE = 'video'
  10372. class WeiqiTVIE(LazyLoadExtractor):
  10373. _module = 'yt_dlp.extractor.weiqitv'
  10374. IE_NAME = 'WeiqiTV'
  10375. _VALID_URL = 'https?://(?:www\\.)?weiqitv\\.com/index/video_play\\?videoId=(?P<id>[A-Za-z0-9]+)'
  10376. _WORKING = False
  10377. IE_DESC = 'WQTV'
  10378. _RETURN_TYPE = 'video'
  10379. class WeverseBaseIE(LazyLoadExtractor):
  10380. _module = 'yt_dlp.extractor.weverse'
  10381. IE_NAME = 'WeverseBase'
  10382. _NETRC_MACHINE = 'weverse'
  10383. class WeverseIE(WeverseBaseIE):
  10384. _module = 'yt_dlp.extractor.weverse'
  10385. IE_NAME = 'Weverse'
  10386. _VALID_URL = 'https?://(?:www\\.|m\\.)?weverse\\.io/(?P<artist>[^/?#]+)/live/(?P<id>[\\d-]+)'
  10387. _NETRC_MACHINE = 'weverse'
  10388. _RETURN_TYPE = 'video'
  10389. class WeverseLiveIE(WeverseBaseIE):
  10390. _module = 'yt_dlp.extractor.weverse'
  10391. IE_NAME = 'WeverseLive'
  10392. _VALID_URL = 'https?://(?:www\\.|m\\.)?weverse\\.io/(?P<id>[^/?#]+)/?(?:[?#]|$)'
  10393. _NETRC_MACHINE = 'weverse'
  10394. _RETURN_TYPE = 'video'
  10395. class WeverseTabBaseIE(WeverseBaseIE):
  10396. _module = 'yt_dlp.extractor.weverse'
  10397. IE_NAME = 'WeverseTabBase'
  10398. _NETRC_MACHINE = 'weverse'
  10399. class WeverseLiveTabIE(WeverseTabBaseIE):
  10400. _module = 'yt_dlp.extractor.weverse'
  10401. IE_NAME = 'WeverseLiveTab'
  10402. _VALID_URL = 'https?://(?:www\\.|m\\.)?weverse\\.io/(?P<id>[^/?#]+)/live/?(?:[?#]|$)'
  10403. _NETRC_MACHINE = 'weverse'
  10404. _RETURN_TYPE = 'playlist'
  10405. class WeverseMediaIE(WeverseBaseIE):
  10406. _module = 'yt_dlp.extractor.weverse'
  10407. IE_NAME = 'WeverseMedia'
  10408. _VALID_URL = 'https?://(?:www\\.|m\\.)?weverse\\.io/(?P<artist>[^/?#]+)/media/(?P<id>[\\d-]+)'
  10409. _NETRC_MACHINE = 'weverse'
  10410. _RETURN_TYPE = 'video'
  10411. class WeverseMediaTabIE(WeverseTabBaseIE):
  10412. _module = 'yt_dlp.extractor.weverse'
  10413. IE_NAME = 'WeverseMediaTab'
  10414. _VALID_URL = 'https?://(?:www\\.|m\\.)?weverse\\.io/(?P<id>[^/?#]+)/media(?:/|/all|/new)?(?:[?#]|$)'
  10415. _NETRC_MACHINE = 'weverse'
  10416. _RETURN_TYPE = 'playlist'
  10417. class WeverseMomentIE(WeverseBaseIE):
  10418. _module = 'yt_dlp.extractor.weverse'
  10419. IE_NAME = 'WeverseMoment'
  10420. _VALID_URL = 'https?://(?:www\\.|m\\.)?weverse\\.io/(?P<artist>[^/?#]+)/moment/(?P<uid>[\\da-f]+)/post/(?P<id>[\\d-]+)'
  10421. _NETRC_MACHINE = 'weverse'
  10422. _RETURN_TYPE = 'video'
  10423. class WeVidiIE(LazyLoadExtractor):
  10424. _module = 'yt_dlp.extractor.wevidi'
  10425. IE_NAME = 'WeVidi'
  10426. _VALID_URL = 'https?://(?:www\\.)?wevidi\\.net/watch/(?P<id>[\\w-]{11})'
  10427. _RETURN_TYPE = 'video'
  10428. class WeyyakIE(LazyLoadExtractor):
  10429. _module = 'yt_dlp.extractor.weyyak'
  10430. IE_NAME = 'Weyyak'
  10431. _VALID_URL = 'https?://weyyak\\.com/(?P<lang>\\w+)/(?:player/)?(?P<type>episode|movie)/(?P<id>\\d+)'
  10432. age_limit = 15
  10433. _RETURN_TYPE = 'video'
  10434. class WhoWatchIE(LazyLoadExtractor):
  10435. _module = 'yt_dlp.extractor.whowatch'
  10436. IE_NAME = 'whowatch'
  10437. _VALID_URL = 'https?://whowatch\\.tv/viewer/(?P<id>\\d+)'
  10438. class WhypIE(LazyLoadExtractor):
  10439. _module = 'yt_dlp.extractor.whyp'
  10440. IE_NAME = 'Whyp'
  10441. _VALID_URL = 'https?://(?:www\\.)?whyp\\.it/tracks/(?P<id>\\d+)'
  10442. _RETURN_TYPE = 'video'
  10443. class WikimediaIE(LazyLoadExtractor):
  10444. _module = 'yt_dlp.extractor.wikimedia'
  10445. IE_NAME = 'wikimedia.org'
  10446. _VALID_URL = 'https?://commons\\.wikimedia\\.org/wiki/File:(?P<id>[^/#?]+)\\.\\w+'
  10447. _RETURN_TYPE = 'video'
  10448. class WimbledonIE(LazyLoadExtractor):
  10449. _module = 'yt_dlp.extractor.wimbledon'
  10450. IE_NAME = 'Wimbledon'
  10451. _VALID_URL = 'https?://(?:www\\.)?wimbledon\\.com/\\w+/video/media/(?P<id>\\d+)\\.html'
  10452. _RETURN_TYPE = 'video'
  10453. class WimTVIE(LazyLoadExtractor):
  10454. _module = 'yt_dlp.extractor.wimtv'
  10455. IE_NAME = 'WimTV'
  10456. _VALID_URL = '(?x:\n https?://platform\\.wim\\.tv/\n (?:\n (?:embed/)?\\?\n |\\#/webtv/.+?/\n )\n (?P<type>vod|live|cast)[=/]\n (?P<id>[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}).*?)'
  10457. _RETURN_TYPE = 'video'
  10458. class WistiaBaseIE(LazyLoadExtractor):
  10459. _module = 'yt_dlp.extractor.wistia'
  10460. IE_NAME = 'WistiaBase'
  10461. class WistiaChannelIE(WistiaBaseIE):
  10462. _module = 'yt_dlp.extractor.wistia'
  10463. IE_NAME = 'WistiaChannel'
  10464. _VALID_URL = '(?:wistiachannel:|https?://(?:\\w+\\.)?wistia\\.(?:net|com)/(?:embed/)?channel/)(?P<id>[a-z0-9]{10})'
  10465. _RETURN_TYPE = 'any'
  10466. class WistiaIE(WistiaBaseIE):
  10467. _module = 'yt_dlp.extractor.wistia'
  10468. IE_NAME = 'Wistia'
  10469. _VALID_URL = '(?:wistia:|https?://(?:\\w+\\.)?wistia\\.(?:net|com)/(?:embed/)?(?:iframe|medias)/)(?P<id>[a-z0-9]{10})'
  10470. _RETURN_TYPE = 'video'
  10471. class WistiaPlaylistIE(WistiaBaseIE):
  10472. _module = 'yt_dlp.extractor.wistia'
  10473. IE_NAME = 'WistiaPlaylist'
  10474. _VALID_URL = 'https?://(?:\\w+\\.)?wistia\\.(?:net|com)/(?:embed/)?playlists/(?P<id>[a-z0-9]{10})'
  10475. _RETURN_TYPE = 'playlist'
  10476. class WordpressMiniAudioPlayerEmbedIE(LazyLoadExtractor):
  10477. _module = 'yt_dlp.extractor.wordpress'
  10478. IE_NAME = 'wordpress:mb.miniAudioPlayer'
  10479. _VALID_URL = False
  10480. class WordpressPlaylistEmbedIE(LazyLoadExtractor):
  10481. _module = 'yt_dlp.extractor.wordpress'
  10482. IE_NAME = 'wordpress:playlist'
  10483. _VALID_URL = False
  10484. class WorldStarHipHopIE(LazyLoadExtractor):
  10485. _module = 'yt_dlp.extractor.worldstarhiphop'
  10486. IE_NAME = 'WorldStarHipHop'
  10487. _VALID_URL = 'https?://(?:www|m)\\.worldstar(?:candy|hiphop)\\.com/(?:videos|android)/video\\.php\\?.*?\\bv=(?P<id>[^&]+)'
  10488. _RETURN_TYPE = 'video'
  10489. class WPPilotBaseIE(LazyLoadExtractor):
  10490. _module = 'yt_dlp.extractor.wppilot'
  10491. IE_NAME = 'WPPilotBase'
  10492. class WPPilotChannelsIE(WPPilotBaseIE):
  10493. _module = 'yt_dlp.extractor.wppilot'
  10494. IE_NAME = 'wppilot:channels'
  10495. _VALID_URL = '(?:https?://pilot\\.wp\\.pl/(?:tv/?)?(?:\\?[^#]*)?#?|wppilot:)$'
  10496. _RETURN_TYPE = 'playlist'
  10497. class WPPilotIE(WPPilotBaseIE):
  10498. _module = 'yt_dlp.extractor.wppilot'
  10499. IE_NAME = 'wppilot'
  10500. _VALID_URL = '(?:https?://pilot\\.wp\\.pl/tv/?#|wppilot:)(?P<id>[a-z\\d-]+)'
  10501. _RETURN_TYPE = 'video'
  10502. class WrestleUniversePPVIE(WrestleUniverseBaseIE):
  10503. _module = 'yt_dlp.extractor.wrestleuniverse'
  10504. IE_NAME = 'WrestleUniversePPV'
  10505. _VALID_URL = 'https?://(?:www\\.)?wrestle-universe\\.com/(?:(?P<lang>\\w{2})/)?lives/(?P<id>\\w+)'
  10506. _NETRC_MACHINE = 'wrestleuniverse'
  10507. _RETURN_TYPE = 'video'
  10508. class WrestleUniverseVODIE(WrestleUniverseBaseIE):
  10509. _module = 'yt_dlp.extractor.wrestleuniverse'
  10510. IE_NAME = 'WrestleUniverseVOD'
  10511. _VALID_URL = 'https?://(?:www\\.)?wrestle-universe\\.com/(?:(?P<lang>\\w{2})/)?videos/(?P<id>\\w+)'
  10512. _NETRC_MACHINE = 'wrestleuniverse'
  10513. _RETURN_TYPE = 'video'
  10514. class WSJIE(LazyLoadExtractor):
  10515. _module = 'yt_dlp.extractor.wsj'
  10516. IE_NAME = 'WSJ'
  10517. _VALID_URL = '(?x)\n (?:\n https?://video-api\\.wsj\\.com/api-video/player/iframe\\.html\\?.*?\\bguid=|\n https?://(?:www\\.)?(?:wsj|barrons)\\.com/video/(?:[^/]+/)+|\n wsj:\n )\n (?P<id>[a-fA-F0-9-]{36})\n '
  10518. IE_DESC = 'Wall Street Journal'
  10519. _RETURN_TYPE = 'video'
  10520. class WSJArticleIE(LazyLoadExtractor):
  10521. _module = 'yt_dlp.extractor.wsj'
  10522. IE_NAME = 'WSJArticle'
  10523. _VALID_URL = '(?i)https?://(?:www\\.)?wsj\\.com/articles/(?P<id>[^/?#&]+)'
  10524. _RETURN_TYPE = 'video'
  10525. class WWEBaseIE(LazyLoadExtractor):
  10526. _module = 'yt_dlp.extractor.wwe'
  10527. IE_NAME = 'WWEBase'
  10528. class WWEIE(WWEBaseIE):
  10529. _module = 'yt_dlp.extractor.wwe'
  10530. IE_NAME = 'WWE'
  10531. _VALID_URL = 'https?://(?:[^/]+\\.)?wwe\\.com/(?:[^/]+/)*videos/(?P<id>[^/?#&]+)'
  10532. _RETURN_TYPE = 'video'
  10533. class WykopBaseExtractor(LazyLoadExtractor):
  10534. _module = 'yt_dlp.extractor.wykop'
  10535. IE_NAME = 'WykopBaseExtract'
  10536. class WykopDigCommentIE(WykopBaseExtractor):
  10537. _module = 'yt_dlp.extractor.wykop'
  10538. IE_NAME = 'wykop:dig:comment'
  10539. _VALID_URL = 'https?://(?:www\\.)?wykop\\.pl/link/(?P<dig_id>\\d+)/[^/]+/komentarz/(?P<id>\\d+)'
  10540. _RETURN_TYPE = 'video'
  10541. class WykopDigIE(WykopBaseExtractor):
  10542. _module = 'yt_dlp.extractor.wykop'
  10543. IE_NAME = 'wykop:dig'
  10544. _VALID_URL = 'https?://(?:www\\.)?wykop\\.pl/link/(?P<id>\\d+)'
  10545. _RETURN_TYPE = 'video'
  10546. @classmethod
  10547. def suitable(cls, url):
  10548. return cls._match_valid_url(url) and not WykopDigCommentIE.suitable(url)
  10549. class WykopPostCommentIE(WykopBaseExtractor):
  10550. _module = 'yt_dlp.extractor.wykop'
  10551. IE_NAME = 'wykop:post:comment'
  10552. _VALID_URL = 'https?://(?:www\\.)?wykop\\.pl/wpis/(?P<post_id>\\d+)/[^/#]+#(?P<id>\\d+)'
  10553. _RETURN_TYPE = 'video'
  10554. class WykopPostIE(WykopBaseExtractor):
  10555. _module = 'yt_dlp.extractor.wykop'
  10556. IE_NAME = 'wykop:post'
  10557. _VALID_URL = 'https?://(?:www\\.)?wykop\\.pl/wpis/(?P<id>\\d+)'
  10558. _RETURN_TYPE = 'playlist'
  10559. @classmethod
  10560. def suitable(cls, url):
  10561. return cls._match_valid_url(url) and not WykopPostCommentIE.suitable(url)
  10562. class XanimuIE(LazyLoadExtractor):
  10563. _module = 'yt_dlp.extractor.xanimu'
  10564. IE_NAME = 'Xanimu'
  10565. _VALID_URL = 'https?://(?:www\\.)?xanimu\\.com/(?P<id>[^/]+)/?'
  10566. age_limit = 18
  10567. _RETURN_TYPE = 'video'
  10568. class XboxClipsIE(LazyLoadExtractor):
  10569. _module = 'yt_dlp.extractor.xboxclips'
  10570. IE_NAME = 'XboxClips'
  10571. _VALID_URL = 'https?://(?:www\\.)?(?:xboxclips\\.com|gameclips\\.io)/(?:video\\.php\\?.*vid=|[^/]+/)(?P<id>[\\da-f]{8}-(?:[\\da-f]{4}-){3}[\\da-f]{12})'
  10572. _RETURN_TYPE = 'video'
  10573. class XHamsterEmbedIE(LazyLoadExtractor):
  10574. _module = 'yt_dlp.extractor.xhamster'
  10575. IE_NAME = 'XHamsterEmbed'
  10576. _VALID_URL = 'https?://(?:[^/?#]+\\.)?(?:xhamster\\.(?:com|one|desi)|xhms\\.pro|xhamster\\d+\\.com|xhday\\.com|xhvid\\.com)/xembed\\.php\\?video=(?P<id>\\d+)'
  10577. age_limit = 18
  10578. _RETURN_TYPE = 'video'
  10579. class XHamsterIE(LazyLoadExtractor):
  10580. _module = 'yt_dlp.extractor.xhamster'
  10581. IE_NAME = 'XHamster'
  10582. _VALID_URL = '(?x)\n https?://\n (?:[^/?#]+\\.)?(?:xhamster\\.(?:com|one|desi)|xhms\\.pro|xhamster\\d+\\.com|xhday\\.com|xhvid\\.com)/\n (?:\n movies/(?P<id>[\\dA-Za-z]+)/(?P<display_id>[^/]*)\\.html|\n videos/(?P<display_id_2>[^/]*)-(?P<id_2>[\\dA-Za-z]+)\n )\n '
  10583. age_limit = 18
  10584. _RETURN_TYPE = 'video'
  10585. class XHamsterUserIE(LazyLoadExtractor):
  10586. _module = 'yt_dlp.extractor.xhamster'
  10587. IE_NAME = 'XHamsterUser'
  10588. _VALID_URL = 'https?://(?:[^/?#]+\\.)?(?:xhamster\\.(?:com|one|desi)|xhms\\.pro|xhamster\\d+\\.com|xhday\\.com|xhvid\\.com)/(?:(?P<user>users)|creators)/(?P<id>[^/?#&]+)'
  10589. _RETURN_TYPE = 'playlist'
  10590. class XiaoHongShuIE(LazyLoadExtractor):
  10591. _module = 'yt_dlp.extractor.xiaohongshu'
  10592. IE_NAME = 'XiaoHongShu'
  10593. _VALID_URL = 'https?://www\\.xiaohongshu\\.com/(?:explore|discovery/item)/(?P<id>[\\da-f]+)'
  10594. IE_DESC = '小红书'
  10595. _RETURN_TYPE = 'video'
  10596. class XimalayaBaseIE(LazyLoadExtractor):
  10597. _module = 'yt_dlp.extractor.ximalaya'
  10598. IE_NAME = 'XimalayaBase'
  10599. class XimalayaAlbumIE(XimalayaBaseIE):
  10600. _module = 'yt_dlp.extractor.ximalaya'
  10601. IE_NAME = 'ximalaya:album'
  10602. _VALID_URL = 'https?://(?:www\\.|m\\.)?ximalaya\\.com/(?:\\d+/)?album/(?P<id>[0-9]+)'
  10603. IE_DESC = '喜马拉雅FM 专辑'
  10604. _RETURN_TYPE = 'playlist'
  10605. class XimalayaIE(XimalayaBaseIE):
  10606. _module = 'yt_dlp.extractor.ximalaya'
  10607. IE_NAME = 'ximalaya'
  10608. _VALID_URL = 'https?://(?:www\\.|m\\.)?ximalaya\\.com/(?:(?P<uid>\\d+)/)?sound/(?P<id>[0-9]+)'
  10609. IE_DESC = '喜马拉雅FM'
  10610. _RETURN_TYPE = 'video'
  10611. class XinpianchangIE(LazyLoadExtractor):
  10612. _module = 'yt_dlp.extractor.xinpianchang'
  10613. IE_NAME = 'Xinpianchang'
  10614. _VALID_URL = 'https?://(www\\.)?xinpianchang\\.com/(?P<id>a\\d+)'
  10615. IE_DESC = '新片场'
  10616. _RETURN_TYPE = 'video'
  10617. class XMinusIE(LazyLoadExtractor):
  10618. _module = 'yt_dlp.extractor.xminus'
  10619. IE_NAME = 'XMinus'
  10620. _VALID_URL = 'https?://(?:www\\.)?x-minus\\.org/track/(?P<id>[0-9]+)'
  10621. _WORKING = False
  10622. _RETURN_TYPE = 'video'
  10623. class XNXXIE(LazyLoadExtractor):
  10624. _module = 'yt_dlp.extractor.xnxx'
  10625. IE_NAME = 'XNXX'
  10626. _VALID_URL = 'https?://(?:video|www)\\.xnxx3?\\.com/video-?(?P<id>[0-9a-z]+)/'
  10627. age_limit = 18
  10628. _RETURN_TYPE = 'video'
  10629. class XstreamIE(LazyLoadExtractor):
  10630. _module = 'yt_dlp.extractor.xstream'
  10631. IE_NAME = 'Xstream'
  10632. _VALID_URL = '(?x)\n (?:\n xstream:|\n https?://frontend\\.xstream\\.(?:dk|net)/\n )\n (?P<partner_id>[^/]+)\n (?:\n :|\n /feed/video/\\?.*?\\bid=\n )\n (?P<id>\\d+)\n '
  10633. _RETURN_TYPE = 'video'
  10634. class VGTVIE(XstreamIE):
  10635. _module = 'yt_dlp.extractor.vgtv'
  10636. IE_NAME = 'VGTV'
  10637. _VALID_URL = '(?x)\n (?:https?://(?:www\\.)?\n (?P<host>\n tv.vg.no|vgtv.no|bt.no/tv|aftenbladet.no/tv|fvn.no/fvntv|aftenposten.no/webtv|ap.vgtv.no/webtv|tv.aftonbladet.se|tv.aftonbladet.se/abtv|www.aftonbladet.se/tv\n )\n /?\n (?:\n (?:\\#!/)?(?:video|live)/|\n embed?.*id=|\n a(?:rticles)?/\n )|\n (?P<appname>\n vgtv|bttv|satv|fvntv|aptv|abtv\n ):)\n (?P<id>\\d+)\n '
  10638. IE_DESC = 'VGTV, BTTV, FTV, Aftenposten and Aftonbladet'
  10639. _RETURN_TYPE = 'video'
  10640. class XVideosIE(LazyLoadExtractor):
  10641. _module = 'yt_dlp.extractor.xvideos'
  10642. IE_NAME = 'XVideos'
  10643. _VALID_URL = '(?x)\n https?://\n (?:\n (?:[^/]+\\.)?xvideos2?\\.com/video\\.?|\n (?:www\\.)?xvideos\\.es/video\\.?|\n (?:www|flashservice)\\.xvideos\\.com/embedframe/|\n static-hw\\.xvideos\\.com/swf/xv-player\\.swf\\?.*?\\bid_video=\n )\n (?P<id>[0-9a-z]+)\n '
  10644. age_limit = 18
  10645. _RETURN_TYPE = 'video'
  10646. class XVideosQuickiesIE(LazyLoadExtractor):
  10647. _module = 'yt_dlp.extractor.xvideos'
  10648. IE_NAME = 'xvideos:quickies'
  10649. _VALID_URL = 'https?://(?P<domain>(?:[^/?#]+\\.)?xvideos2?\\.com)/(?:profiles/|amateur-channels/)?[^/?#]+#quickies/a/(?P<id>\\w+)'
  10650. age_limit = 18
  10651. _RETURN_TYPE = 'video'
  10652. class XXXYMoviesIE(LazyLoadExtractor):
  10653. _module = 'yt_dlp.extractor.xxxymovies'
  10654. IE_NAME = 'XXXYMovies'
  10655. _VALID_URL = 'https?://(?:www\\.)?xxxymovies\\.com/videos/(?P<id>\\d+)/(?P<display_id>[^/]+)'
  10656. age_limit = 18
  10657. _RETURN_TYPE = 'video'
  10658. class YahooIE(LazyLoadExtractor):
  10659. _module = 'yt_dlp.extractor.yahoo'
  10660. IE_NAME = 'Yahoo'
  10661. _VALID_URL = '(?P<url>https?://(?:(?P<country>[a-zA-Z]{2}(?:-[a-zA-Z]{2})?|malaysia)\\.)?(?:[\\da-zA-Z_-]+\\.)?yahoo\\.com/(?:[^/]+/)*(?P<id>[^?&#]*-[0-9]+(?:-[a-z]+)?)\\.html)'
  10662. IE_DESC = 'Yahoo screen and movies'
  10663. _RETURN_TYPE = 'any'
  10664. class AolIE(YahooIE):
  10665. _module = 'yt_dlp.extractor.aol'
  10666. IE_NAME = 'aol.com'
  10667. _VALID_URL = '(?:aol-video:|https?://(?:www\\.)?aol\\.(?:com|ca|co\\.uk|de|jp)/video/(?:[^/]+/)*)(?P<id>\\d{9}|[0-9a-f]{24}|[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12})'
  10668. _WORKING = False
  10669. IE_DESC = 'Yahoo screen and movies'
  10670. _RETURN_TYPE = 'video'
  10671. class YahooJapanNewsIE(LazyLoadExtractor):
  10672. _module = 'yt_dlp.extractor.yahoo'
  10673. IE_NAME = 'yahoo:japannews'
  10674. _VALID_URL = 'https?://news\\.yahoo\\.co\\.jp/(?:articles|feature)/(?P<id>[a-zA-Z0-9]+)'
  10675. IE_DESC = 'Yahoo! Japan News'
  10676. _RETURN_TYPE = 'video'
  10677. class YahooSearchIE(LazyLoadSearchExtractor):
  10678. _module = 'yt_dlp.extractor.yahoo'
  10679. IE_NAME = 'screen.yahoo:search'
  10680. _VALID_URL = 'yvsearch(?P<prefix>|[1-9][0-9]*|all):(?P<query>[\\s\\S]+)'
  10681. IE_DESC = 'Yahoo screen search'
  10682. SEARCH_KEY = 'yvsearch'
  10683. _RETURN_TYPE = 'playlist'
  10684. class YandexDiskIE(LazyLoadExtractor):
  10685. _module = 'yt_dlp.extractor.yandexdisk'
  10686. IE_NAME = 'YandexDisk'
  10687. _VALID_URL = '(?x)https?://\n (?P<domain>\n yadi\\.sk|\n disk\\.yandex\\.\n (?:\n az|\n by|\n co(?:m(?:\\.(?:am|ge|tr))?|\\.il)|\n ee|\n fr|\n k[gz]|\n l[tv]|\n md|\n t[jm]|\n u[az]|\n ru\n )\n )/(?:[di]/|public.*?\\bhash=)(?P<id>[^/?#&]+)'
  10688. _RETURN_TYPE = 'video'
  10689. class YandexMusicBaseIE(LazyLoadExtractor):
  10690. _module = 'yt_dlp.extractor.yandexmusic'
  10691. IE_NAME = 'YandexMusicBase'
  10692. class YandexMusicPlaylistBaseIE(YandexMusicBaseIE):
  10693. _module = 'yt_dlp.extractor.yandexmusic'
  10694. IE_NAME = 'YandexMusicPlaylistBase'
  10695. class YandexMusicAlbumIE(YandexMusicPlaylistBaseIE):
  10696. _module = 'yt_dlp.extractor.yandexmusic'
  10697. IE_NAME = 'yandexmusic:album'
  10698. _VALID_URL = 'https?://music\\.yandex\\.(?P<tld>ru|kz|ua|by|com)/album/(?P<id>\\d+)'
  10699. IE_DESC = 'Яндекс.Музыка - Альбом'
  10700. _RETURN_TYPE = 'playlist'
  10701. @classmethod
  10702. def suitable(cls, url):
  10703. return False if YandexMusicTrackIE.suitable(url) else super().suitable(url)
  10704. class YandexMusicArtistBaseIE(YandexMusicPlaylistBaseIE):
  10705. _module = 'yt_dlp.extractor.yandexmusic'
  10706. IE_NAME = 'YandexMusicArtistBase'
  10707. class YandexMusicArtistAlbumsIE(YandexMusicArtistBaseIE):
  10708. _module = 'yt_dlp.extractor.yandexmusic'
  10709. IE_NAME = 'yandexmusic:artist:albums'
  10710. _VALID_URL = 'https?://music\\.yandex\\.(?P<tld>ru|kz|ua|by|com)/artist/(?P<id>\\d+)/albums'
  10711. IE_DESC = 'Яндекс.Музыка - Артист - Альбомы'
  10712. _RETURN_TYPE = 'playlist'
  10713. class YandexMusicArtistTracksIE(YandexMusicArtistBaseIE):
  10714. _module = 'yt_dlp.extractor.yandexmusic'
  10715. IE_NAME = 'yandexmusic:artist:tracks'
  10716. _VALID_URL = 'https?://music\\.yandex\\.(?P<tld>ru|kz|ua|by|com)/artist/(?P<id>\\d+)/tracks'
  10717. IE_DESC = 'Яндекс.Музыка - Артист - Треки'
  10718. _RETURN_TYPE = 'playlist'
  10719. class YandexMusicPlaylistIE(YandexMusicPlaylistBaseIE):
  10720. _module = 'yt_dlp.extractor.yandexmusic'
  10721. IE_NAME = 'yandexmusic:playlist'
  10722. _VALID_URL = 'https?://music\\.yandex\\.(?P<tld>ru|kz|ua|by|com)/users/(?P<user>[^/]+)/playlists/(?P<id>\\d+)'
  10723. IE_DESC = 'Яндекс.Музыка - Плейлист'
  10724. _RETURN_TYPE = 'playlist'
  10725. class YandexMusicTrackIE(YandexMusicBaseIE):
  10726. _module = 'yt_dlp.extractor.yandexmusic'
  10727. IE_NAME = 'yandexmusic:track'
  10728. _VALID_URL = 'https?://music\\.yandex\\.(?P<tld>ru|kz|ua|by|com)/album/(?P<album_id>\\d+)/track/(?P<id>\\d+)'
  10729. IE_DESC = 'Яндекс.Музыка - Трек'
  10730. _RETURN_TYPE = 'video'
  10731. class YandexVideoIE(LazyLoadExtractor):
  10732. _module = 'yt_dlp.extractor.yandexvideo'
  10733. IE_NAME = 'YandexVideo'
  10734. _VALID_URL = '(?x)\n https?://\n (?:\n yandex\\.ru(?:/(?:portal/(?:video|efir)|efir))?/?\\?.*?stream_id=|\n frontend\\.vh\\.yandex\\.ru/player/\n )\n (?P<id>(?:[\\da-f]{32}|[\\w-]{12}))\n '
  10735. age_limit = 18
  10736. _RETURN_TYPE = 'video'
  10737. class YandexVideoPreviewIE(LazyLoadExtractor):
  10738. _module = 'yt_dlp.extractor.yandexvideo'
  10739. IE_NAME = 'YandexVideoPreview'
  10740. _VALID_URL = 'https?://(?:www\\.)?yandex\\.\\w{2,3}(?:\\.(?:am|ge|il|tr))?/video/preview(?:/?\\?.*?filmId=|/)(?P<id>\\d+)'
  10741. _RETURN_TYPE = 'video'
  10742. class ZenYandexChannelIE(LazyLoadExtractor):
  10743. _module = 'yt_dlp.extractor.yandexvideo'
  10744. IE_NAME = 'ZenYandexChannel'
  10745. _VALID_URL = 'https?://(zen\\.yandex|dzen)\\.ru/(?!media|video)(?:id/)?(?P<id>[a-z0-9-_]+)'
  10746. _RETURN_TYPE = 'playlist'
  10747. class ZenYandexIE(LazyLoadExtractor):
  10748. _module = 'yt_dlp.extractor.yandexvideo'
  10749. IE_NAME = 'ZenYandex'
  10750. _VALID_URL = 'https?://(zen\\.yandex|dzen)\\.ru(?:/video)?/(media|watch)/(?:(?:id/[^/]+/|[^/]+/)(?:[a-z0-9-]+)-)?(?P<id>[a-z0-9-]+)'
  10751. _RETURN_TYPE = 'video'
  10752. class YapFilesIE(LazyLoadExtractor):
  10753. _module = 'yt_dlp.extractor.yapfiles'
  10754. IE_NAME = 'YapFiles'
  10755. _VALID_URL = 'https?://(?:(?:www|api)\\.)?yapfiles\\.ru/get_player/*\\?.*?\\bv=(?P<id>\\w+)'
  10756. _WORKING = False
  10757. _RETURN_TYPE = 'video'
  10758. class YappyIE(LazyLoadExtractor):
  10759. _module = 'yt_dlp.extractor.yappy'
  10760. IE_NAME = 'Yappy'
  10761. _VALID_URL = 'https?://yappy\\.media/video/(?P<id>\\w+)'
  10762. _WORKING = False
  10763. _RETURN_TYPE = 'video'
  10764. class YappyProfileIE(LazyLoadExtractor):
  10765. _module = 'yt_dlp.extractor.yappy'
  10766. IE_NAME = 'YappyProfile'
  10767. _VALID_URL = 'https?://yappy\\.media/profile/(?P<id>\\w+)'
  10768. _RETURN_TYPE = 'playlist'
  10769. class YleAreenaIE(LazyLoadExtractor):
  10770. _module = 'yt_dlp.extractor.yle_areena'
  10771. IE_NAME = 'YleAreena'
  10772. _VALID_URL = 'https?://areena\\.yle\\.fi/(?P<podcast>podcastit/)?(?P<id>[\\d-]+)'
  10773. age_limit = 7
  10774. _RETURN_TYPE = 'video'
  10775. class YouJizzIE(LazyLoadExtractor):
  10776. _module = 'yt_dlp.extractor.youjizz'
  10777. IE_NAME = 'YouJizz'
  10778. _VALID_URL = 'https?://(?:\\w+\\.)?youjizz\\.com/videos/(?:[^/#?]*-(?P<id>\\d+)\\.html|embed/(?P<embed_id>\\d+))'
  10779. age_limit = 18
  10780. _RETURN_TYPE = 'video'
  10781. class YoukuIE(LazyLoadExtractor):
  10782. _module = 'yt_dlp.extractor.youku'
  10783. IE_NAME = 'youku'
  10784. _VALID_URL = '(?x)\n (?:\n https?://(\n (?:v|play(?:er)?)\\.(?:youku|tudou)\\.com/(?:v_show/id_|player\\.php/sid/)|\n video\\.tudou\\.com/v/)|\n youku:)\n (?P<id>[A-Za-z0-9]+)(?:\\.html|/v\\.swf|)\n '
  10785. IE_DESC = '优酷'
  10786. _RETURN_TYPE = 'video'
  10787. class YoukuShowIE(LazyLoadExtractor):
  10788. _module = 'yt_dlp.extractor.youku'
  10789. IE_NAME = 'youku:show'
  10790. _VALID_URL = 'https?://list\\.youku\\.com/show/id_(?P<id>[0-9a-z]+)\\.html'
  10791. _RETURN_TYPE = 'playlist'
  10792. class YouNowChannelIE(LazyLoadExtractor):
  10793. _module = 'yt_dlp.extractor.younow'
  10794. IE_NAME = 'YouNowChannel'
  10795. _VALID_URL = 'https?://(?:www\\.)?younow\\.com/(?P<id>[^/]+)/channel'
  10796. _RETURN_TYPE = 'playlist'
  10797. class YouNowLiveIE(LazyLoadExtractor):
  10798. _module = 'yt_dlp.extractor.younow'
  10799. IE_NAME = 'YouNowLive'
  10800. _VALID_URL = 'https?://(?:www\\.)?younow\\.com/(?P<id>[^/?#&]+)'
  10801. _RETURN_TYPE = 'video'
  10802. @classmethod
  10803. def suitable(cls, url):
  10804. return (False
  10805. if YouNowChannelIE.suitable(url) or YouNowMomentIE.suitable(url)
  10806. else super().suitable(url))
  10807. class YouNowMomentIE(LazyLoadExtractor):
  10808. _module = 'yt_dlp.extractor.younow'
  10809. IE_NAME = 'YouNowMoment'
  10810. _VALID_URL = 'https?://(?:www\\.)?younow\\.com/[^/]+/(?P<id>[^/?#&]+)'
  10811. _RETURN_TYPE = 'video'
  10812. @classmethod
  10813. def suitable(cls, url):
  10814. return (False
  10815. if YouNowChannelIE.suitable(url)
  10816. else super().suitable(url))
  10817. class YouPornListBase(LazyLoadExtractor):
  10818. _module = 'yt_dlp.extractor.youporn'
  10819. IE_NAME = 'YouPornListBa'
  10820. class YouPornCategoryIE(YouPornListBase):
  10821. _module = 'yt_dlp.extractor.youporn'
  10822. IE_NAME = 'YouPornCategory'
  10823. _VALID_URL = '(?x)\n https?://(?:www\\.)?youporn\\.com/\n (?P<type>category)/(?P<id>[^/?#&]+)\n (?:/(?P<sort>popular|views|rating|time|duration))?/?(?:[#?]|$)\n '
  10824. IE_DESC = 'YouPorn category, with sorting, filtering and pagination'
  10825. _RETURN_TYPE = 'playlist'
  10826. class YouPornChannelIE(YouPornListBase):
  10827. _module = 'yt_dlp.extractor.youporn'
  10828. IE_NAME = 'YouPornChannel'
  10829. _VALID_URL = '(?x)\n https?://(?:www\\.)?youporn\\.com/\n (?P<type>channel)/(?P<id>[^/?#&]+)\n (?:/(?P<sort>rating|views|duration))?/?(?:[#?]|$)\n '
  10830. IE_DESC = 'YouPorn channel, with sorting and pagination'
  10831. _RETURN_TYPE = 'playlist'
  10832. class YouPornCollectionIE(YouPornListBase):
  10833. _module = 'yt_dlp.extractor.youporn'
  10834. IE_NAME = 'YouPornCollection'
  10835. _VALID_URL = '(?x)\n https?://(?:www\\.)?youporn\\.com/\n (?P<type>collection)s/videos/(?P<id>\\d+)\n (?:/(?P<sort>rating|views|time|duration))?/?(?:[#?]|$)\n '
  10836. IE_DESC = 'YouPorn collection (user playlist), with sorting and pagination'
  10837. _RETURN_TYPE = 'playlist'
  10838. class YouPornIE(LazyLoadExtractor):
  10839. _module = 'yt_dlp.extractor.youporn'
  10840. IE_NAME = 'YouPorn'
  10841. _VALID_URL = 'https?://(?:www\\.)?youporn\\.com/(?:watch|embed)/(?P<id>\\d+)(?:/(?P<display_id>[^/?#&]+))?/?(?:[#?]|$)'
  10842. age_limit = 18
  10843. _RETURN_TYPE = 'video'
  10844. class YouPornStarIE(YouPornListBase):
  10845. _module = 'yt_dlp.extractor.youporn'
  10846. IE_NAME = 'YouPornStar'
  10847. _VALID_URL = '(?x)\n https?://(?:www\\.)?youporn\\.com/\n (?P<type>pornstar)/(?P<id>[^/?#&]+)\n (?:/(?P<sort>rating|views|duration))?/?(?:[#?]|$)\n '
  10848. IE_DESC = 'YouPorn Pornstar, with description, sorting and pagination'
  10849. _RETURN_TYPE = 'playlist'
  10850. class YouPornTagIE(YouPornListBase):
  10851. _module = 'yt_dlp.extractor.youporn'
  10852. IE_NAME = 'YouPornTag'
  10853. _VALID_URL = '(?x)\n https?://(?:www\\.)?youporn\\.com/\n porn(?P<type>tag)s/(?P<id>[^/?#&]+)\n (?:/(?P<sort>views|rating|time|duration))?/?(?:[#?]|$)\n '
  10854. IE_DESC = 'YouPorn tag (porntags), with sorting, filtering and pagination'
  10855. _RETURN_TYPE = 'playlist'
  10856. class YouPornVideosIE(YouPornListBase):
  10857. _module = 'yt_dlp.extractor.youporn'
  10858. IE_NAME = 'YouPornVideos'
  10859. _VALID_URL = '(?x)\n https?://(?:www\\.)?youporn\\.com/\n (?:(?P<id>browse)/)?\n (?P<sort>(?(id)\n (?:duration|rating|time|views)|\n (?:most_(?:favou?rit|view)ed|recommended|top_rated)?))\n (?:[/#?]|$)\n '
  10860. IE_DESC = 'YouPorn video (browse) playlists, with sorting, filtering and pagination'
  10861. _RETURN_TYPE = 'playlist'
  10862. class ZaikoBaseIE(LazyLoadExtractor):
  10863. _module = 'yt_dlp.extractor.zaiko'
  10864. IE_NAME = 'ZaikoBase'
  10865. class ZaikoETicketIE(ZaikoBaseIE):
  10866. _module = 'yt_dlp.extractor.zaiko'
  10867. IE_NAME = 'ZaikoETicket'
  10868. _VALID_URL = 'https?://(?:www.)?zaiko\\.io/account/eticket/(?P<id>[\\w=-]{49})'
  10869. _RETURN_TYPE = 'playlist'
  10870. class ZaikoIE(ZaikoBaseIE):
  10871. _module = 'yt_dlp.extractor.zaiko'
  10872. IE_NAME = 'Zaiko'
  10873. _VALID_URL = 'https?://(?:[\\w-]+\\.)?zaiko\\.io/event/(?P<id>\\d+)/stream(?:/\\d+)+'
  10874. _RETURN_TYPE = 'video'
  10875. class ZapiksIE(LazyLoadExtractor):
  10876. _module = 'yt_dlp.extractor.zapiks'
  10877. IE_NAME = 'Zapiks'
  10878. _VALID_URL = 'https?://(?:www\\.)?zapiks\\.(?:fr|com)/(?:(?:[a-z]{2}/)?(?P<display_id>.+?)\\.html|index\\.php\\?.*\\bmedia_id=(?P<id>\\d+))'
  10879. _RETURN_TYPE = 'video'
  10880. class ZattooPlatformBaseIE(LazyLoadExtractor):
  10881. _module = 'yt_dlp.extractor.zattoo'
  10882. IE_NAME = 'ZattooPlatformBase'
  10883. class BBVTVBaseIE(ZattooPlatformBaseIE):
  10884. _module = 'yt_dlp.extractor.zattoo'
  10885. IE_NAME = 'BBVTVBase'
  10886. _NETRC_MACHINE = 'bbvtv'
  10887. class BBVTVIE(BBVTVBaseIE):
  10888. _module = 'yt_dlp.extractor.zattoo'
  10889. IE_NAME = 'BBVTV'
  10890. _VALID_URL = '(?x)https?://(?:www\\.)?bbv\\-tv\\.net/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10891. _NETRC_MACHINE = 'bbvtv'
  10892. class EWETVBaseIE(ZattooPlatformBaseIE):
  10893. _module = 'yt_dlp.extractor.zattoo'
  10894. IE_NAME = 'EWETVBase'
  10895. _NETRC_MACHINE = 'ewetv'
  10896. class EWETVIE(EWETVBaseIE):
  10897. _module = 'yt_dlp.extractor.zattoo'
  10898. IE_NAME = 'EWETV'
  10899. _VALID_URL = '(?x)https?://(?:www\\.)?tvonline\\.ewe\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10900. _NETRC_MACHINE = 'ewetv'
  10901. class SAKTVBaseIE(ZattooPlatformBaseIE):
  10902. _module = 'yt_dlp.extractor.zattoo'
  10903. IE_NAME = 'SAKTVBase'
  10904. _NETRC_MACHINE = 'saktv'
  10905. class SAKTVIE(SAKTVBaseIE):
  10906. _module = 'yt_dlp.extractor.zattoo'
  10907. IE_NAME = 'SAKTV'
  10908. _VALID_URL = '(?x)https?://(?:www\\.)?saktv\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10909. _NETRC_MACHINE = 'saktv'
  10910. class VTXTVBaseIE(ZattooPlatformBaseIE):
  10911. _module = 'yt_dlp.extractor.zattoo'
  10912. IE_NAME = 'VTXTVBase'
  10913. _NETRC_MACHINE = 'vtxtv'
  10914. class VTXTVIE(VTXTVBaseIE):
  10915. _module = 'yt_dlp.extractor.zattoo'
  10916. IE_NAME = 'VTXTV'
  10917. _VALID_URL = '(?x)https?://(?:www\\.)?vtxtv\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10918. _NETRC_MACHINE = 'vtxtv'
  10919. class BBVTVLiveIE(BBVTVBaseIE):
  10920. _module = 'yt_dlp.extractor.zattoo'
  10921. IE_NAME = 'BBVTVLive'
  10922. _VALID_URL = '(?x)https?://(?:www\\.)?bbv\\-tv\\.net/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  10923. _NETRC_MACHINE = 'bbvtv'
  10924. @classmethod
  10925. def suitable(cls, url):
  10926. return False if BBVTVIE.suitable(url) else super().suitable(url)
  10927. class BBVTVRecordingsIE(BBVTVBaseIE):
  10928. _module = 'yt_dlp.extractor.zattoo'
  10929. IE_NAME = 'BBVTVRecordings'
  10930. _VALID_URL = '(?x)https?://(?:www\\.)?bbv\\-tv\\.net/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  10931. _NETRC_MACHINE = 'bbvtv'
  10932. class EinsUndEinsTVBaseIE(ZattooPlatformBaseIE):
  10933. _module = 'yt_dlp.extractor.zattoo'
  10934. IE_NAME = 'EinsUndEinsTVBase'
  10935. _NETRC_MACHINE = '1und1tv'
  10936. class EinsUndEinsTVIE(EinsUndEinsTVBaseIE):
  10937. _module = 'yt_dlp.extractor.zattoo'
  10938. IE_NAME = 'EinsUndEinsTV'
  10939. _VALID_URL = '(?x)https?://(?:www\\.)?1und1\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10940. _NETRC_MACHINE = '1und1tv'
  10941. class EinsUndEinsTVLiveIE(EinsUndEinsTVBaseIE):
  10942. _module = 'yt_dlp.extractor.zattoo'
  10943. IE_NAME = 'EinsUndEinsTVLive'
  10944. _VALID_URL = '(?x)https?://(?:www\\.)?1und1\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  10945. _NETRC_MACHINE = '1und1tv'
  10946. @classmethod
  10947. def suitable(cls, url):
  10948. return False if EinsUndEinsTVIE.suitable(url) else super().suitable(url)
  10949. class EinsUndEinsTVRecordingsIE(EinsUndEinsTVBaseIE):
  10950. _module = 'yt_dlp.extractor.zattoo'
  10951. IE_NAME = 'EinsUndEinsTVRecordings'
  10952. _VALID_URL = '(?x)https?://(?:www\\.)?1und1\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  10953. _NETRC_MACHINE = '1und1tv'
  10954. class EWETVLiveIE(EWETVBaseIE):
  10955. _module = 'yt_dlp.extractor.zattoo'
  10956. IE_NAME = 'EWETVLive'
  10957. _VALID_URL = '(?x)https?://(?:www\\.)?tvonline\\.ewe\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  10958. _NETRC_MACHINE = 'ewetv'
  10959. @classmethod
  10960. def suitable(cls, url):
  10961. return False if EWETVIE.suitable(url) else super().suitable(url)
  10962. class EWETVRecordingsIE(EWETVBaseIE):
  10963. _module = 'yt_dlp.extractor.zattoo'
  10964. IE_NAME = 'EWETVRecordings'
  10965. _VALID_URL = '(?x)https?://(?:www\\.)?tvonline\\.ewe\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  10966. _NETRC_MACHINE = 'ewetv'
  10967. class GlattvisionTVBaseIE(ZattooPlatformBaseIE):
  10968. _module = 'yt_dlp.extractor.zattoo'
  10969. IE_NAME = 'GlattvisionTVBase'
  10970. _NETRC_MACHINE = 'glattvisiontv'
  10971. class GlattvisionTVIE(GlattvisionTVBaseIE):
  10972. _module = 'yt_dlp.extractor.zattoo'
  10973. IE_NAME = 'GlattvisionTV'
  10974. _VALID_URL = '(?x)https?://(?:www\\.)?iptv\\.glattvision\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10975. _NETRC_MACHINE = 'glattvisiontv'
  10976. class GlattvisionTVLiveIE(GlattvisionTVBaseIE):
  10977. _module = 'yt_dlp.extractor.zattoo'
  10978. IE_NAME = 'GlattvisionTVLive'
  10979. _VALID_URL = '(?x)https?://(?:www\\.)?iptv\\.glattvision\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  10980. _NETRC_MACHINE = 'glattvisiontv'
  10981. @classmethod
  10982. def suitable(cls, url):
  10983. return False if GlattvisionTVIE.suitable(url) else super().suitable(url)
  10984. class GlattvisionTVRecordingsIE(GlattvisionTVBaseIE):
  10985. _module = 'yt_dlp.extractor.zattoo'
  10986. IE_NAME = 'GlattvisionTVRecordings'
  10987. _VALID_URL = '(?x)https?://(?:www\\.)?iptv\\.glattvision\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  10988. _NETRC_MACHINE = 'glattvisiontv'
  10989. class MNetTVBaseIE(ZattooPlatformBaseIE):
  10990. _module = 'yt_dlp.extractor.zattoo'
  10991. IE_NAME = 'MNetTVBase'
  10992. _NETRC_MACHINE = 'mnettv'
  10993. class MNetTVIE(MNetTVBaseIE):
  10994. _module = 'yt_dlp.extractor.zattoo'
  10995. IE_NAME = 'MNetTV'
  10996. _VALID_URL = '(?x)https?://(?:www\\.)?tvplus\\.m\\-net\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  10997. _NETRC_MACHINE = 'mnettv'
  10998. class MNetTVLiveIE(MNetTVBaseIE):
  10999. _module = 'yt_dlp.extractor.zattoo'
  11000. IE_NAME = 'MNetTVLive'
  11001. _VALID_URL = '(?x)https?://(?:www\\.)?tvplus\\.m\\-net\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11002. _NETRC_MACHINE = 'mnettv'
  11003. @classmethod
  11004. def suitable(cls, url):
  11005. return False if MNetTVIE.suitable(url) else super().suitable(url)
  11006. class MNetTVRecordingsIE(MNetTVBaseIE):
  11007. _module = 'yt_dlp.extractor.zattoo'
  11008. IE_NAME = 'MNetTVRecordings'
  11009. _VALID_URL = '(?x)https?://(?:www\\.)?tvplus\\.m\\-net\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11010. _NETRC_MACHINE = 'mnettv'
  11011. class NetPlusTVBaseIE(ZattooPlatformBaseIE):
  11012. _module = 'yt_dlp.extractor.zattoo'
  11013. IE_NAME = 'NetPlusTVBase'
  11014. _NETRC_MACHINE = 'netplus'
  11015. class NetPlusTVIE(NetPlusTVBaseIE):
  11016. _module = 'yt_dlp.extractor.zattoo'
  11017. IE_NAME = 'NetPlusTV'
  11018. _VALID_URL = '(?x)https?://(?:www\\.)?netplus\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  11019. _NETRC_MACHINE = 'netplus'
  11020. class NetPlusTVLiveIE(NetPlusTVBaseIE):
  11021. _module = 'yt_dlp.extractor.zattoo'
  11022. IE_NAME = 'NetPlusTVLive'
  11023. _VALID_URL = '(?x)https?://(?:www\\.)?netplus\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11024. _NETRC_MACHINE = 'netplus'
  11025. @classmethod
  11026. def suitable(cls, url):
  11027. return False if NetPlusTVIE.suitable(url) else super().suitable(url)
  11028. class NetPlusTVRecordingsIE(NetPlusTVBaseIE):
  11029. _module = 'yt_dlp.extractor.zattoo'
  11030. IE_NAME = 'NetPlusTVRecordings'
  11031. _VALID_URL = '(?x)https?://(?:www\\.)?netplus\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11032. _NETRC_MACHINE = 'netplus'
  11033. class OsnatelTVBaseIE(ZattooPlatformBaseIE):
  11034. _module = 'yt_dlp.extractor.zattoo'
  11035. IE_NAME = 'OsnatelTVBase'
  11036. _NETRC_MACHINE = 'osnateltv'
  11037. class OsnatelTVIE(OsnatelTVBaseIE):
  11038. _module = 'yt_dlp.extractor.zattoo'
  11039. IE_NAME = 'OsnatelTV'
  11040. _VALID_URL = '(?x)https?://(?:www\\.)?tvonline\\.osnatel\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  11041. _NETRC_MACHINE = 'osnateltv'
  11042. class OsnatelTVLiveIE(OsnatelTVBaseIE):
  11043. _module = 'yt_dlp.extractor.zattoo'
  11044. IE_NAME = 'OsnatelTVLive'
  11045. _VALID_URL = '(?x)https?://(?:www\\.)?tvonline\\.osnatel\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11046. _NETRC_MACHINE = 'osnateltv'
  11047. @classmethod
  11048. def suitable(cls, url):
  11049. return False if OsnatelTVIE.suitable(url) else super().suitable(url)
  11050. class OsnatelTVRecordingsIE(OsnatelTVBaseIE):
  11051. _module = 'yt_dlp.extractor.zattoo'
  11052. IE_NAME = 'OsnatelTVRecordings'
  11053. _VALID_URL = '(?x)https?://(?:www\\.)?tvonline\\.osnatel\\.de/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11054. _NETRC_MACHINE = 'osnateltv'
  11055. class QuantumTVBaseIE(ZattooPlatformBaseIE):
  11056. _module = 'yt_dlp.extractor.zattoo'
  11057. IE_NAME = 'QuantumTVBase'
  11058. _NETRC_MACHINE = 'quantumtv'
  11059. class QuantumTVIE(QuantumTVBaseIE):
  11060. _module = 'yt_dlp.extractor.zattoo'
  11061. IE_NAME = 'QuantumTV'
  11062. _VALID_URL = '(?x)https?://(?:www\\.)?quantum\\-tv\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  11063. _NETRC_MACHINE = 'quantumtv'
  11064. class QuantumTVLiveIE(QuantumTVBaseIE):
  11065. _module = 'yt_dlp.extractor.zattoo'
  11066. IE_NAME = 'QuantumTVLive'
  11067. _VALID_URL = '(?x)https?://(?:www\\.)?quantum\\-tv\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11068. _NETRC_MACHINE = 'quantumtv'
  11069. @classmethod
  11070. def suitable(cls, url):
  11071. return False if QuantumTVIE.suitable(url) else super().suitable(url)
  11072. class QuantumTVRecordingsIE(QuantumTVBaseIE):
  11073. _module = 'yt_dlp.extractor.zattoo'
  11074. IE_NAME = 'QuantumTVRecordings'
  11075. _VALID_URL = '(?x)https?://(?:www\\.)?quantum\\-tv\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11076. _NETRC_MACHINE = 'quantumtv'
  11077. class SAKTVLiveIE(SAKTVBaseIE):
  11078. _module = 'yt_dlp.extractor.zattoo'
  11079. IE_NAME = 'SAKTVLive'
  11080. _VALID_URL = '(?x)https?://(?:www\\.)?saktv\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11081. _NETRC_MACHINE = 'saktv'
  11082. @classmethod
  11083. def suitable(cls, url):
  11084. return False if SAKTVIE.suitable(url) else super().suitable(url)
  11085. class SAKTVRecordingsIE(SAKTVBaseIE):
  11086. _module = 'yt_dlp.extractor.zattoo'
  11087. IE_NAME = 'SAKTVRecordings'
  11088. _VALID_URL = '(?x)https?://(?:www\\.)?saktv\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11089. _NETRC_MACHINE = 'saktv'
  11090. class SaltTVBaseIE(ZattooPlatformBaseIE):
  11091. _module = 'yt_dlp.extractor.zattoo'
  11092. IE_NAME = 'SaltTVBase'
  11093. _NETRC_MACHINE = 'salttv'
  11094. class SaltTVIE(SaltTVBaseIE):
  11095. _module = 'yt_dlp.extractor.zattoo'
  11096. IE_NAME = 'SaltTV'
  11097. _VALID_URL = '(?x)https?://(?:www\\.)?tv\\.salt\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  11098. _NETRC_MACHINE = 'salttv'
  11099. class SaltTVLiveIE(SaltTVBaseIE):
  11100. _module = 'yt_dlp.extractor.zattoo'
  11101. IE_NAME = 'SaltTVLive'
  11102. _VALID_URL = '(?x)https?://(?:www\\.)?tv\\.salt\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11103. _NETRC_MACHINE = 'salttv'
  11104. @classmethod
  11105. def suitable(cls, url):
  11106. return False if SaltTVIE.suitable(url) else super().suitable(url)
  11107. class SaltTVRecordingsIE(SaltTVBaseIE):
  11108. _module = 'yt_dlp.extractor.zattoo'
  11109. IE_NAME = 'SaltTVRecordings'
  11110. _VALID_URL = '(?x)https?://(?:www\\.)?tv\\.salt\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11111. _NETRC_MACHINE = 'salttv'
  11112. class VTXTVLiveIE(VTXTVBaseIE):
  11113. _module = 'yt_dlp.extractor.zattoo'
  11114. IE_NAME = 'VTXTVLive'
  11115. _VALID_URL = '(?x)https?://(?:www\\.)?vtxtv\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11116. _NETRC_MACHINE = 'vtxtv'
  11117. @classmethod
  11118. def suitable(cls, url):
  11119. return False if VTXTVIE.suitable(url) else super().suitable(url)
  11120. class VTXTVRecordingsIE(VTXTVBaseIE):
  11121. _module = 'yt_dlp.extractor.zattoo'
  11122. IE_NAME = 'VTXTVRecordings'
  11123. _VALID_URL = '(?x)https?://(?:www\\.)?vtxtv\\.ch/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11124. _NETRC_MACHINE = 'vtxtv'
  11125. class WalyTVBaseIE(ZattooPlatformBaseIE):
  11126. _module = 'yt_dlp.extractor.zattoo'
  11127. IE_NAME = 'WalyTVBase'
  11128. _NETRC_MACHINE = 'walytv'
  11129. class WalyTVIE(WalyTVBaseIE):
  11130. _module = 'yt_dlp.extractor.zattoo'
  11131. IE_NAME = 'WalyTV'
  11132. _VALID_URL = '(?x)https?://(?:www\\.)?player\\.waly\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  11133. _NETRC_MACHINE = 'walytv'
  11134. class WalyTVLiveIE(WalyTVBaseIE):
  11135. _module = 'yt_dlp.extractor.zattoo'
  11136. IE_NAME = 'WalyTVLive'
  11137. _VALID_URL = '(?x)https?://(?:www\\.)?player\\.waly\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11138. _NETRC_MACHINE = 'walytv'
  11139. @classmethod
  11140. def suitable(cls, url):
  11141. return False if WalyTVIE.suitable(url) else super().suitable(url)
  11142. class WalyTVRecordingsIE(WalyTVBaseIE):
  11143. _module = 'yt_dlp.extractor.zattoo'
  11144. IE_NAME = 'WalyTVRecordings'
  11145. _VALID_URL = '(?x)https?://(?:www\\.)?player\\.waly\\.tv/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11146. _NETRC_MACHINE = 'walytv'
  11147. class ZattooBaseIE(ZattooPlatformBaseIE):
  11148. _module = 'yt_dlp.extractor.zattoo'
  11149. IE_NAME = 'ZattooBase'
  11150. _NETRC_MACHINE = 'zattoo'
  11151. class ZattooIE(ZattooBaseIE):
  11152. _module = 'yt_dlp.extractor.zattoo'
  11153. IE_NAME = 'Zattoo'
  11154. _VALID_URL = '(?x)https?://(?:www\\.)?zattoo\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?program=(?P<vid2>\\d+)\n |(?:program|watch)/[^/]+/(?P<vid1>\\d+)\n )'
  11155. _NETRC_MACHINE = 'zattoo'
  11156. _RETURN_TYPE = 'video'
  11157. class ZattooLiveIE(ZattooBaseIE):
  11158. _module = 'yt_dlp.extractor.zattoo'
  11159. IE_NAME = 'ZattooLive'
  11160. _VALID_URL = '(?x)https?://(?:www\\.)?zattoo\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?channel=(?P<vid2>[^/?&#]+)\n |live/(?P<vid1>[^/?&#]+)\n )'
  11161. _NETRC_MACHINE = 'zattoo'
  11162. @classmethod
  11163. def suitable(cls, url):
  11164. return False if ZattooIE.suitable(url) else super().suitable(url)
  11165. class ZattooMoviesIE(ZattooBaseIE):
  11166. _module = 'yt_dlp.extractor.zattoo'
  11167. IE_NAME = 'ZattooMovies'
  11168. _VALID_URL = '(?x)https?://(?:www\\.)?zattoo\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?movie_id=(?P<vid2>\\w+)\n |vod/movies/(?P<vid1>\\w+)\n )'
  11169. _NETRC_MACHINE = 'zattoo'
  11170. class ZattooRecordingsIE(ZattooBaseIE):
  11171. _module = 'yt_dlp.extractor.zattoo'
  11172. IE_NAME = 'ZattooRecordings'
  11173. _VALID_URL = '(?x)https?://(?:www\\.)?zattoo\\.com/(?:\n [^?#]+\\?(?:[^#]+&)?recording=(?P<vid2>\\d+)\n (?P<vid1>)\n )'
  11174. _NETRC_MACHINE = 'zattoo'
  11175. class ZDFIE(ZDFBaseIE):
  11176. _module = 'yt_dlp.extractor.zdf'
  11177. IE_NAME = 'ZDF'
  11178. _VALID_URL = 'https?://www\\.zdf\\.de/(?:[^/]+/)*(?P<id>[^/?#&]+)\\.html'
  11179. _RETURN_TYPE = 'video'
  11180. class DreiSatIE(ZDFIE):
  11181. _module = 'yt_dlp.extractor.dreisat'
  11182. IE_NAME = '3sat'
  11183. _VALID_URL = 'https?://(?:www\\.)?3sat\\.de/(?:[^/]+/)*(?P<id>[^/?#&]+)\\.html'
  11184. _RETURN_TYPE = 'video'
  11185. class ZDFChannelIE(ZDFBaseIE):
  11186. _module = 'yt_dlp.extractor.zdf'
  11187. IE_NAME = 'ZDFChannel'
  11188. _VALID_URL = 'https?://www\\.zdf\\.de/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  11189. _RETURN_TYPE = 'playlist'
  11190. @classmethod
  11191. def suitable(cls, url):
  11192. return False if ZDFIE.suitable(url) else super().suitable(url)
  11193. class Zee5IE(LazyLoadExtractor):
  11194. _module = 'yt_dlp.extractor.zee5'
  11195. IE_NAME = 'Zee5'
  11196. _VALID_URL = '(?x)\n (?:\n zee5:|\n https?://(?:www\\.)?zee5\\.com/(?:[^#?]+/)?\n (?:\n (?:tv-shows|kids|web-series|zee5originals)(?:/[^#/?]+){3}\n |(?:movies|kids|videos|news|music-videos)/(?!kids-shows)[^#/?]+\n )/(?P<display_id>[^#/?]+)/\n )\n (?P<id>[^#/?]+)/?(?:$|[?#])\n '
  11197. _NETRC_MACHINE = 'zee5'
  11198. _RETURN_TYPE = 'video'
  11199. class Zee5SeriesIE(LazyLoadExtractor):
  11200. _module = 'yt_dlp.extractor.zee5'
  11201. IE_NAME = 'zee5:series'
  11202. _VALID_URL = '(?x)\n (?:\n zee5:series:|\n https?://(?:www\\.)?zee5\\.com/(?:[^#?]+/)?\n (?:tv-shows|web-series|kids|zee5originals)/(?!kids-movies)(?:[^#/?]+/){2}\n )\n (?P<id>[^#/?]+)(?:/episodes)?/?(?:$|[?#])\n '
  11203. _RETURN_TYPE = 'playlist'
  11204. class ZeeNewsIE(LazyLoadExtractor):
  11205. _module = 'yt_dlp.extractor.zeenews'
  11206. IE_NAME = 'ZeeNews'
  11207. _ENABLED = None
  11208. _VALID_URL = 'https?://zeenews\\.india\\.com/[^#?]+/video/(?P<display_id>[^#/?]+)/(?P<id>\\d+)'
  11209. _WORKING = False
  11210. _RETURN_TYPE = 'video'
  11211. class ZenPornIE(LazyLoadExtractor):
  11212. _module = 'yt_dlp.extractor.zenporn'
  11213. IE_NAME = 'ZenPorn'
  11214. _VALID_URL = 'https?://(?:www\\.)?zenporn\\.com/video/(?P<id>\\d+)'
  11215. age_limit = 18
  11216. _RETURN_TYPE = 'video'
  11217. class ZetlandDKArticleIE(LazyLoadExtractor):
  11218. _module = 'yt_dlp.extractor.zetland'
  11219. IE_NAME = 'ZetlandDKArticle'
  11220. _VALID_URL = 'https?://www\\.zetland\\.dk/\\w+/(?P<id>(?P<story_id>\\w{8})-(?P<uploader_id>\\w{8})-(?:\\w{5}))'
  11221. _RETURN_TYPE = 'video'
  11222. class ZhihuIE(LazyLoadExtractor):
  11223. _module = 'yt_dlp.extractor.zhihu'
  11224. IE_NAME = 'Zhihu'
  11225. _VALID_URL = 'https?://(?:www\\.)?zhihu\\.com/zvideo/(?P<id>[0-9]+)'
  11226. _RETURN_TYPE = 'video'
  11227. class ZingMp3BaseIE(LazyLoadExtractor):
  11228. _module = 'yt_dlp.extractor.zingmp3'
  11229. IE_NAME = 'ZingMp3Base'
  11230. class ZingMp3AlbumIE(ZingMp3BaseIE):
  11231. _module = 'yt_dlp.extractor.zingmp3'
  11232. IE_NAME = 'zingmp3:album'
  11233. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>(?:album|playlist))/[^/?#]+/(?P<id>\\w+)(?:\\.html|\\?)'
  11234. _RETURN_TYPE = 'playlist'
  11235. class ZingMp3ChartHomeIE(ZingMp3BaseIE):
  11236. _module = 'yt_dlp.extractor.zingmp3'
  11237. IE_NAME = 'zingmp3:chart-home'
  11238. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<id>(?:zing-chart|moi-phat-hanh|top100|podcast-discover))/?(?:[#?]|$)'
  11239. _RETURN_TYPE = 'playlist'
  11240. class ZingMp3ChartMusicVideoIE(ZingMp3BaseIE):
  11241. _module = 'yt_dlp.extractor.zingmp3'
  11242. IE_NAME = 'zingmp3:chart-music-video'
  11243. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>the-loai-video)/(?P<regions>[^/]+)/(?P<id>[^\\.]+)'
  11244. _RETURN_TYPE = 'playlist'
  11245. class ZingMp3HubIE(ZingMp3BaseIE):
  11246. _module = 'yt_dlp.extractor.zingmp3'
  11247. IE_NAME = 'zingmp3:hub'
  11248. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>hub)/(?P<regions>[^/]+)/(?P<id>[^\\.]+)'
  11249. _RETURN_TYPE = 'playlist'
  11250. class ZingMp3IE(ZingMp3BaseIE):
  11251. _module = 'yt_dlp.extractor.zingmp3'
  11252. IE_NAME = 'zingmp3'
  11253. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>(?:bai-hat|video-clip|embed|eps))/[^/?#]+/(?P<id>\\w+)(?:\\.html|\\?)'
  11254. IE_DESC = 'zingmp3.vn'
  11255. _RETURN_TYPE = 'video'
  11256. class ZingMp3LiveRadioIE(ZingMp3BaseIE):
  11257. _module = 'yt_dlp.extractor.zingmp3'
  11258. IE_NAME = 'zingmp3:liveradio'
  11259. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>(?:liveradio))/(?P<id>\\w+)(?:\\.html|\\?)'
  11260. _RETURN_TYPE = 'video'
  11261. class ZingMp3PodcastEpisodeIE(ZingMp3BaseIE):
  11262. _module = 'yt_dlp.extractor.zingmp3'
  11263. IE_NAME = 'zingmp3:podcast-episode'
  11264. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>(?:pgr|cgr))/[^/?#]+/(?P<id>\\w+)(?:\\.html|\\?)'
  11265. _RETURN_TYPE = 'playlist'
  11266. class ZingMp3PodcastIE(ZingMp3BaseIE):
  11267. _module = 'yt_dlp.extractor.zingmp3'
  11268. IE_NAME = 'zingmp3:podcast'
  11269. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<id>(?:cgr|top-podcast|podcast-new))/?(?:[#?]|$)'
  11270. _RETURN_TYPE = 'playlist'
  11271. class ZingMp3UserIE(ZingMp3BaseIE):
  11272. _module = 'yt_dlp.extractor.zingmp3'
  11273. IE_NAME = 'zingmp3:user'
  11274. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<user>[^/]+)/(?P<type>bai-hat|single|album|video|song)/?(?:[?#]|$)'
  11275. _RETURN_TYPE = 'playlist'
  11276. class ZingMp3WeekChartIE(ZingMp3BaseIE):
  11277. _module = 'yt_dlp.extractor.zingmp3'
  11278. IE_NAME = 'zingmp3:week-chart'
  11279. _VALID_URL = 'https?://(?:mp3\\.zing|zingmp3)\\.vn/(?P<type>(?:zing-chart-tuan))/[^/?#]+/(?P<id>\\w+)(?:\\.html|\\?)'
  11280. _RETURN_TYPE = 'playlist'
  11281. class ZoomIE(LazyLoadExtractor):
  11282. _module = 'yt_dlp.extractor.zoom'
  11283. IE_NAME = 'zoom'
  11284. _VALID_URL = '(?P<base_url>https?://(?:[^.]+\\.)?zoom\\.us/)rec(?:ording)?/(?P<type>play|share)/(?P<id>[\\w.-]+)'
  11285. _RETURN_TYPE = 'video'
  11286. class ZypeIE(LazyLoadExtractor):
  11287. _module = 'yt_dlp.extractor.zype'
  11288. IE_NAME = 'Zype'
  11289. _VALID_URL = 'https?://player\\.zype\\.com/embed/(?P<id>[\\da-fA-F]+)\\.(?:js|json|html)\\?.*?(?:access_token|(?:ap[ip]|player)_key)=[^&]+'
  11290. _RETURN_TYPE = 'video'
  11291. class GenericIE(LazyLoadExtractor):
  11292. _module = 'yt_dlp.extractor.generic'
  11293. IE_NAME = 'generic'
  11294. _VALID_URL = '.*'
  11295. IE_DESC = 'Generic downloader that works on some sites'
  11296. _NETRC_MACHINE = False
  11297. age_limit = 18
  11298. _RETURN_TYPE = 'any'
  11299. _ALL_CLASSES = [YoutubeIE, YoutubeClipIE, YoutubeFavouritesIE, YoutubeNotificationsIE, YoutubeHistoryIE, YoutubeTabIE, YoutubeLivestreamEmbedIE, YoutubePlaylistIE, YoutubeRecommendedIE, YoutubeSearchDateIE, YoutubeSearchIE, YoutubeSearchURLIE, YoutubeMusicSearchURLIE, YoutubeSubscriptionsIE, YoutubeTruncatedIDIE, YoutubeTruncatedURLIE, YoutubeYtBeIE, YoutubeYtUserIE, YoutubeWatchLaterIE, YoutubeShortsAudioPivotIE, YoutubeConsentRedirectIE, ABCIE, ABCIViewIE, ABCIViewShowSeriesIE, AbcNewsIE, AbcNewsVideoIE, ABCOTVSIE, ABCOTVSClipsIE, AbemaTVIE, AbemaTVTitleIE, AcademicEarthCourseIE, ACastChannelIE, ACastIE, AcFunBangumiIE, AcFunVideoIE, ADNIE, ADNSeasonIE, AdobeConnectIE, AdobeTVChannelIE, AdobeTVEmbedIE, AdobeTVIE, AdobeTVShowIE, AdobeTVVideoIE, AdultSwimIE, AeonCoIE, AfreecaTVCatchStoryIE, AfreecaTVIE, AfreecaTVLiveIE, AfreecaTVUserIE, TokFMAuditionIE, TokFMPodcastIE, WyborczaPodcastIE, WyborczaVideoIE, AirTVIE, AitubeKZVideoIE, AliExpressLiveIE, AlJazeeraIE, AllocineIE, AllstarIE, AllstarProfileIE, AlphaPornoIE, Alsace20TVEmbedIE, Alsace20TVIE, AltCensoredChannelIE, AltCensoredIE, AluraIE, AluraCourseIE, AmadeusTVIE, AmaraIE, AmazonReviewsIE, AmazonStoreIE, AmazonMiniTVIE, AmazonMiniTVSeasonIE, AmazonMiniTVSeriesIE, AmericasTestKitchenIE, AmericasTestKitchenSeasonIE, AnchorFMEpisodeIE, AngelIE, Ant1NewsGrArticleIE, Ant1NewsGrEmbedIE, AntennaGrWatchIE, AnvatoIE, APAIE, AparatIE, AppleConnectIE, ApplePodcastsIE, AppleTrailersIE, AppleTrailersSectionIE, ArchiveOrgIE, YoutubeWebArchiveIE, ArcPublishingIE, ARDIE, ARDBetaMediathekIE, ARDMediathekCollectionIE, ArkenaIE, ArnesIE, Art19IE, Art19ShowIE, ArteTVCategoryIE, ArteTVEmbedIE, ArteTVIE, ArteTVPlaylistIE, AsobiChannelIE, AsobiChannelTagURLIE, AsobiStageIE, AtresPlayerIE, AtScaleConfEventIE, ATVAtIE, AudiMediaIE, AudioBoomIE, AudiodraftCustomIE, AudiodraftGenericIE, AudiomackAlbumIE, AudiomackIE, AudiusIE, AudiusPlaylistIE, AudiusProfileIE, AudiusTrackIE, AWAANIE, AWAANLiveIE, AWAANSeasonIE, AWAANVideoIE, AxsIE, AZMedienIE, BaiduVideoIE, BanByeChannelIE, BanByeIE, BandaiChannelIE, BandcampIE, BandcampAlbumIE, BandcampUserIE, BandcampWeeklyIE, BandlabIE, BandlabPlaylistIE, BannedVideoIE, BBCCoUkArticleIE, BBCCoUkIE, BBCIE, BBCCoUkIPlayerEpisodesIE, BBCCoUkIPlayerGroupIE, BBCCoUkPlaylistIE, BeaconTvIE, BeatBumpPlaylistIE, BeatBumpVideoIE, BeatportIE, BeegIE, BehindKinkIE, BellMediaIE, BerufeTVIE, BetIE, BFIPlayerIE, BFMTVIE, BFMTVArticleIE, BFMTVLiveIE, BibelTVLiveIE, BibelTVSeriesIE, BibelTVVideoIE, BigflixIE, BigoIE, BildIE, BilibiliAudioAlbumIE, BilibiliAudioIE, BiliBiliBangumiIE, BiliBiliBangumiMediaIE, BiliBiliBangumiSeasonIE, BilibiliCategoryIE, BilibiliCheeseIE, BilibiliCheeseSeasonIE, BilibiliCollectionListIE, BilibiliFavoritesListIE, BiliBiliIE, BiliBiliPlayerIE, BilibiliPlaylistIE, BiliBiliSearchIE, BilibiliSeriesListIE, BilibiliSpaceAudioIE, BilibiliSpaceVideoIE, BilibiliWatchlaterIE, BiliIntlIE, BiliIntlSeriesIE, BiliLiveIE, BioBioChileTVIE, BitChuteChannelIE, BitChuteIE, BlackboardCollaborateIE, BleacherReportCMSIE, BleacherReportIE, BlerpIE, BloggerIE, BloombergIE, BlueskyIE, BokeCCIE, BongaCamsIE, BoostyIE, BostonGlobeIE, BoxIE, BoxCastVideoIE, BpbIE, BRIE, BrainPOPELLIE, BrainPOPEspIE, BrainPOPFrIE, BrainPOPIE, BrainPOPIlIE, BrainPOPJrIE, BravoTVIE, BreitBartIE, BrightcoveLegacyIE, BrightcoveNewIE, BrilliantpalaClassesIE, BrilliantpalaElearnIE, BundesligaIE, BundestagIE, BusinessInsiderIE, BuzzFeedIE, BYUtvIE, C56IE, CaffeineTVIE, CallinIE, CaltransIE, CAM4IE, CamdemyFolderIE, CamdemyIE, CamFMEpisodeIE, CamFMShowIE, CamModelsIE, CamsodaIE, CamtasiaEmbedIE, Canal1IE, CanalAlphaIE, Canalc2IE, CanalplusIE, CaracolTvPlayIE, CartoonNetworkIE, CBCIE, CBCGemIE, CBCGemLiveIE, CBCGemPlaylistIE, CBCPlayerIE, CBCPlayerPlaylistIE, ParamountPressExpressIE, CBSLocalArticleIE, CBSLocalIE, CBSLocalLiveIE, CBSNewsEmbedIE, CBSNewsIE, CBSNewsLiveIE, CBSNewsLiveVideoIE, CBSSportsEmbedIE, CBSSportsIE, TwentyFourSevenSportsIE, CCCIE, CCCPlaylistIE, CCMAIE, CCTVIE, CDAIE, CDAFolderIE, CellebriteIE, CeskaTelevizeIE, CGTNIE, CharlieRoseIE, ChaturbateIE, ChilloutzoneIE, CHZZKLiveIE, CHZZKVideoIE, CinemaxIE, CinetecaMilanoIE, CineverseDetailsIE, CineverseIE, CiscoLiveSearchIE, CiscoLiveSessionIE, CiscoWebexIE, CJSWIE, ClipchampIE, ClippitIE, ClipRsIE, CloserToTruthIE, CloudflareStreamIE, CloudyCDNIE, ClubicIE, ClypIE, CNBCVideoIE, CNNIE, CNNIndonesiaIE, ComedyCentralIE, ComedyCentralTVIE, BlobIE, CommonMistakesIE, UnicodeBOMIE, MmsIE, RtmpIE, ViewSourceIE, CondeNastIE, CONtvIE, CoubIE, CozyTVIE, CPACIE, CPACPlaylistIE, CrackedIE, CrackleIE, CraftsyIE, CrooksAndLiarsIE, CrowdBunkerChannelIE, CrowdBunkerIE, CrtvgIE, CrunchyrollArtistIE, CrunchyrollBetaIE, CrunchyrollBetaShowIE, CrunchyrollMusicIE, CSpanCongressIE, CSpanIE, CtsNewsIE, CTVIE, CTVNewsIE, CultureUnpluggedIE, CuriosityStreamCollectionsIE, CuriosityStreamIE, CuriosityStreamSeriesIE, CWTVIE, CybraryCourseIE, CybraryIE, DacastPlaylistIE, DacastVODIE, DailyMailIE, DailymotionIE, DailymotionPlaylistIE, DailymotionSearchIE, DailymotionUserIE, DailyWireIE, DailyWirePodcastIE, DamtomoRecordIE, DamtomoVideoIE, DangalPlayIE, DangalPlaySeasonIE, DaumClipIE, DaumIE, DaumPlaylistIE, DaumUserIE, DaystarClipIE, DBTVIE, DctpTvIE, DeezerAlbumIE, DeezerPlaylistIE, DemocracynowIE, DetikEmbedIE, DeuxMIE, DeuxMNewsIE, DFBIE, DHMIE, DigitalConcertHallIE, DigitekaIE, DiscogsReleasePlaylistIE, DisneyIE, DigitallySpeakingIE, DLFIE, DLFCorpusIE, DLiveStreamIE, DLiveVODIE, DouyuShowIE, DouyuTVIE, TLCIE, AmHistoryChannelIE, AnimalPlanetIE, CookingChannelIE, DestinationAmericaIE, DiscoveryLifeIE, DiscoveryNetworksDeIE, DiscoveryPlusIE, DiscoveryPlusIndiaIE, DiscoveryPlusIndiaShowIE, DiscoveryPlusItalyIE, DiscoveryPlusItalyShowIE, DPlayIE, FoodNetworkIE, GoDiscoveryIE, HGTVDeIE, HGTVUsaIE, InvestigationDiscoveryIE, ScienceChannelIE, TravelChannelIE, DRBonanzaIE, DroobleIE, DropboxIE, DropoutIE, DropoutSeasonIE, DrTalksIE, DrTuberIE, DRTVIE, DRTVLiveIE, DRTVSeasonIE, DRTVSeriesIE, DTubeIE, DubokuIE, DubokuPlaylistIE, DumpertIE, DuoplayIE, DVTVIE, DWIE, DWArticleIE, ClipYouEmbedIE, EaglePlatformIE, EbaumsWorldIE, EbayIE, EggheadCourseIE, EggheadLessonIE, EightTracksIE, EitbIE, ElementorEmbedIE, ElonetIE, ElPaisIE, ElTreceTVIE, EmbedlyIE, EpiconIE, EpiconSeriesIE, EpidemicSoundIE, EplusIbIE, EpochIE, EpornerIE, ErocastIE, EroProfileAlbumIE, EroProfileIE, ERRJupiterIE, ERTFlixCodenameIE, ERTFlixIE, ERTWebtvEmbedIE, ESPNIE, ESPNArticleIE, ESPNCricInfoIE, FiveThirtyEightIE, WatchESPNIE, EttuTvIE, EuropaIE, EuroParlWebstreamIE, EuropeanTourIE, EurosportIE, EUScreenIE, ExpressenIE, EyedoTVIE, FacebookAdsIE, FacebookIE, FacebookPluginsVideoIE, FacebookRedirectURLIE, FacebookReelIE, FancodeVodIE, FancodeLiveIE, FathomIE, FazIE, FC2IE, FC2EmbedIE, FC2LiveIE, FczenitIE, FifaIE, FilmOnChannelIE, FilmOnIE, FilmwebIE, FirstTVIE, FiveTVIE, FlexTVIE, FlickrIE, FloatplaneChannelIE, FloatplaneIE, FolketingetIE, FootyRoomIE, Formula1IE, FourTubeIE, FuxIE, PornerBrosIE, PornTubeIE, FOXIE, FOX9IE, FOX9NewsIE, FoxNewsArticleIE, FoxNewsIE, FoxNewsVideoIE, FoxSportsIE, FptplayIE, FranceInterIE, FranceTVIE, FranceTVInfoIE, FranceTVSiteIE, FreesoundIE, FreespeechIE, FreeTvIE, FreeTvMoviesIE, FrontendMastersCourseIE, FrontendMastersIE, FrontendMastersLessonIE, FujiTVFODPlus7IE, FunimationIE, FunimationPageIE, FunimationShowIE, FunkIE, Funker530IE, FuyinTVIE, GabIE, GabTVIE, GaiaIE, GameDevTVDashboardIE, GameJoltCommunityIE, GameJoltGameIE, GameJoltGameSoundtrackIE, GameJoltIE, GameJoltSearchIE, GameJoltUserIE, GameSpotIE, GameStarIE, GaskrankIE, GazetaIE, GBNewsIE, GDCVaultIE, GediDigitalIE, HTML5MediaEmbedIE, QuotedHTMLIE, GeniusIE, GeniusLyricsIE, GermanupaIE, GetCourseRuIE, GetCourseRuPlayerIE, GettrIE, GettrStreamingIE, GiantBombIE, GlideIE, GlobalPlayerAudioEpisodeIE, GlobalPlayerAudioIE, GlobalPlayerLiveIE, GlobalPlayerLivePlaylistIE, GlobalPlayerVideoIE, GloboArticleIE, GloboIE, GlomexEmbedIE, GlomexIE, GMANetworkVideoIE, GoIE, GodResourceIE, GodTubeIE, GofileIE, GolemIE, GoodGameIE, GoogleDriveFolderIE, GoogleDriveIE, GooglePodcastsFeedIE, GooglePodcastsIE, GoogleSearchIE, GoPlayIE, GoProIE, GoshgayIE, GoToStageIE, GPUTechConfIE, GraspopIE, GronkhFeedIE, GronkhIE, GronkhVodsIE, GrouponIE, HarpodeonIE, HBOIE, HearThisAtIE, HeiseIE, HellPornoIE, HGTVComShowIE, HiDiveIE, HistoricFilmsIE, HitRecordIE, HKETVIE, HollywoodReporterIE, HollywoodReporterPlaylistIE, HolodexIE, HotNewHipHopIE, HotStarIE, HotStarPlaylistIE, HotStarPrefixIE, HotStarSeasonIE, HotStarSeriesIE, HrefLiRedirectIE, HRFernsehenIE, HRTiIE, HRTiPlaylistIE, HSEProductIE, HSEShowIE, HuajiaoIE, HuffPostIE, HungamaAlbumPlaylistIE, HungamaIE, HungamaSongIE, HuyaLiveIE, HuyaVideoIE, HypemIE, MonsterSirenHypergryphMusicIE, HytaleIE, IcareusIE, IchinanaLiveClipIE, IchinanaLiveIE, IdolPlusIE, IGNIE, IGNArticleIE, IGNVideoIE, IHeartRadioIE, IHeartRadioPodcastIE, IlPostIE, IltalehtiIE, ImdbIE, ImdbListIE, ImgurAlbumIE, ImgurGalleryIE, ImgurIE, InaIE, IncIE, IndavideoEmbedIE, InfoQIE, InstagramIE, InstagramIOSIE, InstagramStoryIE, InstagramTagIE, InstagramUserIE, InternazionaleIE, InternetVideoArchiveIE, IPrimaCNNIE, IPrimaIE, IqAlbumIE, IqIE, IqiyiIE, IslamChannelIE, IslamChannelSeriesIE, IsraelNationalNewsIE, ITProTVCourseIE, ITProTVIE, ITVBTCCIE, ITVIE, IviCompilationIE, IviIE, IvideonIE, IwaraIE, IwaraPlaylistIE, IwaraUserIE, IxiguaIE, IzleseneIE, JamendoIE, JamendoAlbumIE, SangiinIE, SangiinInstructionIE, ShugiinItvLiveIE, ShugiinItvLiveRoomIE, ShugiinItvVodIE, JeuxVideoIE, JioCinemaIE, JioCinemaSeriesIE, JioSaavnAlbumIE, JioSaavnPlaylistIE, JioSaavnSongIE, JojIE, JoqrAgIE, JoveIE, JStreamIE, JTBCIE, JTBCProgramIE, JWPlatformIE, KakaoIE, KalturaIE, KankaNewsIE, KaraoketvIE, KelbyOneIE, Kenh14PlaylistIE, Kenh14VideoIE, KhanAcademyIE, KhanAcademyUnitIE, KickClipIE, KickIE, KickVODIE, KickerIE, KickStarterIE, KikaIE, KinjaEmbedIE, KinoPoiskIE, KommunetvIE, KompasVideoIE, KooIE, KrasViewIE, KTHIE, Ku6IE, KukuluLiveIE, KuwoAlbumIE, KuwoCategoryIE, KuwoChartIE, KuwoIE, KuwoMvIE, KuwoSingerIE, LA7IE, LA7PodcastEpisodeIE, LA7PodcastIE, LaracastsIE, LaracastsPlaylistIE, LastFMIE, LastFMPlaylistIE, LastFMUserIE, LaXarxaMesIE, LBRYIE, LBRYChannelIE, LBRYPlaylistIE, LCIIE, LcpIE, LcpPlayIE, LearningOnScreenIE, Lecture2GoIE, LecturioCourseIE, LecturioDeCourseIE, LecturioIE, LeIE, LePlaylistIE, LetvCloudIE, LeFigaroVideoEmbedIE, LeFigaroVideoSectionIE, LEGOIE, LemondeIE, LentaIE, LibraryOfCongressIE, LibsynIE, LifeEmbedIE, LifeNewsIE, LikeeIE, LikeeUserIE, LimelightChannelIE, LimelightChannelListIE, LimelightMediaIE, LinkedInIE, LinkedInLearningCourseIE, LinkedInLearningIE, Liputan6IE, ListenNotesIE, LiTVIE, LiveJournalIE, LivestreamIE, LivestreamOriginalIE, LivestreamShortenerIE, LivestreamfailsIE, LnkIE, LoomFolderIE, LoomIE, LoveHomePornIE, LRTVODIE, LRTStreamIE, LSMLREmbedIE, LSMLTVEmbedIE, LSMReplayIE, LumniIE, LyndaCourseIE, LyndaIE, MaarivIE, MagellanTVIE, MagentaMusikIE, MailRuIE, MailRuMusicIE, MailRuMusicSearchIE, MainStreamingIE, MangomoloLiveIE, MangomoloVideoIE, ManotoTVIE, ManotoTVLiveIE, ManotoTVShowIE, ManyVidsIE, MaoriTVIE, MarkizaIE, MarkizaPageIE, MassengeschmackTVIE, MastersIE, MatchTVIE, MBNIE, MDRIE, MedalTVIE, MediaiteIE, MediaKlikkIE, MedialaanIE, MediasetIE, MediasetShowIE, MediasiteCatalogIE, MediasiteIE, MediasiteNamedCatalogIE, MediaStreamIE, WinSportsVideoIE, MediaWorksNZVODIE, MediciIE, MegaphoneIE, MegaTVComEmbedIE, MegaTVComIE, MeipaiIE, MelonVODIE, MetacriticIE, MGTVIE, MicrosoftBuildIE, MicrosoftEmbedIE, MicrosoftLearnEpisodeIE, MicrosoftLearnPlaylistIE, MicrosoftLearnSessionIE, MicrosoftMediusIE, MicrosoftStreamIE, MindsChannelIE, MindsGroupIE, MindsIE, MinotoIE, MirrativIE, MirrativUserIE, MirrorCoUKIE, OCWMITIE, TechTVMITIE, MiTeleIE, MixchArchiveIE, MixchIE, MixchMovieIE, MixcloudIE, MixcloudPlaylistIE, MixcloudUserIE, MLBIE, MLBTVIE, MLBArticleIE, MLBVideoIE, MLSSoccerIE, MochaVideoIE, MojevideoIE, MojvideoIE, MonstercatIE, MotherlessGalleryIE, MotherlessGroupIE, MotherlessIE, MotherlessUploaderIE, MotorsportIE, MoviepilotIE, MoviewPlayIE, MoviezineIE, MovingImageIE, MSNIE, MTVDEIE, MTVIE, CMTIE, MTVItaliaIE, MTVItaliaProgrammaIE, MTVJapanIE, MTVServicesEmbeddedIE, MTVVideoIE, MuenchenTVIE, MurrtubeIE, MurrtubeUserIE, MuseAIIE, MuseScoreIE, MusicdexAlbumIE, MusicdexArtistIE, MusicdexPlaylistIE, MusicdexSongIE, Mx3IE, Mx3NeoIE, Mx3VolksmusikIE, MxplayerIE, MxplayerShowIE, MySpaceAlbumIE, MySpaceIE, MySpassIE, MyVideoGeIE, MyVidsterIE, MzaaloIE, N1InfoAssetIE, N1InfoIIE, NateIE, NateProgramIE, NationalGeographicTVIE, NationalGeographicVideoIE, NaverIE, NaverLiveIE, NaverNowIE, NBAIE, NBAChannelIE, NBAEmbedIE, NBAWatchCollectionIE, NBAWatchEmbedIE, NBAWatchIE, NBCOlympicsIE, NBCOlympicsStreamIE, NBCSportsIE, NBCSportsStreamIE, NBCSportsVPlayerIE, NBCStationsIE, NDRIE, NDREmbedBaseIE, NDREmbedIE, NJoyEmbedIE, NJoyIE, NDTVIE, NebulaChannelIE, NebulaClassIE, NebulaIE, NebulaSubscriptionsIE, NekoHackerIE, NerdCubedFeedIE, NetEaseMusicAlbumIE, NetEaseMusicDjRadioIE, NetEaseMusicIE, NetEaseMusicListIE, NetEaseMusicMvIE, NetEaseMusicProgramIE, NetEaseMusicSingerIE, NetverseIE, NetversePlaylistIE, NetverseSearchIE, NetzkinoIE, NewgroundsIE, NewgroundsPlaylistIE, NewgroundsUserIE, NewsPicksIE, NewsyIE, NextMediaIE, AppleDailyIE, NextMediaActionNewsIE, NextTVIE, NexxEmbedIE, NexxIE, NFBIE, NFBSeriesIE, NFHSNetworkIE, NFLIE, NFLArticleIE, NFLPlusEpisodeIE, NFLPlusReplayIE, NhkForSchoolBangumiIE, NhkForSchoolProgramListIE, NhkForSchoolSubjectIE, NhkRadioNewsPageIE, NhkRadiruIE, NhkRadiruLiveIE, NhkVodIE, NhkVodProgramIE, NHLIE, NickBrIE, NickDeIE, NickIE, NickRuIE, NiconicoHistoryIE, NiconicoIE, NiconicoLiveIE, NiconicoPlaylistIE, NiconicoSeriesIE, NiconicoUserIE, NicovideoSearchDateIE, NicovideoSearchIE, NicovideoSearchURLIE, NicovideoTagURLIE, NiconicoChannelPlusChannelLivesIE, NiconicoChannelPlusChannelVideosIE, NiconicoChannelPlusIE, NinaProtocolIE, CPTwentyFourIE, NineCNineMediaIE, NineGagIE, NineNewsIE, NineNowIE, NintendoIE, NitterIE, NobelPrizeIE, NoicePodcastIE, NonkTubeIE, NoodleMagazineIE, NoovoIE, NOSNLArticleIE, NovaEmbedIE, NovaIE, NovaPlayIE, NownessIE, NownessPlaylistIE, NownessSeriesIE, NozIE, NPOIE, VPROIE, WNLIE, AndereTijdenIE, HetKlokhuisIE, NPOLiveIE, NPORadioFragmentIE, NPORadioIE, SchoolTVIE, NprIE, NRKIE, NRKTVIE, NRKPlaylistIE, NRKRadioPodkastIE, NRKSkoleIE, NRKTVDirekteIE, NRKTVEpisodeIE, NRKTVEpisodesIE, NRKTVSeasonIE, NRKTVSeriesIE, NRLTVIE, NTSLiveIE, NTVCoJpCUIE, NTVDeIE, NTVRuIE, NubilesPornIE, NuumLiveIE, NuumMediaIE, NuumTabIE, NuvidIE, NYTimesArticleIE, NYTimesCookingIE, NYTimesCookingRecipeIE, NYTimesIE, NZHeraldIE, NZOnScreenIE, NZZIE, OnDemandChinaEpisodeIE, OdnoklassnikiIE, OfTVIE, OfTVPlaylistIE, OktoberfestTVIE, OlympicsReplayIE, On24IE, OnDemandKoreaIE, OnDemandKoreaProgramIE, OneFootballIE, OneNewsNZIE, OnePlacePodcastIE, OnetChannelIE, OnetIE, OnetMVPIE, OnetPlIE, OnionStudiosIE, OpencastIE, OpencastPlaylistIE, OpenRecCaptureIE, OpenRecIE, OpenRecMovieIE, OraTVIE, ORFIPTVIE, ORFONIE, ORFFM4StoryIE, ORFPodcastIE, ORFRadioIE, OutsideTVIE, OwnCloudIE, PacktPubCourseIE, PacktPubIE, PalcoMP3ArtistIE, PalcoMP3IE, PalcoMP3VideoIE, PanoptoIE, PanoptoListIE, PanoptoPlaylistIE, ParamountPlusSeriesIE, ParlerIE, ParlviewIE, PatreonCampaignIE, PatreonIE, PBSIE, PBSKidsIE, PearVideoIE, PeekVidsIE, PlayVidsIE, PeerTubeIE, PeerTubePlaylistIE, PeerTVIE, PelotonIE, PelotonLiveIE, PerformGroupIE, PeriscopeIE, PeriscopeUserIE, PGATourIE, PhilharmonieDeParisIE, PhoenixIE, PhotobucketIE, PiaLiveIE, PiaproIE, PicartoIE, PicartoVodIE, PikselIE, PinkbikeIE, PinterestCollectionIE, PinterestIE, PixivSketchIE, PixivSketchUserIE, PladformIE, PlanetMarathiIE, PlatziCourseIE, PlatziIE, PlayPlusTVIE, PlaySuisseIE, PlaytvakIE, PlaywireIE, PluralsightCourseIE, PluralsightIE, PlutoTVIE, PlVideoIE, PodbayFMChannelIE, PodbayFMIE, PodchaserIE, PodomaticIE, PokerGoCollectionIE, PokerGoIE, PolsatGoIE, PolskieRadioAuditionIE, PolskieRadioCategoryIE, PolskieRadioIE, PolskieRadioLegacyIE, PolskieRadioPlayerIE, PolskieRadioPodcastIE, PolskieRadioPodcastListIE, PopcorntimesIE, PopcornTVIE, PornboxIE, PornFlipIE, PornHubIE, PornHubPagedVideoListIE, PornHubPlaylistIE, PornHubUserIE, PornHubUserVideosUploadIE, PornotubeIE, PornoVoisinesIE, PornoXOIE, Pr0grammIE, PrankCastIE, PrankCastPostIE, PremiershipRugbyIE, PressTVIE, ProjectVeritasIE, ProSiebenSat1IE, PRXAccountIE, PRXSeriesIE, PRXSeriesSearchIE, PRXStoriesSearchIE, PRXStoryIE, PuhuTVIE, PuhuTVSerieIE, Puls4IE, PyvideoIE, QDanceIE, QingTingIE, QQMusicAlbumIE, QQMusicIE, QQMusicPlaylistIE, QQMusicSingerIE, QQMusicToplistIE, QQMusicVideoIE, R7IE, R7ArticleIE, RadikoIE, RadikoRadioIE, RadioCanadaAudioVideoIE, RadioCanadaIE, RadioComercialIE, RadioComercialPlaylistIE, RadioDeIE, FranceCultureIE, RadioFranceIE, RadioFranceLiveIE, RadioFrancePodcastIE, RadioFranceProfileIE, RadioFranceProgramScheduleIE, RadioJavanIE, RadioKapitalIE, RadioKapitalShowIE, RadioRadicaleIE, RadioZetPodcastIE, RadLiveIE, RadLiveChannelIE, RadLiveSeasonIE, RaiIE, RaiNewsIE, RaiCulturaIE, RaiPlayIE, RaiPlayLiveIE, RaiPlayPlaylistIE, RaiPlaySoundIE, RaiPlaySoundLiveIE, RaiPlaySoundPlaylistIE, RaiSudtirolIE, RayWenderlichCourseIE, RayWenderlichIE, RbgTumCourseIE, RbgTumIE, RbgTumNewCourseIE, RCSIE, RCSEmbedsIE, RCSVariousIE, RCTIPlusIE, RCTIPlusSeriesIE, RCTIPlusTVIE, RDSIE, RTBFIE, ParliamentLiveUKIE, RedBullIE, RedBullTVIE, RedBullEmbedIE, RedBullTVRrnContentIE, RedditIE, RedCDNLivxIE, RedGifsIE, RedGifsSearchIE, RedGifsUserIE, RedTubeIE, RENTVIE, RENTVArticleIE, RestudyIE, ReutersIE, ReverbNationIE, RheinMainTVIE, RideHomeIE, RinseFMArtistPlaylistIE, RinseFMIE, RMCDecouverteIE, RockstarGamesIE, RokfinChannelIE, RokfinIE, RokfinSearchIE, RokfinStackIE, RoosterTeethIE, RoosterTeethSeriesIE, RottenTomatoesIE, MujRozhlasIE, RozhlasIE, RozhlasVltavaIE, RteIE, RteRadioIE, RTL2IE, RTLLuArticleIE, RTLLuLiveIE, RTLLuRadioIE, RTLLuTeleVODIE, RtlNlIE, RTDocumentryIE, RTDocumentryPlaylistIE, RTNewsIE, RuptlyIE, RTPIE, RTRFMIE, RTVCKalturaIE, RTVCPlayEmbedIE, RTVCPlayIE, RTVEALaCartaIE, RTVEAudioIE, RTVEInfantilIE, RTVELiveIE, RTVETelevisionIE, RTVSIE, RTVSLOIE, RTVSLOShowIE, RudoVideoIE, Rule34VideoIE, RumbleChannelIE, RumbleEmbedIE, RumbleIE, RutubeChannelIE, RutubeEmbedIE, RutubeIE, RutubeMovieIE, RutubePersonIE, RutubePlaylistIE, RutubeTagsIE, RUTVIE, RuutuIE, RuvIE, RuvSpilaIE, S4CIE, S4CSeriesIE, SafariApiIE, SafariCourseIE, SafariIE, SaitosanIE, SampleFocusIE, SapoIE, SBSIE, SBSCoKrAllvodProgramIE, SBSCoKrIE, SBSCoKrProgramsVodIE, Screen9IE, ScreencastIE, ScreencastifyIE, ScreencastOMaticIE, ScreenRecIE, ScrippsNetworksIE, ScrippsNetworksWatchIE, ScrolllerIE, SCTEIE, SCTECourseIE, SejmIE, SenIE, SenalColombiaLiveIE, SenateGovIE, SenateISVPIE, SendtoNewsIE, ServusIE, SevenPlusIE, SexuIE, SeznamZpravyArticleIE, SeznamZpravyIE, ShahidIE, ShahidShowIE, SharePointIE, ShareVideosEmbedIE, ShemarooMeIE, ShowRoomLiveIE, SibnetEmbedIE, SimplecastEpisodeIE, SimplecastIE, SimplecastPodcastIE, SinaIE, SixPlayIE, SkebIE, SkyNewsIE, SkyNewsStoryIE, SkySportsIE, SkySportsNewsIE, SkyItPlayerIE, SkyItIE, CieloTVItIE, SkyItArteIE, SkyItVideoIE, SkyItVideoLiveIE, TV8ItIE, SkylineWebcamsIE, SkyNewsArabiaArticleIE, SkyNewsArabiaIE, SkyNewsAUIE, SlideshareIE, SlidesLiveIE, SlutloadIE, SmotrimIE, SnapchatSpotlightIE, SnotrIE, SohuIE, SohuVIE, SonyLIVIE, SonyLIVSeriesIE, SoundcloudEmbedIE, SoundcloudIE, SoundcloudPlaylistIE, SoundcloudRelatedIE, SoundcloudSearchIE, SoundcloudSetIE, SoundcloudTrackStationIE, SoundcloudUserIE, SoundcloudUserPermalinkIE, SoundgasmIE, SoundgasmProfileIE, SouthParkIE, SouthParkDeIE, SouthParkDkIE, SouthParkEsIE, SouthParkLatIE, SouthParkNlIE, SovietsClosetIE, SovietsClosetPlaylistIE, SpankBangIE, SpankBangPlaylistIE, SpiegelIE, BellatorIE, ParamountNetworkIE, Sport5IE, SportBoxIE, SportDeutschlandIE, SpotifyIE, SpotifyShowIE, SpreakerIE, SpreakerShowIE, SpringboardPlatformIE, SproutIE, SproutVideoIE, VidsIoIE, SRGSSRIE, RTSIE, SRGSSRPlayIE, SRMediathekIE, StacommuLiveIE, StacommuVODIE, TheaterComplexTownPPVIE, TheaterComplexTownVODIE, StagePlusVODConcertIE, StanfordOpenClassroomIE, StarTrekIE, StarTVIE, SteamCommunityBroadcastIE, SteamIE, StitcherIE, StitcherShowIE, StoryFireIE, StoryFireSeriesIE, StoryFireUserIE, StreamableIE, StreamCZIE, StreetVoiceIE, StretchInternetIE, StripchatIE, STVPlayerIE, SubstackIE, SunPornoIE, SverigesRadioEpisodeIE, SverigesRadioPublicationIE, SVTIE, SVTPageIE, SVTPlayIE, SVTSeriesIE, SwearnetEpisodeIE, SyfyIE, SYVDKIE, SztvHuIE, TagesschauIE, TapTapAppIE, TapTapAppIntlIE, TapTapMomentIE, TapTapPostIntlIE, TassIE, TBSIE, TBSJPEpisodeIE, TBSJPPlaylistIE, TBSJPProgramIE, TeachableCourseIE, TeachableIE, TeacherTubeIE, TeacherTubeUserIE, TeachingChannelIE, ConanClassicIE, TeamcocoIE, TeamTreeHouseIE, TedEmbedIE, TedPlaylistIE, TedSeriesIE, TedTalkIE, Tele5IE, Tele13IE, TeleBruxellesIE, TelecaribePlayIE, TelecincoIE, TelegraafIE, TelegramEmbedIE, TeleMBIE, TelemundoIE, TeleQuebecEmissionIE, TeleQuebecIE, TeleQuebecLiveIE, TeleQuebecSquatIE, TeleQuebecVideoIE, TeleTaskIE, TelewebionIE, IVXPlayerIE, TempoIE, IflixEpisodeIE, IflixSeriesIE, VQQSeriesIE, VQQVideoIE, WeTvEpisodeIE, WeTvSeriesIE, TennisTVIE, TenPlayIE, TenPlaySeasonIE, TestURLIE, TF1IE, TFOIE, TheGuardianPodcastIE, TheGuardianPodcastPlaylistIE, TheHoleTvIE, TheInterceptIE, ThePlatformFeedIE, CBSIE, CorusIE, ParamountPlusIE, ThePlatformIE, AENetworksCollectionIE, AENetworksIE, AENetworksShowIE, BiographyIE, HistoryPlayerIE, HistoryTopicIE, AMCNetworksIE, NBCIE, NBCNewsIE, TheStarIE, TheSunIE, TheWeatherChannelIE, ThisAmericanLifeIE, ThisOldHouseIE, ThisVidIE, ThisVidMemberIE, ThisVidPlaylistIE, ThreeQSDNIE, ThreeSpeakIE, ThreeSpeakUserIE, DouyinIE, TikTokCollectionIE, TikTokEffectIE, TikTokIE, TikTokLiveIE, TikTokSoundIE, TikTokTagIE, TikTokUserIE, TikTokVMIE, TMZIE, EMPFlixIE, MovieFapIE, TNAFlixIE, TNAFlixNetworkEmbedIE, MeWatchIE, ToggleIE, ToggoIE, TOnlineIE, ToonGogglesIE, TouTvIE, ToypicsIE, ToypicsUserIE, TrailerAddictIE, TrillerIE, TrillerShortIE, TrillerUserIE, TrovoChannelClipIE, TrovoChannelVodIE, TrovoIE, TrovoVodIE, TrtCocukVideoIE, TrtWorldIE, TrueIDIE, TruNewsIE, TruthIE, TruTVIE, Tube8IE, TubeTuGrazIE, TubeTuGrazSeriesIE, TubiTvIE, TubiTvShowIE, TumblrIE, TuneInPodcastEpisodeIE, TuneInPodcastIE, TuneInShortenerIE, TuneInStationIE, TV2IE, KatsomoIE, MTVUutisetArticleIE, TV2ArticleIE, TV2DKIE, TV2DKBornholmPlayIE, TV2HuIE, TV2HuSeriesIE, TV4IE, TV5MondePlusIE, TV5UnisIE, TV5UnisVideoIE, TV24UAVideoIE, TVAIE, TVANouvellesArticleIE, TVANouvellesIE, TVCIE, TVCArticleIE, TVerIE, TvigleIE, TVIPlayerIE, TVLandIE, TVN24IE, TVNoeIE, TVOpenGrEmbedIE, TVOpenGrWatchIE, TVPIE, TVPEmbedIE, TVPStreamIE, TVPVODSeriesIE, TVPVODVideoIE, TVPlayHomeIE, TVPlayIE, TVPlayerIE, TweakersIE, TwentyMinutenIE, TwentyThreeVideoIE, TwitCastingIE, TwitCastingLiveIE, TwitCastingUserIE, TwitchClipsIE, TwitchCollectionIE, TwitchStreamIE, TwitchVideosClipsIE, TwitchVideosCollectionsIE, TwitchVideosIE, TwitchVodIE, TwitterAmplifyIE, TwitterBroadcastIE, TwitterCardIE, TwitterIE, TwitterShortenerIE, TwitterSpacesIE, PornTopIE, TxxxIE, UdemyIE, UdemyCourseIE, UDNEmbedIE, UFCTVIE, UFCArabiaIE, UkColumnIE, UKTVPlayIE, UlizaPlayerIE, UlizaPortalIE, UMGDeIE, UnistraIE, UnityIE, KnownDRMIE, KnownPiracyIE, UOLIE, UplynkIE, UplynkPreplayIE, UrortIE, URPlayIE, USANetworkIE, USATodayIE, UstreamChannelIE, UstreamIE, UstudioEmbedIE, UstudioIE, UtreonIE, Varzesh3IE, Vbox7IE, VeoIE, VestiIE, VevoIE, VevoPlaylistIE, BTArticleIE, BTVestlendingenIE, VH1IE, ViceArticleIE, ViceIE, ViceShowIE, ViddlerIE, VideaIE, VideocampusSachsenIE, ViMPPlaylistIE, VideoDetectiveIE, VideofyMeIE, VideoKenCategoryIE, VideoKenIE, VideoKenPlayerIE, VideoKenPlaylistIE, VideoKenTopicIE, VideomoreIE, VideomoreSeasonIE, VideomoreVideoIE, VideoPressIE, VidflexIE, VidioIE, VidioLiveIE, VidioPremierIE, VidLiiIE, VidlyIE, VidyardIE, ViewLiftEmbedIE, ViewLiftIE, ViideaIE, VikiChannelIE, VikiIE, VHXEmbedIE, VimeoAlbumIE, VimeoChannelIE, VimeoGroupsIE, VimeoIE, VimeoLikesIE, VimeoOndemandIE, VimeoProIE, VimeoReviewIE, VimeoUserIE, VimeoWatchLaterIE, VimmIE, VimmRecordingIE, ViouslyIE, ViqeoIE, ViuIE, ViuOTTIE, ViuOTTIndonesiaIE, ViuPlaylistIE, VKIE, VKPlayIE, VKPlayLiveIE, VKUserVideosIE, VKWallPostIE, VocarooIE, VODPlIE, VODPlatformIE, VoicyChannelIE, VoicyIE, VolejTVIE, VoxMediaIE, VoxMediaVolumeIE, VRTIE, DagelijkseKostIE, KetnetIE, Radio1BeIE, VrtNUIE, VTMIE, VTVIE, VTVGoIE, VuClipIE, VVVVIDIE, VVVVIDShowIE, WallaIE, WashingtonPostArticleIE, WashingtonPostIE, WatIE, WDRIE, WDRElefantIE, WDRMobileIE, WDRPageIE, WebcameraplIE, WebcasterFeedIE, WebcasterIE, WebOfStoriesIE, WebOfStoriesPlaylistIE, WeiboIE, WeiboUserIE, WeiboVideoIE, WeiqiTVIE, WeverseIE, WeverseLiveIE, WeverseLiveTabIE, WeverseMediaIE, WeverseMediaTabIE, WeverseMomentIE, WeVidiIE, WeyyakIE, WhoWatchIE, WhypIE, WikimediaIE, WimbledonIE, WimTVIE, WistiaChannelIE, WistiaIE, WistiaPlaylistIE, WordpressMiniAudioPlayerEmbedIE, WordpressPlaylistEmbedIE, WorldStarHipHopIE, WPPilotChannelsIE, WPPilotIE, WrestleUniversePPVIE, WrestleUniverseVODIE, WSJIE, WSJArticleIE, WWEIE, WykopDigCommentIE, WykopDigIE, WykopPostCommentIE, WykopPostIE, XanimuIE, XboxClipsIE, XHamsterEmbedIE, XHamsterIE, XHamsterUserIE, XiaoHongShuIE, XimalayaAlbumIE, XimalayaIE, XinpianchangIE, XMinusIE, XNXXIE, XstreamIE, VGTVIE, XVideosIE, XVideosQuickiesIE, XXXYMoviesIE, YahooIE, AolIE, YahooJapanNewsIE, YahooSearchIE, YandexDiskIE, YandexMusicAlbumIE, YandexMusicArtistAlbumsIE, YandexMusicArtistTracksIE, YandexMusicPlaylistIE, YandexMusicTrackIE, YandexVideoIE, YandexVideoPreviewIE, ZenYandexChannelIE, ZenYandexIE, YapFilesIE, YappyIE, YappyProfileIE, YleAreenaIE, YouJizzIE, YoukuIE, YoukuShowIE, YouNowChannelIE, YouNowLiveIE, YouNowMomentIE, YouPornCategoryIE, YouPornChannelIE, YouPornCollectionIE, YouPornIE, YouPornStarIE, YouPornTagIE, YouPornVideosIE, ZaikoETicketIE, ZaikoIE, ZapiksIE, BBVTVIE, EWETVIE, SAKTVIE, VTXTVIE, BBVTVLiveIE, BBVTVRecordingsIE, EinsUndEinsTVIE, EinsUndEinsTVLiveIE, EinsUndEinsTVRecordingsIE, EWETVLiveIE, EWETVRecordingsIE, GlattvisionTVIE, GlattvisionTVLiveIE, GlattvisionTVRecordingsIE, MNetTVIE, MNetTVLiveIE, MNetTVRecordingsIE, NetPlusTVIE, NetPlusTVLiveIE, NetPlusTVRecordingsIE, OsnatelTVIE, OsnatelTVLiveIE, OsnatelTVRecordingsIE, QuantumTVIE, QuantumTVLiveIE, QuantumTVRecordingsIE, SAKTVLiveIE, SAKTVRecordingsIE, SaltTVIE, SaltTVLiveIE, SaltTVRecordingsIE, VTXTVLiveIE, VTXTVRecordingsIE, WalyTVIE, WalyTVLiveIE, WalyTVRecordingsIE, ZattooIE, ZattooLiveIE, ZattooMoviesIE, ZattooRecordingsIE, ZDFIE, DreiSatIE, ZDFChannelIE, Zee5IE, Zee5SeriesIE, ZeeNewsIE, ZenPornIE, ZetlandDKArticleIE, ZhihuIE, ZingMp3AlbumIE, ZingMp3ChartHomeIE, ZingMp3ChartMusicVideoIE, ZingMp3HubIE, ZingMp3IE, ZingMp3LiveRadioIE, ZingMp3PodcastEpisodeIE, ZingMp3PodcastIE, ZingMp3UserIE, ZingMp3WeekChartIE, ZoomIE, ZypeIE, GenericIE]