mirror of
https://github.com/spaam/svtplay-dl.git
synced 2024-11-27 21:54:17 +01:00
parent
f807e67425
commit
3a788bcfae
@ -8,12 +8,14 @@ from __future__ import absolute_import
|
|||||||
import re
|
import re
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import copy
|
||||||
|
|
||||||
from svtplay_dl.utils.urllib import urlparse, quote_plus
|
from svtplay_dl.utils.urllib import urlparse, quote_plus
|
||||||
from svtplay_dl.service import Service
|
from svtplay_dl.service import Service
|
||||||
from svtplay_dl.utils import filenamify
|
from svtplay_dl.utils import filenamify
|
||||||
from svtplay_dl.log import log
|
from svtplay_dl.log import log
|
||||||
from svtplay_dl.fetcher.hls import hlsparse
|
from svtplay_dl.fetcher.hls import hlsparse
|
||||||
|
from svtplay_dl.fetcher.http import HTTP
|
||||||
from svtplay_dl.error import ServiceError
|
from svtplay_dl.error import ServiceError
|
||||||
|
|
||||||
|
|
||||||
@ -38,7 +40,7 @@ class Twitch(Service):
|
|||||||
# are usually two characters, but may have a country suffix as well (e.g.
|
# are usually two characters, but may have a country suffix as well (e.g.
|
||||||
# zh-tw, zh-cn and pt-br.
|
# zh-tw, zh-cn and pt-br.
|
||||||
supported_domains_re = [
|
supported_domains_re = [
|
||||||
r'^(?:(?:[a-z]{2}-)?[a-z]{2}\.)?(www\.)?twitch\.tv$',
|
r'^(?:(?:[a-z]{2}-)?[a-z]{2}\.)?(www\.|clips\.)?twitch\.tv$',
|
||||||
]
|
]
|
||||||
|
|
||||||
api_base_url = 'https://api.twitch.tv'
|
api_base_url = 'https://api.twitch.tv'
|
||||||
@ -53,7 +55,10 @@ class Twitch(Service):
|
|||||||
|
|
||||||
match = re.match(r'/(\w+)/([bcv])/(\d+)', urlp.path)
|
match = re.match(r'/(\w+)/([bcv])/(\d+)', urlp.path)
|
||||||
if not match:
|
if not match:
|
||||||
data = self._get_channel(self.options, urlp)
|
if re.search("clips.twitch.tv", urlp.netloc):
|
||||||
|
data = self._get_clips(self.options)
|
||||||
|
else:
|
||||||
|
data = self._get_channel(self.options, urlp)
|
||||||
else:
|
else:
|
||||||
if match.group(2) in ["b", "c"]:
|
if match.group(2) in ["b", "c"]:
|
||||||
yield ServiceError("This twitch video type is unsupported")
|
yield ServiceError("This twitch video type is unsupported")
|
||||||
@ -158,3 +163,21 @@ class Twitch(Service):
|
|||||||
streams = hlsparse(options, data, hls_url)
|
streams = hlsparse(options, data, hls_url)
|
||||||
for n in list(streams.keys()):
|
for n in list(streams.keys()):
|
||||||
yield streams[n]
|
yield streams[n]
|
||||||
|
|
||||||
|
def _get_clips(self, options):
|
||||||
|
match = re.search("quality_options: (\[[^\]]+\])", self.get_urldata())
|
||||||
|
if not match:
|
||||||
|
yield ServiceError("Can't find the video clip")
|
||||||
|
return
|
||||||
|
if options.output_auto:
|
||||||
|
name = re.search('slug: "([^"]+)"', self.get_urldata()).group(1)
|
||||||
|
brodcaster = re.search('broadcaster_login: "([^"]+)"', self.get_urldata()).group(1)
|
||||||
|
name = "twitch-%s-%s" % (brodcaster, name)
|
||||||
|
directory = os.path.dirname(options.output)
|
||||||
|
if os.path.isdir(directory):
|
||||||
|
name = os.path.join(directory, name)
|
||||||
|
options.output = name
|
||||||
|
|
||||||
|
dataj = json.loads(match.group(1))
|
||||||
|
for i in dataj:
|
||||||
|
yield HTTP(copy.copy(options), i["source"], i["quality"])
|
||||||
|
Loading…
Reference in New Issue
Block a user