spaam / svtplay-dl

Small command-line program to download videos from some streaming sites.
https://svtplay-dl.se
MIT License
704 stars 118 forks source link

[SVTplay.se] ERROR: No videos found. Can't find video info. #1312

Closed pythonuser3856 closed 3 years ago

pythonuser3856 commented 3 years ago

svtplay-dl versions: svtplay-dl v2.8 (python code) svtplay-dl snap-shot 20210118 204846 (python code)

Operating system and Python version: python 3.7.4 windows 8.1 64-bit

What is the issue: svtplay-dl has ceased to find videos at svtplay.se ERROR: No videos found. Can't find video info. An example link: https://www.svtplay.se/video/29965534/sparet-av-ett-brott/sparet-av-ett-brott-sasong-1-avsnitt-2

It's a generic failure. Nothing can be downloaded from the library of titles at svtplay.se ( it is still possible to capture a live video streams from SVT channel broadcast at svtplay.se )

Execution trace for the example link: DEBUG [1612361596.952321] e:\svtplaydll\svtplay-dl_sshot_20210118_204846py\svtplay_d\utils getmedia.py/get_media: version: 2.8-11-gd193679 DEBUG [1612361596.9679546] e:\svtplaydll\svtplay-dl_sshot_20210118_204846py\svtplay_dl\service__init.py/init__: service: svtplay DEBUG [1612361596.9679546] e:\svtplaydll\svtplay-dl_sshot_20210118_204846py\svtplay_dl\utils\http.py/request: HTTP getting 'https://www.svtplay.se/video/29965534/sparet-av-ett-brott/sparet-av-ett-brott-sasong-1-avsnitt-2' DEBUG [1612361596.9679546] C:\Program Files\Python37\lib\site-packages\urllib3\connectionpool.py/_new_conn: Starting new HTTPS connection (1): www.svtplay.se:443 DEBUG [1612361597.046087] C:\Program Files\Python37\lib\site-packages\urllib3\connectionpool.py/_make_request: https://www.svtplay.se:443 "GET /video/29965534/sparet-av-ett-brott/sparet-av-ett-brott-sasong-1-avsnitt-2 HTTP/1.1" 200 25988 ERROR [1612361597.061707] e:\svtplaydll\svtplay-dl_sshot_20210118_204846py\svtplay_dl\utils\getmedia.py/get_one_media: No videos found. Can't find video info.

SweDennis commented 3 years ago

Confirmed on : dennis@Lenovo:~$ svtplay-dl --version svtplay-dl 2.8+11.gd193679 dennis@Lenovo:~$ uname -a Linux Lenovo 5.8.0-41-generic #46~20.04.1-Ubuntu SMP Mon Jan 18 17:52:23 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux dennis@Lenovo:~$ python --version Python 3.8.5 dennis@Lenovo:~$

I can't vouch for how generic it is, but it seems "Generic Enough", to be an issue. Some programs that I successfully downloaded just a few days back, now fails instead.

/Dennis

swewebb commented 3 years ago

Confirmed on :

EmmW commented 3 years ago

Same here:

Mac OS 10.14.6

svtplay-dl --version --> svtplay-dl 2.8+11.gd193679

svtplay-dl https://www.svtplay.se/video/29854214/hur-ar-hampus-i-sangen --verbose --> DEBUG [1612382681.255502] /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/svtplay_dl-2.8+11.gd193679-py3.5.egg/svtplay_dl/utils/getmedia.py/get_media: version: 2.8+11.gd193679 DEBUG [1612382681.256561] /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/svtplay_dl-2.8+11.gd193679-py3.5.egg/svtplay_dl/service/init.py/init: service: svtplay DEBUG [1612382681.256617] /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/svtplay_dl-2.8+11.gd193679-py3.5.egg/svtplay_dl/utils/http.py/request: HTTP getting 'https://www.svtplay.se/video/29854214/hur-ar-hampus-i-sangen' DEBUG [1612382681.264401] /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py/_new_conn: Starting new HTTPS connection (1): www.svtplay.se DEBUG [1612382681.915561] /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/connectionpool.py/_make_request: https://www.svtplay.se:443 "GET /video/29854214/hur-ar-hampus-i-sangen HTTP/1.1" 200 24757 ERROR [1612382682.116442] /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/svtplay_dl-2.8+11.gd193679-py3.5.egg/svtplay_dl/utils/getmedia.py/get_one_media: No videos found. Can't find video info.

