|
|
@ -559,7 +559,8 @@ class TwitchStreamIE(TwitchBaseIE):
|
|
|
|
TwitchAllVideosIE,
|
|
|
|
TwitchAllVideosIE,
|
|
|
|
TwitchUploadsIE,
|
|
|
|
TwitchUploadsIE,
|
|
|
|
TwitchPastBroadcastsIE,
|
|
|
|
TwitchPastBroadcastsIE,
|
|
|
|
TwitchHighlightsIE))
|
|
|
|
TwitchHighlightsIE,
|
|
|
|
|
|
|
|
TwitchClipsIE))
|
|
|
|
else super(TwitchStreamIE, cls).suitable(url))
|
|
|
|
else super(TwitchStreamIE, cls).suitable(url))
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
@ -633,7 +634,7 @@ class TwitchStreamIE(TwitchBaseIE):
|
|
|
|
|
|
|
|
|
|
|
|
class TwitchClipsIE(TwitchBaseIE):
|
|
|
|
class TwitchClipsIE(TwitchBaseIE):
|
|
|
|
IE_NAME = 'twitch:clips'
|
|
|
|
IE_NAME = 'twitch:clips'
|
|
|
|
_VALID_URL = r'https?://clips\.twitch\.tv/(?:[^/]+/)*(?P<id>[^/?#&]+)'
|
|
|
|
_VALID_URL = r'https?://(?:clips\.twitch\.tv/(?:[^/]+/)*|(?:www\.)?twitch\.tv/[^/]+/clip/)(?P<id>[^/?#&]+)'
|
|
|
|
|
|
|
|
|
|
|
|
_TESTS = [{
|
|
|
|
_TESTS = [{
|
|
|
|
'url': 'https://clips.twitch.tv/FaintLightGullWholeWheat',
|
|
|
|
'url': 'https://clips.twitch.tv/FaintLightGullWholeWheat',
|
|
|
@ -653,6 +654,9 @@ class TwitchClipsIE(TwitchBaseIE):
|
|
|
|
# multiple formats
|
|
|
|
# multiple formats
|
|
|
|
'url': 'https://clips.twitch.tv/rflegendary/UninterestedBeeDAESuppy',
|
|
|
|
'url': 'https://clips.twitch.tv/rflegendary/UninterestedBeeDAESuppy',
|
|
|
|
'only_matching': True,
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'url': 'https://www.twitch.tv/sergeynixon/clip/StormyThankfulSproutFutureMan',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|