mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-25 19:52:11 +00:00
[twitch] Add support for mobile URLs (closes #16146)
This commit is contained in:
parent
f7f9757efc
commit
fce7962691
1 changed files with 34 additions and 13 deletions
|
@ -28,7 +28,7 @@ from ..utils import (
|
||||||
|
|
||||||
|
|
||||||
class TwitchBaseIE(InfoExtractor):
|
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'
|
_API_BASE = 'https://api.twitch.tv'
|
||||||
_USHER_BASE = 'https://usher.ttvnw.net'
|
_USHER_BASE = 'https://usher.ttvnw.net'
|
||||||
|
@ -226,7 +226,7 @@ class TwitchVodIE(TwitchItemBaseIE):
|
||||||
_VALID_URL = r'''(?x)
|
_VALID_URL = r'''(?x)
|
||||||
https?://
|
https?://
|
||||||
(?:
|
(?:
|
||||||
(?:(?:www|go)\.)?twitch\.tv/(?:[^/]+/v|videos)/|
|
(?:(?:www|go|m)\.)?twitch\.tv/(?:[^/]+/v|videos)/|
|
||||||
player\.twitch\.tv/\?.*?\bvideo=v
|
player\.twitch\.tv/\?.*?\bvideo=v
|
||||||
)
|
)
|
||||||
(?P<id>\d+)
|
(?P<id>\d+)
|
||||||
|
@ -279,6 +279,9 @@ class TwitchVodIE(TwitchItemBaseIE):
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.twitch.tv/videos/6528877',
|
'url': 'https://www.twitch.tv/videos/6528877',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'https://m.twitch.tv/beagsandjam/v/247478721',
|
||||||
|
'only_matching': True,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
@ -390,14 +393,17 @@ class TwitchProfileIE(TwitchPlaylistBaseIE):
|
||||||
_VALID_URL = r'%s/(?P<id>[^/]+)/profile/?(?:\#.*)?$' % TwitchBaseIE._VALID_URL_BASE
|
_VALID_URL = r'%s/(?P<id>[^/]+)/profile/?(?:\#.*)?$' % TwitchBaseIE._VALID_URL_BASE
|
||||||
_PLAYLIST_TYPE = 'profile'
|
_PLAYLIST_TYPE = 'profile'
|
||||||
|
|
||||||
_TEST = {
|
_TESTS = [{
|
||||||
'url': 'http://www.twitch.tv/vanillatv/profile',
|
'url': 'http://www.twitch.tv/vanillatv/profile',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'vanillatv',
|
'id': 'vanillatv',
|
||||||
'title': 'VanillaTV',
|
'title': 'VanillaTV',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 412,
|
'playlist_mincount': 412,
|
||||||
}
|
}, {
|
||||||
|
'url': 'http://m.twitch.tv/vanillatv/profile',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
class TwitchVideosBaseIE(TwitchPlaylistBaseIE):
|
class TwitchVideosBaseIE(TwitchPlaylistBaseIE):
|
||||||
|
@ -411,14 +417,17 @@ class TwitchAllVideosIE(TwitchVideosBaseIE):
|
||||||
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive,upload,highlight'
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive,upload,highlight'
|
||||||
_PLAYLIST_TYPE = 'all videos'
|
_PLAYLIST_TYPE = 'all videos'
|
||||||
|
|
||||||
_TEST = {
|
_TESTS = [{
|
||||||
'url': 'https://www.twitch.tv/spamfish/videos/all',
|
'url': 'https://www.twitch.tv/spamfish/videos/all',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'spamfish',
|
'id': 'spamfish',
|
||||||
'title': 'Spamfish',
|
'title': 'Spamfish',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 869,
|
'playlist_mincount': 869,
|
||||||
}
|
}, {
|
||||||
|
'url': 'https://m.twitch.tv/spamfish/videos/all',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
class TwitchUploadsIE(TwitchVideosBaseIE):
|
class TwitchUploadsIE(TwitchVideosBaseIE):
|
||||||
|
@ -427,14 +436,17 @@ class TwitchUploadsIE(TwitchVideosBaseIE):
|
||||||
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'upload'
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'upload'
|
||||||
_PLAYLIST_TYPE = 'uploads'
|
_PLAYLIST_TYPE = 'uploads'
|
||||||
|
|
||||||
_TEST = {
|
_TESTS = [{
|
||||||
'url': 'https://www.twitch.tv/spamfish/videos/uploads',
|
'url': 'https://www.twitch.tv/spamfish/videos/uploads',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'spamfish',
|
'id': 'spamfish',
|
||||||
'title': 'Spamfish',
|
'title': 'Spamfish',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 0,
|
'playlist_mincount': 0,
|
||||||
}
|
}, {
|
||||||
|
'url': 'https://m.twitch.tv/spamfish/videos/uploads',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
class TwitchPastBroadcastsIE(TwitchVideosBaseIE):
|
class TwitchPastBroadcastsIE(TwitchVideosBaseIE):
|
||||||
|
@ -443,14 +455,17 @@ class TwitchPastBroadcastsIE(TwitchVideosBaseIE):
|
||||||
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive'
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive'
|
||||||
_PLAYLIST_TYPE = 'past broadcasts'
|
_PLAYLIST_TYPE = 'past broadcasts'
|
||||||
|
|
||||||
_TEST = {
|
_TESTS = [{
|
||||||
'url': 'https://www.twitch.tv/spamfish/videos/past-broadcasts',
|
'url': 'https://www.twitch.tv/spamfish/videos/past-broadcasts',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'spamfish',
|
'id': 'spamfish',
|
||||||
'title': 'Spamfish',
|
'title': 'Spamfish',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 0,
|
'playlist_mincount': 0,
|
||||||
}
|
}, {
|
||||||
|
'url': 'https://m.twitch.tv/spamfish/videos/past-broadcasts',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
class TwitchHighlightsIE(TwitchVideosBaseIE):
|
class TwitchHighlightsIE(TwitchVideosBaseIE):
|
||||||
|
@ -459,14 +474,17 @@ class TwitchHighlightsIE(TwitchVideosBaseIE):
|
||||||
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'highlight'
|
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'highlight'
|
||||||
_PLAYLIST_TYPE = 'highlights'
|
_PLAYLIST_TYPE = 'highlights'
|
||||||
|
|
||||||
_TEST = {
|
_TESTS = [{
|
||||||
'url': 'https://www.twitch.tv/spamfish/videos/highlights',
|
'url': 'https://www.twitch.tv/spamfish/videos/highlights',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'spamfish',
|
'id': 'spamfish',
|
||||||
'title': 'Spamfish',
|
'title': 'Spamfish',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 805,
|
'playlist_mincount': 805,
|
||||||
}
|
}, {
|
||||||
|
'url': 'https://m.twitch.tv/spamfish/videos/highlights',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
class TwitchStreamIE(TwitchBaseIE):
|
class TwitchStreamIE(TwitchBaseIE):
|
||||||
|
@ -474,7 +492,7 @@ class TwitchStreamIE(TwitchBaseIE):
|
||||||
_VALID_URL = r'''(?x)
|
_VALID_URL = r'''(?x)
|
||||||
https?://
|
https?://
|
||||||
(?:
|
(?:
|
||||||
(?:(?:www|go)\.)?twitch\.tv/|
|
(?:(?:www|go|m)\.)?twitch\.tv/|
|
||||||
player\.twitch\.tv/\?.*?\bchannel=
|
player\.twitch\.tv/\?.*?\bchannel=
|
||||||
)
|
)
|
||||||
(?P<id>[^/#?]+)
|
(?P<id>[^/#?]+)
|
||||||
|
@ -508,6 +526,9 @@ class TwitchStreamIE(TwitchBaseIE):
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://go.twitch.tv/food',
|
'url': 'https://go.twitch.tv/food',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'https://m.twitch.tv/food',
|
||||||
|
'only_matching': True,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
Loading…
Reference in a new issue