Seems like svtplay has very recently introduced some new hurdles to the site.

spaam commented 3 years ago

I see the issue too. :) hopefully we will get a fix soon :)

SweDennis commented 3 years ago

"Are we there yet, are we there yet, are we there yet?" Remembering old words from children during car travel ... So ... fixed it yet, fixed it yet, fixed it yet? :-D :-D :-D

/Dennis

P.S.

All said in jest, as I hope all understood, but most importantly, Spaam. Take your time. :-D

plvlnisse commented 3 years ago

Ditto. Same error on downloads with or without an age-limit warning, so it is probably not related to the parental warning interface.

Hipparcoss commented 3 years ago

Hi everyone!

I just want to say that Svtplay-dl still works fine overall. It's just a minor glitch between Svtplay and the program.

Somehow Svtplay has change the name direction towards the moviefile.

I did some digging, very simple, with Firefox's own "Inspect Element" and did find an Indexfile linking the movie's various fomat.

For example the video https://www.svtplay.se/video/29569208/hacksaw-ridge?start=auto

Use "Inspect Element" on the page. Look for a json file with the movie's index number.

Index-json-file

In this file the link to the movie is located.

Inside-Index-json-file

I just copyed the string "https://svt-vod-7i.akamaized.net/d0/se/20210107/5f58cc88-5686-43aa-9859-b301ed002798/hls-ts-avc.m3u8?alt=https%3A%2F%2Fswitcher.cdn.svt.se%2F5f58cc88-5686-43aa-9859-b301ed002798%2Fhls-ts-avc.m3u8" and put it in to Svtplay-dl as usually and it worked fine.

I don't know the code in Svtplay-dl in detail and how it works but I can think that "TECsupport" can fix this quite easeily. Then Svtplay-dl can run once again.

//Hipparcos

stefansundin commented 3 years ago

Hello from Privatkopiera. I fixed it with this code change: https://github.com/stefansundin/privatkopiera/commit/7e6430957235ece6149273e412ac495a8ddf18bd

I am wondering if there's any possible way to convert the numeric id in the URL to the videoSvtPlay. Maybe it is some kind of base-encoding. I tried to search the JavaScript for clues, but didn't find anything. They seem to have some GraphQL API though, somewhere, so maybe we can query that directly for the videoSvtId instead of searching through the source code.

stefansundin commented 3 years ago

Okay, some progress on the GraphQL idea already.

Example: https://www.svtplay.se/video/2520376/pippi-langstrump/pippi-langstrump-sasong-1-avsnitt-1 ID: 2520376

$ curl 'https://api.svt.se/contento/graphql' --data-raw '{"query":"query VideoPage($legacyIds: [Int!]!) { listablesByEscenicId(escenicIds: $legacyIds) { videoSvtId }}", "variables": { "legacyIds": [2520376] }}'
{"data":{"listablesByEscenicId":[{"videoSvtId":"jBDqx98"}]}}

I already released a new version of Privatkopiera, but I will use this the next time it breaks.

fezaland commented 3 years ago

Hi everyone!

I just want to say that Svtplay-dl still works fine overall. It's just a minor glitch between Svtplay and the program.

Somehow Svtplay has change the name direction towards the moviefile.

I did some digging, very simple, with Firefox's own "Inspect Element" and did find an Indexfile linking the movie's various fomat.

For example the video https://www.svtplay.se/video/29569208/hacksaw-ridge?start=auto

Use "Inspect Element" on the page. Look for a json file with the movie's index number.

Index-json-file

In this file the link to the movie is located.

Inside-Index-json-file

I just copyed the string "https://svt-vod-7i.akamaized.net/d0/se/20210107/5f58cc88-5686-43aa-9859-b301ed002798/hls-ts-avc.m3u8?alt=https%3A%2F%2Fswitcher.cdn.svt.se%2F5f58cc88-5686-43aa-9859-b301ed002798%2Fhls-ts-avc.m3u8" and put it in to Svtplay-dl as usually and it worked fine.

I don't know the code in Svtplay-dl in detail and how it works but I can think that "TECsupport" can fix this quite easeily. Then Svtplay-dl can run once again.

//Hipparcos

