projects
/
youtube-dl
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
f7f9757
)
[twitch] Add support for mobile URLs (closes #16146)
author
Sergey M․
<dstftw@gmail.com>
Tue, 10 Apr 2018 16:07:37 +0000
(23:07 +0700)
committer
Sergey M․
<dstftw@gmail.com>
Tue, 10 Apr 2018 16:07:37 +0000
(23:07 +0700)
youtube_dl/extractor/twitch.py
patch
|
blob
|
history
diff --git
a/youtube_dl/extractor/twitch.py
b/youtube_dl/extractor/twitch.py
index 1981b4d4a8064541c0fcf2faa04d863c72eebb14..f736283e905f081d10caf6afc133d6fa900c7463 100644
(file)
--- a/
youtube_dl/extractor/twitch.py
+++ b/
youtube_dl/extractor/twitch.py
@@
-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'
_USHER_BASE = 'https://usher.ttvnw.net'
_API_BASE = 'https://api.twitch.tv'
_USHER_BASE = 'https://usher.ttvnw.net'
@@
-226,7
+226,7
@@
class TwitchVodIE(TwitchItemBaseIE):
_VALID_URL = r'''(?x)
https?://
(?:
_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+)
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://www.twitch.tv/videos/6528877',
'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
_PLAYLIST_TYPE = 'profile'
_VALID_URL = r'%s/(?P<id>[^/]+)/profile/?(?:\#.*)?$' % TwitchBaseIE._VALID_URL_BASE
_PLAYLIST_TYPE = 'profile'
- _TEST
=
{
+ _TEST
S = [
{
'url': 'http://www.twitch.tv/vanillatv/profile',
'info_dict': {
'id': 'vanillatv',
'title': 'VanillaTV',
},
'playlist_mincount': 412,
'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):
class TwitchVideosBaseIE(TwitchPlaylistBaseIE):
@@
-411,14
+417,17
@@
class TwitchAllVideosIE(TwitchVideosBaseIE):
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive,upload,highlight'
_PLAYLIST_TYPE = 'all videos'
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive,upload,highlight'
_PLAYLIST_TYPE = 'all videos'
- _TEST
=
{
+ _TEST
S = [
{
'url': 'https://www.twitch.tv/spamfish/videos/all',
'info_dict': {
'id': 'spamfish',
'title': 'Spamfish',
},
'playlist_mincount': 869,
'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):
class TwitchUploadsIE(TwitchVideosBaseIE):
@@
-427,14
+436,17
@@
class TwitchUploadsIE(TwitchVideosBaseIE):
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'upload'
_PLAYLIST_TYPE = 'uploads'
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'upload'
_PLAYLIST_TYPE = 'uploads'
- _TEST
=
{
+ _TEST
S = [
{
'url': 'https://www.twitch.tv/spamfish/videos/uploads',
'info_dict': {
'id': 'spamfish',
'title': 'Spamfish',
},
'playlist_mincount': 0,
'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):
class TwitchPastBroadcastsIE(TwitchVideosBaseIE):
@@
-443,14
+455,17
@@
class TwitchPastBroadcastsIE(TwitchVideosBaseIE):
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive'
_PLAYLIST_TYPE = 'past broadcasts'
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'archive'
_PLAYLIST_TYPE = 'past broadcasts'
- _TEST
=
{
+ _TEST
S = [
{
'url': 'https://www.twitch.tv/spamfish/videos/past-broadcasts',
'info_dict': {
'id': 'spamfish',
'title': 'Spamfish',
},
'playlist_mincount': 0,
'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):
class TwitchHighlightsIE(TwitchVideosBaseIE):
@@
-459,14
+474,17
@@
class TwitchHighlightsIE(TwitchVideosBaseIE):
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'highlight'
_PLAYLIST_TYPE = 'highlights'
_PLAYLIST_PATH = TwitchVideosBaseIE._PLAYLIST_PATH + 'highlight'
_PLAYLIST_TYPE = 'highlights'
- _TEST
=
{
+ _TEST
S = [
{
'url': 'https://www.twitch.tv/spamfish/videos/highlights',
'info_dict': {
'id': 'spamfish',
'title': 'Spamfish',
},
'playlist_mincount': 805,
'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):
class TwitchStreamIE(TwitchBaseIE):
@@
-474,7
+492,7
@@
class TwitchStreamIE(TwitchBaseIE):
_VALID_URL = r'''(?x)
https?://
(?:
_VALID_URL = r'''(?x)
https?://
(?:
- (?:(?:www|go)\.)?twitch\.tv/|
+ (?:(?:www|go
|m
)\.)?twitch\.tv/|
player\.twitch\.tv/\?.*?\bchannel=
)
(?P<id>[^/#?]+)
player\.twitch\.tv/\?.*?\bchannel=
)
(?P<id>[^/#?]+)
@@
-508,6
+526,9
@@
class TwitchStreamIE(TwitchBaseIE):
}, {
'url': 'https://go.twitch.tv/food',
'only_matching': True,
}, {
'url': 'https://go.twitch.tv/food',
'only_matching': True,
+ }, {
+ 'url': 'https://m.twitch.tv/food',
+ 'only_matching': True,
}]
@classmethod
}]
@classmethod