|
|
@ -447,7 +447,14 @@ class TwitchHighlightsIE(TwitchVideosBaseIE): |
|
|
|
|
|
|
|
class TwitchStreamIE(TwitchBaseIE): |
|
|
|
IE_NAME = 'twitch:stream' |
|
|
|
_VALID_URL = r'%s/(?P<id>[^/#?]+)/?(?:\#.*)?$' % TwitchBaseIE._VALID_URL_BASE |
|
|
|
_VALID_URL = r'''(?x) |
|
|
|
https?:// |
|
|
|
(?: |
|
|
|
(?:www\.)?twitch\.tv/| |
|
|
|
player\.twitch\.tv/\?.*?\bchannel= |
|
|
|
) |
|
|
|
(?P<id>[^/#?]+) |
|
|
|
''' |
|
|
|
|
|
|
|
_TESTS = [{ |
|
|
|
'url': 'http://www.twitch.tv/shroomztv', |
|
|
@ -471,8 +478,25 @@ class TwitchStreamIE(TwitchBaseIE): |
|
|
|
}, { |
|
|
|
'url': 'http://www.twitch.tv/miracle_doto#profile-0', |
|
|
|
'only_matching': True, |
|
|
|
}, { |
|
|
|
'url': 'https://player.twitch.tv/?channel=lotsofs', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
@classmethod |
|
|
|
def suitable(cls, url): |
|
|
|
return (False |
|
|
|
if any(ie.suitable(url) for ie in ( |
|
|
|
TwitchVideoIE, |
|
|
|
TwitchChapterIE, |
|
|
|
TwitchVodIE, |
|
|
|
TwitchProfileIE, |
|
|
|
TwitchAllVideosIE, |
|
|
|
TwitchUploadsIE, |
|
|
|
TwitchPastBroadcastsIE, |
|
|
|
TwitchHighlightsIE)) |
|
|
|
else super(TwitchStreamIE, cls).suitable(url)) |
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
|
channel_id = self._match_id(url) |
|
|
|
|
|
|
|