Hello. Thank You for this solution. However, can You find a way to download subtitle also? For example to this video: https://www.svtplay.se/video/29921422/tunna-bla-linjen/tunna-bla-linjen-sasong-1-avsnitt-4?start=auto

radiant64 commented 3 years ago

Here is a horrible hack that Works For Me, for use only until there's a proper fix.

diff --git a/lib/svtplay_dl/service/svtplay.py b/lib/svtplay_dl/service/svtplay.py
index 70c4552..a475a8b 100644
--- a/lib/svtplay_dl/service/svtplay.py
+++ b/lib/svtplay_dl/service/svtplay.py
@@ -25,6 +25,7 @@ URL_VIDEO_API = "https://api.svt.se/video/"

 class Svtplay(Service, MetadataThumbMixin):
     supported_domains = ["svtplay.se", "svt.se", "beta.svtplay.se", "svtflow.se"]
+    info_search_expr = r"<script id=\"__NEXT_DATA__\" type=\"application\/json\">({.+})<\/script>"

     def get(self):
         parse = urlparse(self.url)
@@ -54,21 +55,30 @@ class Svtplay(Service, MetadataThumbMixin):
             yield from videos
             return

-        match = re.search(r"__svtplay_apollo'] = ({.*});", urldata)
+        match = re.search(Svtplay.info_search_expr, urldata)
         if not match:
             yield ServiceError("Can't find video info.")
             return

         janson = json.loads(match.group(1))
-        self.visibleid = self._get_visibleid(janson)
-        if not self.visibleid:
+        video_data = None
+        vid = None
+        for data_entry in janson["props"]["urqlState"].values():
+            entry = json.loads(data_entry["data"]);
+            for key, data in entry.items():
+                if key == "listablesByEscenicId" and "videoSvtId" in data[0]:
+                    video_data = data[0]
+                    vid = video_data["videoSvtId"]
+                    break
+            if video_data:
+                break
+
+        if not vid and not self.visibleid:
             yield ServiceError("Can't find video id")
             return

-        vid = janson[self.visibleid]["videoSvtId"]
-
-        self.outputfilename(janson)
-        self.extrametadata(janson, self.visibleid)
+        self.outputfilename(video_data)
+        self.extrametadata(video_data)

         res = self.http.get(URL_VIDEO_API + vid)
         try:
@@ -116,14 +126,18 @@ class Svtplay(Service, MetadataThumbMixin):

     def _get_visibleid(self, janson):
         esceni = None
-        for key in janson["ROOT_QUERY"].keys():
-            if "listablesBy" in key:
-                esceni = key
+        for data_entry in janson["props"]["urqlState"].values():
+            entry = json.loads(data_entry["data"]);
+            for key in entry.keys():
+                if "listablesBy" in key:
+                    esceni = entry[key]
+                    break
+            if esceni:
                 break

         if esceni:
             try:
-                return janson["ROOT_QUERY"][esceni][0]["id"]
+                return esceni[0]["id"]
             except IndexError:
                 return None
         else:
@@ -175,7 +189,7 @@ class Svtplay(Service, MetadataThumbMixin):
         if re.search("sista-chansen", parse.path):
             videos = self._last_chance(videos, 1)
         else:
-            match = re.search(r"__svtplay_apollo'] = ({.*});", self.get_urldata())
+            match = re.search(Svtplay.info_search_expr, self.get_urldata())
             if not match:
                 logging.error("Can't find video info.")
                 return
@@ -186,48 +200,47 @@ class Svtplay(Service, MetadataThumbMixin):
                 logging.error("Can't find video id. removed?")
                 return

-            match = re.search(r"__svtplay_apollo'] = ({.*});", self.get_urldata())
+            match = re.search(Svtplay.info_search_expr, self.get_urldata())
             if not match:
                 logging.error("Can't find video info.")
                 return videos
             janson = json.loads(match.group(1))
-            episode = janson[self.visibleid]
-            associatedContent = episode['associatedContent({"include":["season","productionPeriod","clips","upcoming"]})']
+            associatedContent = None
+
+            for json_entry in janson["props"]["urqlState"].values():
+                entry = json.loads(json_entry["data"])
+                for key, data in entry.items():
+                    if "listablesBy" in key and data[0]['associatedContent'][0]['id'] != 'related':
+                        associatedContent = data[0]['associatedContent']
+                        break
+                if associatedContent:
+                    break

