mirror of
https://github.com/spaam/svtplay-dl.git
synced 2024-11-24 04:05:39 +01:00
parent
bdc646b885
commit
a3406c8c53
@ -9,29 +9,36 @@ from svtplay_dl.log import log
|
|||||||
from svtplay_dl.fetcher.dash import dashparse
|
from svtplay_dl.fetcher.dash import dashparse
|
||||||
from svtplay_dl.subtitle import subtitle
|
from svtplay_dl.subtitle import subtitle
|
||||||
from svtplay_dl.utils import filenamify
|
from svtplay_dl.utils import filenamify
|
||||||
from svtplay_dl.utils.urllib import urljoin
|
from svtplay_dl.utils.urllib import urljoin, urlparse
|
||||||
from svtplay_dl.error import ServiceError
|
from svtplay_dl.error import ServiceError
|
||||||
|
|
||||||
|
|
||||||
class Cmore(Service):
|
class Cmore(Service):
|
||||||
supported_domains = ['www.cmore.se']
|
supported_domains = ['www.cmore.se', 'www.cmore.dk', 'www.cmore.no', 'www.cmore.fi']
|
||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
if not self.options.username or not self.options.password:
|
if not self.options.username or not self.options.password:
|
||||||
yield ServiceError("You need username and password to download things from this site.")
|
yield ServiceError("You need username and password to download things from this site.")
|
||||||
return
|
return
|
||||||
|
|
||||||
token, message = self._login()
|
token, message = self._login()
|
||||||
if not token:
|
if not token:
|
||||||
yield ServiceError(message)
|
yield ServiceError(message)
|
||||||
return
|
return
|
||||||
|
|
||||||
res = self.http.get(self.url)
|
res = self.http.get(self.url)
|
||||||
match = re.search('data-asset-id="([^"]+)"', res.text)
|
match = re.search('data-asset-id="([^"]+)"', res.text)
|
||||||
if not match:
|
if not match:
|
||||||
yield ServiceError("Can't find video id")
|
yield ServiceError("Can't find video id")
|
||||||
return
|
return
|
||||||
url = "https://restapi.cmore.se/api/tve_web/asset/{0}/play.json?protocol=VUDASH".format(match.group(1))
|
|
||||||
|
tld = self._gettld()
|
||||||
|
url = "https://restapi.cmore.{0}/api/tve_web/asset/{1}/play.json?protocol=VUDASH".format(tld, match.group(1))
|
||||||
res = self.http.get(url, headers={"authorization": "Bearer {0}".format(token)})
|
res = self.http.get(url, headers={"authorization": "Bearer {0}".format(token)})
|
||||||
janson = res.json()
|
janson = res.json()
|
||||||
|
if "error" in janson:
|
||||||
|
yield ServiceError("This video is geoblocked")
|
||||||
|
return
|
||||||
|
|
||||||
if self.options.output_auto:
|
if self.options.output_auto:
|
||||||
directory = os.path.dirname(self.options.output)
|
directory = os.path.dirname(self.options.output)
|
||||||
@ -74,13 +81,23 @@ class Cmore(Service):
|
|||||||
yield streams[n]
|
yield streams[n]
|
||||||
|
|
||||||
def _autoname(self, vid):
|
def _autoname(self, vid):
|
||||||
url = "https://restapi.cmore.se/api/tve_web/asset/{0}.json?expand=metadata".format(vid)
|
url = "https://restapi.cmore.{0}/api/tve_web/asset/{1}.json?expand=metadata".format(self._gettld(), vid)
|
||||||
res = self.http.get(url)
|
res = self.http.get(url)
|
||||||
janson = res.json()["asset"]["metadata"]
|
janson = res.json()["asset"]["metadata"]
|
||||||
if isinstance(janson["title"], list):
|
if isinstance(janson["title"], list):
|
||||||
for i in janson["title"]:
|
for i in janson["title"]:
|
||||||
if i["@xml:lang"] == "sv_SE": # if we add other .tld, we might need to change this.
|
if self._gettld() == "se":
|
||||||
name = i["$"]
|
if i["@xml:lang"] == "sv_SE":
|
||||||
|
name = i["$"]
|
||||||
|
elif self._gettld() == "dk":
|
||||||
|
if i["@xml:lang"] == "da_DK":
|
||||||
|
name = i["$"]
|
||||||
|
elif self._gettld() == "no":
|
||||||
|
if i["@xml:lang"] == "nb_NO":
|
||||||
|
name = i["$"]
|
||||||
|
elif self._gettld() == "fi":
|
||||||
|
if i["@xml:lang"] == "fi_FI":
|
||||||
|
name = i["$"]
|
||||||
else:
|
else:
|
||||||
name = janson["title"]["$"]
|
name = janson["title"]["$"]
|
||||||
|
|
||||||
@ -99,7 +116,7 @@ class Cmore(Service):
|
|||||||
res = self.http.get(self.url)
|
res = self.http.get(self.url)
|
||||||
tags = re.findall('<a class="card__link" href="([^"]+)"', res.text)
|
tags = re.findall('<a class="card__link" href="([^"]+)"', res.text)
|
||||||
for i in tags:
|
for i in tags:
|
||||||
url = urljoin("https://www.cmore.se/", i)
|
url = urljoin("https://www.cmore.{}/".format(self._gettld()), i)
|
||||||
if url not in episodes:
|
if url not in episodes:
|
||||||
episodes.append(url)
|
episodes.append(url)
|
||||||
|
|
||||||
@ -107,15 +124,24 @@ class Cmore(Service):
|
|||||||
return sorted(episodes[-options.all_last:])
|
return sorted(episodes[-options.all_last:])
|
||||||
return sorted(episodes)
|
return sorted(episodes)
|
||||||
|
|
||||||
|
def _gettld(self):
|
||||||
|
print(self.url)
|
||||||
|
if isinstance(self.url, list):
|
||||||
|
parse = urlparse(self.url[0])
|
||||||
|
else:
|
||||||
|
parse = urlparse(self.url)
|
||||||
|
return re.search('\.(\w{2})$', parse.netloc).group(1)
|
||||||
|
|
||||||
def _login(self):
|
def _login(self):
|
||||||
url = "https://www.cmore.se/login"
|
tld = self._gettld()
|
||||||
|
url = "https://www.cmore.{}/login".format(tld)
|
||||||
res = self.http.get(url, cookies=self.cookies)
|
res = self.http.get(url, cookies=self.cookies)
|
||||||
if self.options.cmoreoperator:
|
if self.options.cmoreoperator:
|
||||||
post = {"username": self.options.username, "password": self.options.password,
|
post = {"username": self.options.username, "password": self.options.password,
|
||||||
"operator": self.options.cmoreoperator, "country_code": "se"}
|
"operator": self.options.cmoreoperator, "country_code": tld}
|
||||||
else:
|
else:
|
||||||
post = {"username": self.options.username, "password": self.options.password}
|
post = {"username": self.options.username, "password": self.options.password}
|
||||||
res = self.http.post("https://account.cmore.se/session?client=cmore-web-prod", json=post, cookies=self.cookies)
|
res = self.http.post("https://account.cmore.{}/session?client=cmore-web-prod".format(tld), json=post, cookies=self.cookies)
|
||||||
if res.status_code >= 400:
|
if res.status_code >= 400:
|
||||||
return None, "Wrong username or password"
|
return None, "Wrong username or password"
|
||||||
janson = res.json()
|
janson = res.json()
|
||||||
@ -123,6 +149,6 @@ class Cmore(Service):
|
|||||||
return token, None
|
return token, None
|
||||||
|
|
||||||
def operatorlist(self):
|
def operatorlist(self):
|
||||||
res = self.http.get("https://tve.cmore.se/country/se/operator?client=cmore-web")
|
res = self.http.get("https://tve.cmore.se/country/{0}/operator?client=cmore-web".format(self._gettld()))
|
||||||
for i in res.json()["data"]["operators"]:
|
for i in res.json()["data"]["operators"]:
|
||||||
print("operator: '{0}'".format(i["name"].lower()))
|
print("operator: '{0}'".format(i["name"].lower()))
|
||||||
|
Loading…
Reference in New Issue
Block a user