|
@@ -300,7 +300,7 @@ class TwitchPlaylistBaseIE(TwitchBaseIE):
|
|
|
response = self._call_api(
|
|
|
self._PLAYLIST_PATH % (channel_id, offset, limit),
|
|
|
channel_id,
|
|
|
- 'Downloading %s videos JSON page %s'
|
|
|
+ 'Downloading %s JSON page %s'
|
|
|
% (self._PLAYLIST_TYPE, counter_override or counter))
|
|
|
page_entries = self._extract_playlist_page(response)
|
|
|
if not page_entries:
|
|
@@ -350,19 +350,72 @@ class TwitchProfileIE(TwitchPlaylistBaseIE):
|
|
|
}
|
|
|
|
|
|
|
|
|
-class TwitchPastBroadcastsIE(TwitchPlaylistBaseIE):
|
|
|
- IE_NAME = 'twitch:past_broadcasts'
|
|
|
- _VALID_URL = r'%s/(?P<id>[^/]+)/profile/past_broadcasts/?(?:\#.*)?$' % TwitchBaseIE._VALID_URL_BASE
|
|
|
- _PLAYLIST_PATH = TwitchPlaylistBaseIE._PLAYLIST_PATH + '&broadcasts=true'
|
|
|
+class TwitchVideosBaseIE(TwitchPlaylistBaseIE):
|
|
|
+ _VALID_URL_VIDEOS_BASE = r'%s/(?P<id>[^/]+)/videos' % TwitchBaseIE._VALID_URL_BASE
|
|
|
+ _PLAYLIST_PATH = TwitchPlaylistBaseIE._PLAYLIST_PATH + '&broadcast_type='
|
|
|
+
|
|
|
+
|
|
|
+class TwitchAllVideosIE(TwitchVideosBaseIE):
|
|
|
+ IE_NAME = 'twitch:videos:all'
|
|
|
+ _VALID_URL = r'%s/all' % TwitchVideosBaseIE._VALID_URL_VIDEOS_BASE
|
|
|
+ _PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive,upload,highlight'
|
|
|
+ _PLAYLIST_TYPE = 'all videos'
|
|
|
+
|
|
|
+ _TEST = {
|
|
|
+ 'url': 'https://www.twitch.tv/spamfish/videos/all',
|
|
|
+ 'info_dict': {
|
|
|
+ 'id': 'spamfish',
|
|
|
+ 'title': 'Spamfish',
|
|
|
+ },
|
|
|
+ 'playlist_mincount': 869,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class TwitchUploadsIE(TwitchVideosBaseIE):
|
|
|
+ IE_NAME = 'twitch:videos:uploads'
|
|
|
+ _VALID_URL = r'%s/uploads' % TwitchVideosBaseIE._VALID_URL_VIDEOS_BASE
|
|
|
+ _PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'upload'
|
|
|
+ _PLAYLIST_TYPE = 'uploads'
|
|
|
+
|
|
|
+ _TEST = {
|
|
|
+ 'url': 'https://www.twitch.tv/spamfish/videos/uploads',
|
|
|
+ 'info_dict': {
|
|
|
+ 'id': 'spamfish',
|
|
|
+ 'title': 'Spamfish',
|
|
|
+ },
|
|
|
+ 'playlist_mincount': 0,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class TwitchPastBroadcastsIE(TwitchVideosBaseIE):
|
|
|
+ IE_NAME = 'twitch:videos:past-broadcasts'
|
|
|
+ _VALID_URL = r'%s/past-broadcasts' % TwitchVideosBaseIE._VALID_URL_VIDEOS_BASE
|
|
|
+ _PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive'
|
|
|
_PLAYLIST_TYPE = 'past broadcasts'
|
|
|
|
|
|
_TEST = {
|
|
|
- 'url': 'http://www.twitch.tv/spamfish/profile/past_broadcasts',
|
|
|
+ 'url': 'https://www.twitch.tv/spamfish/videos/past-broadcasts',
|
|
|
+ 'info_dict': {
|
|
|
+ 'id': 'spamfish',
|
|
|
+ 'title': 'Spamfish',
|
|
|
+ },
|
|
|
+ 'playlist_mincount': 0,
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+class TwitchHighlightsIE(TwitchVideosBaseIE):
|
|
|
+ IE_NAME = 'twitch:videos:highlights'
|
|
|
+ _VALID_URL = r'%s/highlights' % TwitchVideosBaseIE._VALID_URL_VIDEOS_BASE
|
|
|
+ _PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'highlight'
|
|
|
+ _PLAYLIST_TYPE = 'highlights'
|
|
|
+
|
|
|
+ _TEST = {
|
|
|
+ 'url': 'https://www.twitch.tv/spamfish/videos/highlights',
|
|
|
'info_dict': {
|
|
|
'id': 'spamfish',
|
|
|
'title': 'Spamfish',
|
|
|
},
|
|
|
- 'playlist_mincount': 54,
|
|
|
+ 'playlist_mincount': 805,
|
|
|
}
|
|
|
|
|
|
|