-            keys = []
+            collections = []
             videos = []
-            if "urls" in episode:
-                videos.append(janson[episode["urls"]["id"]]["svtplay"])
             for i in associatedContent:
                 if tab:
-                    section = "Selection:{}".format(tab)
-                    if section == i["id"]:
-                        keys.append(section)
+                    if tab == i["id"]:
+                        collections.append(i)
                 else:
-                    if i["id"] == "Selection:upcoming":
+                    if i["id"] == "upcoming":
                         continue
-                    elif self.config.get("include_clips") and "Selection:clips" in i["id"]:
-                        keys.append(i["id"])
-                    elif "Selection:clips" not in i["id"]:
-                        keys.append(i["id"])
-
-            for i in keys:
-                item = None
-                for items in janson[i].keys():
-                    if "items" in items:
-                        item = items
-                        break
-                if item:
-                    for n in janson[i][item]:
-                        epi = janson[janson[n["id"]]["item"]["id"]]
-                        if "variants" in epi:
-                            for z in epi["variants"]:
-                                if janson[janson[z["id"]]["urls"]["id"]]["svtplay"] not in videos:
-                                    videos.append(janson[janson[z["id"]]["urls"]["id"]]["svtplay"])
-                        if janson[epi["urls"]["id"]]["svtplay"] not in videos:
-                            videos.append(janson[epi["urls"]["id"]]["svtplay"])
-                else:
-                    logging.error("Can't find other episodes.")
+                    elif self.config.get("include_clips") and "clips" in i["id"]:
+                        collections.append(i)
+                    elif "clips" not in i["id"]:
+                        collections.append(i)
+
+            if not collections:
+                logging.error("Can't find other episodes.")
+
+            for i in collections:
+                for epi in i["items"]:
+                    if "variants" in epi["item"]:
+                        for variant in epi["item"]["variants"]:
+                            if variant["urls"]["svtplay"] not in videos:
+                                videos.append(variant["urls"]["svtplay"])
+                    if epi["item"]["urls"]["svtplay"] not in videos:
+                        videos.append(epi["item"]["urls"]["svtplay"])

         episodes = [urljoin("http://www.svtplay.se", x) for x in videos]

@@ -253,11 +266,10 @@ class Svtplay(Service, MetadataThumbMixin):
     def outputfilename(self, data):
         name = None
         desc = None
-        pid = data[self.visibleid]["parent"]["id"]

-        name = data[pid]["slug"]
-        other = data[self.visibleid]["slug"]
-        vid = data[self.visibleid]["id"]
+        name = data["parent"]["slug"]
+        other = data["slug"]
+        vid = data["id"]
         id = hashlib.sha256(vid.encode("utf-8")).hexdigest()[:7]

         if name == other:
@@ -267,10 +279,10 @@ class Svtplay(Service, MetadataThumbMixin):
             other = None

         season, episode = self.seasoninfo(data)
-        if "accessibility" in data[self.visibleid]:
-            if data[self.visibleid]["accessibility"] == "AudioDescribed":
+        if "accessibility" in data:
+            if data["accessibility"] == "AudioDescribed":
                 desc = "syntolkat"
-            if data[self.visibleid]["accessibility"] == "SignInterpreted":
+            if data["accessibility"] == "SignInterpreted":
                 desc = "teckentolkat"

         if not other:
@@ -287,14 +299,13 @@ class Svtplay(Service, MetadataThumbMixin):
     def seasoninfo(self, data):
         season, episode = None, None

-        if "episode" not in data[self.visibleid]:
+        if "episode" not in data:
             return season, episode

-        episodeid = data[self.visibleid]["episode"]["id"]
-        if "positionInSeason" not in data[episodeid]:
+        if "positionInSeason" not in data["episode"]:
             return season, episode

-        match = re.search(r"Säsong (\d+) — Avsnitt (\d+)", data[episodeid]["positionInSeason"])
+        match = re.search(r"Säsong (\d+) — Avsnitt (\d+)", data["episode"]["positionInSeason"])
         if not match:
             return season, episode

@@ -303,9 +314,7 @@ class Svtplay(Service, MetadataThumbMixin):

         return season, episode

