|
|
@ -28,7 +28,7 @@ from ..utils import ( |
|
|
|
|
|
|
|
|
|
|
|
class TwitchBaseIE(InfoExtractor): |
|
|
|
_VALID_URL_BASE = r'https?://(?:(?:www|go)\.)?twitch\.tv' |
|
|
|
_VALID_URL_BASE = r'https?://(?:(?:www|go|m)\.)?twitch\.tv' |
|
|
|
|
|
|
|
_API_BASE = 'https://api.twitch.tv' |
|
|
|
_USHER_BASE = 'https://usher.ttvnw.net' |
|
|
@ -226,7 +226,7 @@ class TwitchVodIE(TwitchItemBaseIE): |
|
|
|
_VALID_URL = r'''(?x) |
|
|
|
https?:// |
|
|
|
(?: |
|
|
|
(?:(?:www|go)\.)?twitch\.tv/(?:[^/]+/v|videos)/| |
|
|
|
(?:(?:www|go|m)\.)?twitch\.tv/(?:[^/]+/v|videos)/| |
|
|
|
player\.twitch\.tv/\?.*?\bvideo=v |
|
|
|
) |
|
|
|
(?P<id>\d+) |
|
|
@ -279,6 +279,9 @@ class TwitchVodIE(TwitchItemBaseIE): |
|
|
|
}, { |
|
|
|
'url': 'https://www.twitch.tv/videos/6528877', |
|
|
|
'only_matching': True, |
|
|
|
}, { |
|
|
|
'url': 'https://m.twitch.tv/beagsandjam/v/247478721', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
def _real_extract(self, url): |
|
|
@ -390,14 +393,17 @@ class TwitchProfileIE(TwitchPlaylistBaseIE): |
|
|
|
_VALID_URL = r'%s/(?P<id>[^/]+)/profile/?(?:\#.*)?$' % TwitchBaseIE._VALID_URL_BASE |
|
|
|
_PLAYLIST_TYPE = 'profile' |
|
|
|
|
|
|
|
_TEST = { |
|
|
|
_TESTS = [{ |
|
|
|
'url': 'http://www.twitch.tv/vanillatv/profile', |
|
|
|
'info_dict': { |
|
|
|
'id': 'vanillatv', |
|
|
|
'title': 'VanillaTV', |
|
|
|
}, |
|
|
|
'playlist_mincount': 412, |
|
|
|
} |
|
|
|
}, { |
|
|
|
'url': 'http://m.twitch.tv/vanillatv/profile', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
|
|
|
|
class TwitchVideosBaseIE(TwitchPlaylistBaseIE): |
|
|
@ -411,14 +417,17 @@ class TwitchAllVideosIE(TwitchVideosBaseIE): |
|
|
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive,upload,highlight' |
|
|
|
_PLAYLIST_TYPE = 'all videos' |
|
|
|
|
|
|
|
_TEST = { |
|
|
|
_TESTS = [{ |
|
|
|
'url': 'https://www.twitch.tv/spamfish/videos/all', |
|
|
|
'info_dict': { |
|
|
|
'id': 'spamfish', |
|
|
|
'title': 'Spamfish', |
|
|
|
}, |
|
|
|
'playlist_mincount': 869, |
|
|
|
} |
|
|
|
}, { |
|
|
|
'url': 'https://m.twitch.tv/spamfish/videos/all', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
|
|
|
|
class TwitchUploadsIE(TwitchVideosBaseIE): |
|
|
@ -427,14 +436,17 @@ class TwitchUploadsIE(TwitchVideosBaseIE): |
|
|
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'upload' |
|
|
|
_PLAYLIST_TYPE = 'uploads' |
|
|
|
|
|
|
|
_TEST = { |
|
|
|
_TESTS = [{ |
|
|
|
'url': 'https://www.twitch.tv/spamfish/videos/uploads', |
|
|
|
'info_dict': { |
|
|
|
'id': 'spamfish', |
|
|
|
'title': 'Spamfish', |
|
|
|
}, |
|
|
|
'playlist_mincount': 0, |
|
|
|
} |
|
|
|
}, { |
|
|
|
'url': 'https://m.twitch.tv/spamfish/videos/uploads', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
|
|
|
|
class TwitchPastBroadcastsIE(TwitchVideosBaseIE): |
|
|
@ -443,14 +455,17 @@ class TwitchPastBroadcastsIE(TwitchVideosBaseIE): |
|
|
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive' |
|
|
|
_PLAYLIST_TYPE = 'past broadcasts' |
|
|
|
|
|
|
|
_TEST = { |
|
|
|
_TESTS = [{ |
|
|
|
'url': 'https://www.twitch.tv/spamfish/videos/past-broadcasts', |
|
|
|
'info_dict': { |
|
|
|
'id': 'spamfish', |
|
|
|
'title': 'Spamfish', |
|
|
|
}, |
|
|
|
'playlist_mincount': 0, |
|
|
|
} |
|
|
|
}, { |
|
|
|
'url': 'https://m.twitch.tv/spamfish/videos/past-broadcasts', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
|
|
|
|
class TwitchHighlightsIE(TwitchVideosBaseIE): |
|
|
@ -459,14 +474,17 @@ class TwitchHighlightsIE(TwitchVideosBaseIE): |
|
|
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'highlight' |
|
|
|
_PLAYLIST_TYPE = 'highlights' |
|
|
|
|
|
|
|
_TEST = { |
|
|
|
_TESTS = [{ |
|
|
|
'url': 'https://www.twitch.tv/spamfish/videos/highlights', |
|
|
|
'info_dict': { |
|
|
|
'id': 'spamfish', |
|
|
|
'title': 'Spamfish', |
|
|
|
}, |
|
|
|
'playlist_mincount': 805, |
|
|
|
} |
|
|
|
}, { |
|
|
|
'url': 'https://m.twitch.tv/spamfish/videos/highlights', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
|
|
|
|
class TwitchStreamIE(TwitchBaseIE): |
|
|
@ -474,7 +492,7 @@ class TwitchStreamIE(TwitchBaseIE): |
|
|
|
_VALID_URL = r'''(?x) |
|
|
|
https?:// |
|
|
|
(?: |
|
|
|
(?:(?:www|go)\.)?twitch\.tv/| |
|
|
|
(?:(?:www|go|m)\.)?twitch\.tv/| |
|
|
|
player\.twitch\.tv/\?.*?\bchannel= |
|
|
|
) |
|
|
|
(?P<id>[^/#?]+) |
|
|
@ -508,6 +526,9 @@ class TwitchStreamIE(TwitchBaseIE): |
|
|
|
}, { |
|
|
|
'url': 'https://go.twitch.tv/food', |
|
|
|
'only_matching': True, |
|
|
|
}, { |
|
|
|
'url': 'https://m.twitch.tv/food', |
|
|
|
'only_matching': True, |
|
|
|
}] |
|
|
|
|
|
|
|
@classmethod |
|
|
|