mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-09-12 04:44:14 +09:00
Compare commits
No commits in common. "9fc5eafb8e384453a49f7cfe73147be491f0b19d" and "a7356dffe90ed68958d839da073f1321f87a4feb" have entirely different histories.
9fc5eafb8e
...
a7356dffe9
@ -11,13 +11,11 @@ from ..utils import (
|
|||||||
ExtractorError,
|
ExtractorError,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
strip_or_none,
|
|
||||||
unified_timestamp,
|
unified_timestamp,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DPlayIE(InfoExtractor):
|
class DPlayIE(InfoExtractor):
|
||||||
_PATH_REGEX = r'/(?P<id>[^/]+/[^/?#]+)'
|
|
||||||
_VALID_URL = r'''(?x)https?://
|
_VALID_URL = r'''(?x)https?://
|
||||||
(?P<domain>
|
(?P<domain>
|
||||||
(?:www\.)?(?P<host>d
|
(?:www\.)?(?P<host>d
|
||||||
@ -27,7 +25,7 @@ class DPlayIE(InfoExtractor):
|
|||||||
)
|
)
|
||||||
)|
|
)|
|
||||||
(?P<subdomain_country>es|it)\.dplay\.com
|
(?P<subdomain_country>es|it)\.dplay\.com
|
||||||
)/[^/]+''' + _PATH_REGEX
|
)/[^/]+/(?P<id>[^/]+/[^/?#]+)'''
|
||||||
|
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
# non geo restricted, via secure api, unsigned download hls URL
|
# non geo restricted, via secure api, unsigned download hls URL
|
||||||
@ -274,7 +272,7 @@ class DPlayIE(InfoExtractor):
|
|||||||
'id': video_id,
|
'id': video_id,
|
||||||
'display_id': display_id,
|
'display_id': display_id,
|
||||||
'title': title,
|
'title': title,
|
||||||
'description': strip_or_none(info.get('description')),
|
'description': info.get('description'),
|
||||||
'duration': float_or_none(info.get('videoDuration'), 1000),
|
'duration': float_or_none(info.get('videoDuration'), 1000),
|
||||||
'timestamp': unified_timestamp(info.get('publishStart')),
|
'timestamp': unified_timestamp(info.get('publishStart')),
|
||||||
'series': series,
|
'series': series,
|
||||||
@ -297,7 +295,7 @@ class DPlayIE(InfoExtractor):
|
|||||||
|
|
||||||
|
|
||||||
class DiscoveryPlusIE(DPlayIE):
|
class DiscoveryPlusIE(DPlayIE):
|
||||||
_VALID_URL = r'https?://(?:www\.)?discoveryplus\.com/video' + DPlayIE._PATH_REGEX
|
_VALID_URL = r'https?://(?:www\.)?discoveryplus\.com/video/(?P<id>[^/]+/[^/]+)'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://www.discoveryplus.com/video/property-brothers-forever-home/food-and-family',
|
'url': 'https://www.discoveryplus.com/video/property-brothers-forever-home/food-and-family',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
@ -337,32 +335,3 @@ class DiscoveryPlusIE(DPlayIE):
|
|||||||
display_id = self._match_id(url)
|
display_id = self._match_id(url)
|
||||||
return self._get_disco_api_info(
|
return self._get_disco_api_info(
|
||||||
url, display_id, 'us1-prod-direct.discoveryplus.com', 'go', 'us')
|
url, display_id, 'us1-prod-direct.discoveryplus.com', 'go', 'us')
|
||||||
|
|
||||||
|
|
||||||
class HGTVDeIE(DPlayIE):
|
|
||||||
_VALID_URL = r'https?://de\.hgtv\.com/sendungen' + DPlayIE._PATH_REGEX
|
|
||||||
_TESTS = [{
|
|
||||||
'url': 'https://de.hgtv.com/sendungen/tiny-house-klein-aber-oho/wer-braucht-schon-eine-toilette/',
|
|
||||||
'info_dict': {
|
|
||||||
'id': '151205',
|
|
||||||
'display_id': 'tiny-house-klein-aber-oho/wer-braucht-schon-eine-toilette',
|
|
||||||
'ext': 'mp4',
|
|
||||||
'title': 'Wer braucht schon eine Toilette',
|
|
||||||
'description': 'md5:05b40a27e7aed2c9172de34d459134e2',
|
|
||||||
'duration': 1177.024,
|
|
||||||
'timestamp': 1595705400,
|
|
||||||
'upload_date': '20200725',
|
|
||||||
'creator': 'HGTV',
|
|
||||||
'series': 'Tiny House - klein, aber oho',
|
|
||||||
'season_number': 3,
|
|
||||||
'episode_number': 3,
|
|
||||||
},
|
|
||||||
'params': {
|
|
||||||
'format': 'bestvideo',
|
|
||||||
},
|
|
||||||
}]
|
|
||||||
|
|
||||||
def _real_extract(self, url):
|
|
||||||
display_id = self._match_id(url)
|
|
||||||
return self._get_disco_api_info(
|
|
||||||
url, display_id, 'eu1-prod.disco-api.com', 'hgtv', 'de')
|
|
||||||
|
@ -291,7 +291,6 @@ from .douyutv import (
|
|||||||
from .dplay import (
|
from .dplay import (
|
||||||
DPlayIE,
|
DPlayIE,
|
||||||
DiscoveryPlusIE,
|
DiscoveryPlusIE,
|
||||||
HGTVDeIE,
|
|
||||||
)
|
)
|
||||||
from .dreisat import DreiSatIE
|
from .dreisat import DreiSatIE
|
||||||
from .drbonanza import DRBonanzaIE
|
from .drbonanza import DRBonanzaIE
|
||||||
|
@ -326,57 +326,52 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
|||||||
|
|
||||||
class YoutubeIE(YoutubeBaseInfoExtractor):
|
class YoutubeIE(YoutubeBaseInfoExtractor):
|
||||||
IE_DESC = 'YouTube.com'
|
IE_DESC = 'YouTube.com'
|
||||||
_INVIDIOUS_SITES = (
|
|
||||||
# invidious-redirect websites
|
|
||||||
r'(?:www\.)?redirect\.invidious\.io',
|
|
||||||
r'(?:(?:www|dev)\.)?invidio\.us',
|
|
||||||
# Invidious instances taken from https://github.com/iv-org/documentation/blob/master/Invidious-Instances.md
|
|
||||||
r'(?:(?:www|no)\.)?invidiou\.sh',
|
|
||||||
r'(?:(?:www|fi)\.)?invidious\.snopyta\.org',
|
|
||||||
r'(?:www\.)?invidious\.kabi\.tk',
|
|
||||||
r'(?:www\.)?invidious\.13ad\.de',
|
|
||||||
r'(?:www\.)?invidious\.mastodon\.host',
|
|
||||||
r'(?:www\.)?invidious\.zapashcanon\.fr',
|
|
||||||
r'(?:www\.)?invidious\.kavin\.rocks',
|
|
||||||
r'(?:www\.)?invidious\.tube',
|
|
||||||
r'(?:www\.)?invidiou\.site',
|
|
||||||
r'(?:www\.)?invidious\.site',
|
|
||||||
r'(?:www\.)?invidious\.xyz',
|
|
||||||
r'(?:www\.)?invidious\.nixnet\.xyz',
|
|
||||||
r'(?:www\.)?invidious\.drycat\.fr',
|
|
||||||
r'(?:www\.)?tube\.poal\.co',
|
|
||||||
r'(?:www\.)?tube\.connect\.cafe',
|
|
||||||
r'(?:www\.)?vid\.wxzm\.sx',
|
|
||||||
r'(?:www\.)?vid\.mint\.lgbt',
|
|
||||||
r'(?:www\.)?yewtu\.be',
|
|
||||||
r'(?:www\.)?yt\.elukerio\.org',
|
|
||||||
r'(?:www\.)?yt\.lelux\.fi',
|
|
||||||
r'(?:www\.)?invidious\.ggc-project\.de',
|
|
||||||
r'(?:www\.)?yt\.maisputain\.ovh',
|
|
||||||
r'(?:www\.)?invidious\.13ad\.de',
|
|
||||||
r'(?:www\.)?invidious\.toot\.koeln',
|
|
||||||
r'(?:www\.)?invidious\.fdn\.fr',
|
|
||||||
r'(?:www\.)?watch\.nettohikari\.com',
|
|
||||||
r'(?:www\.)?kgg2m7yk5aybusll\.onion',
|
|
||||||
r'(?:www\.)?qklhadlycap4cnod\.onion',
|
|
||||||
r'(?:www\.)?axqzx4s6s54s32yentfqojs3x5i7faxza6xo3ehd4bzzsg2ii4fv2iid\.onion',
|
|
||||||
r'(?:www\.)?c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid\.onion',
|
|
||||||
r'(?:www\.)?fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad\.onion',
|
|
||||||
r'(?:www\.)?invidious\.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd\.onion',
|
|
||||||
r'(?:www\.)?owxfohz4kjyv25fvlqilyxast7inivgiktls3th44jhk3ej3i7ya\.b32\.i2p',
|
|
||||||
r'(?:www\.)?4l2dgddgsrkf2ous66i6seeyi6etzfgrue332grh2n7madpwopotugyd\.onion',
|
|
||||||
)
|
|
||||||
_VALID_URL = r"""(?x)^
|
_VALID_URL = r"""(?x)^
|
||||||
(
|
(
|
||||||
(?:https?://|//) # http(s):// or protocol-independent URL
|
(?:https?://|//) # http(s):// or protocol-independent URL
|
||||||
(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\.com|
|
(?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\.com/|
|
||||||
(?:www\.)?deturl\.com/www\.youtube\.com|
|
(?:www\.)?deturl\.com/www\.youtube\.com/|
|
||||||
(?:www\.)?pwnyoutube\.com|
|
(?:www\.)?pwnyoutube\.com/|
|
||||||
(?:www\.)?hooktube\.com|
|
(?:www\.)?hooktube\.com/|
|
||||||
(?:www\.)?yourepeat\.com|
|
(?:www\.)?yourepeat\.com/|
|
||||||
tube\.majestyc\.net|
|
tube\.majestyc\.net/|
|
||||||
%(invidious)s|
|
# Invidious instances taken from https://github.com/omarroth/invidious/wiki/Invidious-Instances
|
||||||
youtube\.googleapis\.com)/ # the various hostnames, with wildcard subdomains
|
(?:(?:www|dev)\.)?invidio\.us/|
|
||||||
|
(?:(?:www|no)\.)?invidiou\.sh/|
|
||||||
|
(?:(?:www|fi)\.)?invidious\.snopyta\.org/|
|
||||||
|
(?:www\.)?invidious\.kabi\.tk/|
|
||||||
|
(?:www\.)?invidious\.13ad\.de/|
|
||||||
|
(?:www\.)?invidious\.mastodon\.host/|
|
||||||
|
(?:www\.)?invidious\.zapashcanon\.fr/|
|
||||||
|
(?:www\.)?invidious\.kavin\.rocks/|
|
||||||
|
(?:www\.)?invidious\.tube/|
|
||||||
|
(?:www\.)?invidiou\.site/|
|
||||||
|
(?:www\.)?invidious\.site/|
|
||||||
|
(?:www\.)?invidious\.xyz/|
|
||||||
|
(?:www\.)?invidious\.nixnet\.xyz/|
|
||||||
|
(?:www\.)?invidious\.drycat\.fr/|
|
||||||
|
(?:www\.)?tube\.poal\.co/|
|
||||||
|
(?:www\.)?tube\.connect\.cafe/|
|
||||||
|
(?:www\.)?vid\.wxzm\.sx/|
|
||||||
|
(?:www\.)?vid\.mint\.lgbt/|
|
||||||
|
(?:www\.)?yewtu\.be/|
|
||||||
|
(?:www\.)?yt\.elukerio\.org/|
|
||||||
|
(?:www\.)?yt\.lelux\.fi/|
|
||||||
|
(?:www\.)?invidious\.ggc-project\.de/|
|
||||||
|
(?:www\.)?yt\.maisputain\.ovh/|
|
||||||
|
(?:www\.)?invidious\.13ad\.de/|
|
||||||
|
(?:www\.)?invidious\.toot\.koeln/|
|
||||||
|
(?:www\.)?invidious\.fdn\.fr/|
|
||||||
|
(?:www\.)?watch\.nettohikari\.com/|
|
||||||
|
(?: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/|
|
||||||
|
youtube\.googleapis\.com/) # the various hostnames, with wildcard subdomains
|
||||||
(?:.*?\#/)? # handle anchor (#/) redirect urls
|
(?:.*?\#/)? # handle anchor (#/) redirect urls
|
||||||
(?: # the various things that can precede the ID:
|
(?: # the various things that can precede the ID:
|
||||||
(?:(?:v|embed|e)/(?!videoseries)) # v/ or embed/ or e/
|
(?:(?:v|embed|e)/(?!videoseries)) # v/ or embed/ or e/
|
||||||
@ -391,7 +386,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
youtu\.be| # just youtu.be/xxxx
|
youtu\.be| # just youtu.be/xxxx
|
||||||
vid\.plus| # or vid.plus/xxxx
|
vid\.plus| # or vid.plus/xxxx
|
||||||
zwearz\.com/watch| # or zwearz.com/watch/xxxx
|
zwearz\.com/watch| # or zwearz.com/watch/xxxx
|
||||||
%(invidious)s
|
|
||||||
)/
|
)/
|
||||||
|(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
|
|(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
|
||||||
)
|
)
|
||||||
@ -404,10 +398,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
(?(1).+)? # if we found the ID, everything can follow
|
(?(1).+)? # if we found the ID, everything can follow
|
||||||
$""" % {
|
$""" % {'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE}
|
||||||
'playlist_id': YoutubeBaseInfoExtractor._PLAYLIST_ID_RE,
|
|
||||||
'invidious': '|'.join(_INVIDIOUS_SITES),
|
|
||||||
}
|
|
||||||
_PLAYER_INFO_RE = (
|
_PLAYER_INFO_RE = (
|
||||||
r'/s/player/(?P<id>[a-zA-Z0-9_-]{8,})/player',
|
r'/s/player/(?P<id>[a-zA-Z0-9_-]{8,})/player',
|
||||||
r'/(?P<id>[a-zA-Z0-9_-]{8,})/player(?:_ias\.vflset(?:/[a-zA-Z]{2,3}_[a-zA-Z]{2,3})?|-plasma-ias-(?:phone|tablet)-[a-z]{2}_[A-Z]{2}\.vflset)/base\.js$',
|
r'/(?P<id>[a-zA-Z0-9_-]{8,})/player(?:_ias\.vflset(?:/[a-zA-Z]{2,3}_[a-zA-Z]{2,3})?|-plasma-ias-(?:phone|tablet)-[a-z]{2}_[A-Z]{2}\.vflset)/base\.js$',
|
||||||
@ -915,15 +906,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
'url': 'https://invidio.us/watch?v=BaW_jenozKc',
|
'url': 'https://invidio.us/watch?v=BaW_jenozKc',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
'url': 'https://redirect.invidious.io/watch?v=BaW_jenozKc',
|
|
||||||
'only_matching': True,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
# from https://nitter.pussthecat.org/YouTube/status/1360363141947944964#m
|
|
||||||
'url': 'https://redirect.invidious.io/Yh0AhrY9GjA',
|
|
||||||
'only_matching': True,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
# DRM protected
|
# DRM protected
|
||||||
'url': 'https://www.youtube.com/watch?v=s7_qI6_mIXc',
|
'url': 'https://www.youtube.com/watch?v=s7_qI6_mIXc',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user