-    def extrametadata(self, data, visibleid):
-        episode = data[visibleid]
-
+    def extrametadata(self, episode):
         self.output["tvshow"] = self.output["season"] is not None and self.output["episode"] is not None
         if "validFrom" in episode:

@@ -332,10 +341,10 @@ class Svtplay(Service, MetadataThumbMixin):
                 )
             self.output["publishing_datetime"] = int(date)

-        self.output["title_nice"] = data[data[visibleid]["parent"]["id"]]["name"]
+        self.output["title_nice"] = episode["parent"]["name"]

         try:
-            t = data[data[episode["parent"]["id"]]["image"]["id"]]
+            t = episode["parent"]["image"]["id"]
         except KeyError:
             t = ""
         if isinstance(t, dict):
@@ -346,7 +355,7 @@ class Svtplay(Service, MetadataThumbMixin):
             url = t.format(format="large")
             self.output["showthumbnailurl"] = url
         try:
-            t = data[episode["image"]["id"]]
+            t = episode["image"]
         except KeyError:
             t = ""
         if isinstance(t, dict):
@@ -357,8 +366,8 @@ class Svtplay(Service, MetadataThumbMixin):
             url = t.format(format="large")
             self.output["episodethumbnailurl"] = url

-        if "longDescription" in data[episode["parent"]["id"]]:
-            self.output["showdescription"] = data[episode["parent"]["id"]]["longDescription"]
+        if "longDescription" in episode["parent"]:
+            self.output["showdescription"] = episode["parent"]["longDescription"]

         if "longDescription" in episode:
             self.output["episodedescription"] = episode["longDescription"]
pythonuser3856 commented 3 years ago

Confirmed to work for me too. Great effort !

bohelax commented 3 years ago

My backlog of URLs is getting pretty long now.

I had hoped not to get involved in gritty programming details, since I'm not really qualified.

However, I just spent several hours installing Python, Git, and... Finally, I actually managed to clone a local copy of the svtplay-dl master and even build it! (Apparently uselessly)

Please spaam get on it.

To radiant64 (and pythonuser3856): Where can I find a copy of the magic svtplay.py hack?

//BoH

spaam commented 3 years ago

@bohelax i was going to fix it tomorrow and release a new version. With a comment about please get on it for a thing i dont get paid to do on my spare time doesn't really feel great. i guess i should stop having a life and always fix stuff after work :)

EmmW commented 3 years ago

Spaam, your altruism and hard work on svtplay-dl is greatly appreciated by lots of people! Unfortunately not all are aware of the fact that this a non-commercial project that you do in your spare time with zero monetary return, so I think the 'get on it' comment was perhaps meant as encouragement rather than request :-). /Mark

radiant64 commented 3 years ago

To radiant64 (and pythonuser3856): Where can I find a copy of the magic svtplay.py hack?

Nothing magic about it. SVT Play apparently changed up their data format, putting a lot of assumptions made about it in the svtplay-dl parser on their head. What the hack does is dig out the same information as before, without changing the structure of the code.

As for "where"; well, there's a full diff in my comment, that you can use with git apply. But I'd guess you're better off just waiting for the real fix.

anttin2020 commented 3 years ago

@bohelax i was going to fix it tomorrow and release a new version. With a comment about please get on it for a thing i dont get paid to do on my spare time doesn't really feel great. i guess i should stop having a life and always fix stuff after work :)

@spaam I don't think he meant to be unpolite but anyway, please could you make the fix for official version soon, there are some series that are online only for a short while. This is great software but if it does not work, it is not very useful anymore ;)

So keep up the great work and fix this soon, please please :)

Thank you very much!

SweDennis commented 3 years ago

Hi, for those in need of a download, there are always other download programs available, if nothing else, to be used in the mean time. svtplay might well be the easiest to use, and what we're all used to, but it's not the only one. Let @spaam take his time, let it be done right, and let him eat his weekend pizza in peace. :-D

/Dennis

anttin2020 commented 3 years ago

Hi, for those in need of a download, there are always other download programs available, if nothing else, to be used in the mean time. svtplay might well be the easiest to use, and what we're all used to, but it's not the only one. Let @spaam take his time, let it be done right, and let him eat his weekend pizza in peace. :-D

/Dennis

The problem is that other standalone tools are broken too because of this data change as well or do you know some free tool for Windows that currently works for STVPlay.se? :)

But of course weekend pizza comes first :D

SweDennis commented 3 years ago

Hmm, can't say that I do, but youtube-dl works fine on Linux, at least it did to download latest episode of "På Spåret", and just tested something else, but no, haven't tested anything for Windows.

SweDennis commented 3 years ago

@spaam Have you considered setting up some donation system? I can assure you that you would at least get One payment, i.e. me. Just a thought, one that I perhaps think you have already considered, but here's a reminder ... :-D

drhexgit commented 3 years ago

This one worked for me: https://svtplay-dl.se/donate/

pythonuser3856 commented 3 years ago

GitHub describes itself as "...GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere..."

There are a mix of people in this particular list, pure users of this very useful application but also some who apparently also take interest in the tech behind the scene, collaboration or load-sharing in work with svtplay-dl is always an option, right ? In this thread alone there is a trouble-shooting analysis and one solution (hack or not) which addresses and resolves the changes in the web-site data structure. To me that is ad-hoc collaboration.

SweDennis commented 3 years ago

This one worked for me: https://svtplay-dl.se/donate/

Many thanks @drhexgit , hadn't seen that.

/Dennis

tubalainen commented 3 years ago

To all people out there that cannot appreciate open source - please move on and leave the non-paid, free and voluntary community alone.

It is VERY rude to start dictating a code owner to "get on it" when you are not paying for the software. This is why many talented people like @spaam just resigns and stop maintaining their code.

Please don't be that guy. Thanks. Encourage. support and give "pepps" to the coders - and if you have the knowhow - contribute!

@spaam will get a donation from me this Sunday, enjoy the beer/coffee/pizza mate! <3 image

EmmW commented 3 years ago

youtube-dl (after the most recent update) works fine on svtplay for me too, but unfortunately neither svtplay-dl nor youtube-dl works on urplay yet (at least not when I've tried).

My temporary workaround has been to use the extension The VideoDownload Helper in Firefox, getting the "hidden" mkv file address from the urplay page in question via the command Details, and then paste that link into the app WonderShare Uniconverter (you can of course download directly via The VideoDownload Helper-extension, but for me at least that has sometimes caused "jerky/skittish" video, hence the preferred use of the WonderShare Uniconverter in stead :-).

anttin2020 commented 3 years ago

@EmmW thank you VERY much, that is even more powerful than svtplay-dl and works perfectly for my purposes! :)

bohelax commented 3 years ago

@bohelax i was going to fix it tomorrow and release a new version. With a comment about please get on it for a thing i dont get paid to do on my spare time doesn't really feel great. i guess i should stop having a life and always fix stuff after work :)

I am truly sorry @spaam that you took my comment in a way I certainly didn't intend it to. I have expressed great appreciation for your fine work many times earlier, and will continue to do so.

The reason I commented at all was that the comment thread seemed to have been idle for some time. I simply did not know if anything was going on towards resolving the issue.

I'm also well aware that projects such as this one on GitHub is performed by enthusiasts pro bono, and I will investigate if one of the 'donate' channels are available to me. If I had the capability of actively contributing to the project code I would gladly do so, but that unfortunately is not the case.

As far as I'm concerned svtplay-dl is truly a working miracle. //BoH

SweDennis commented 3 years ago

youtube-dl works on urplay as of now, just grabbed the latest source.

EmmW commented 3 years ago

@SweDennis That's odd, I believe I am already using the latest version of youtube-dl (when I run "brew upgrade youtube-dl" in Terminal I get back "Warning: youtube-dl 2021.2.4.1 already installed"), and when I run e.g. "youtube-dl https://urplay.se/program/210368-bildningsbyran-tanka-mot-strommen-nikola-tesla-kriget-om-elen" I get back the following error message:

ERROR: Unable to download webpage: <urlopen error [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:645)> (caused by URLError(SSLError(1, '[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:645)'),))

Could it be that you perhaps have an even later not-yet-official upgraded version of youtube-dl?

SweDennis commented 3 years ago

Don't know. :) I update automatically from github, both with svtplay-dl and youtube-dl, and others. git pull "package name" then make; sudo make install : For youtube-dl and sudo python3 setup.py install : For svtplay-dl

So no, I don't really keep track of my versions, they keep track of themselves. :-D

/Dennis