You do know that the JWT has a very limited lifetime (just 2 minutes) and probably needs to be refreshed with the refresh token handed out after login? That would at least be an explanation for the error response you got.
You've stripped the refresh workflow from the original service script though...
To check the payload of a JWT you can use the site jwt.io (or base64-decode the second part of the JWT).
+ Reply to Thread
Results 571 to 585 of 585
-
-
I've been having some trouble downloading from VTMGo, even though it has worked for over a year.
Microsoft Windows [Version 10.0.26200.8037]
(c) Microsoft Corporation. Alle rechten voorbehouden.
D:\Film en Series\DRM 2>venv\Scripts\activate.bat
(venv) D:\Film en Series\DRM 2>cd widefrog
(venv) D:\Film en Series\DRM 2\Widefrog>python widefrog.py "https://www.vtmgo.be/vtmgo/afspelen/7c0ac9e3-6c1a-4175-b9d5-f63f0f0c562d" --debug
[INFO] Current app version: 3.2.0
[INFO] Running on: windows/64bit/python 3.12.3
[INFO] Starting the service initialization stage.
[INFO] Current progress: [1/1]
[INFO] Starting the collections extraction stage.
[INFO] Current progress: [1/1]
[INFO] Starting the media data extraction stage.
Traceback (most recent call last):
File "D:\Film en Series\DRM 2\Widefrog\widefrog.py", line 124, in <module>
main_service.run_service(response)
File "D:\Film en Series\DRM 2\Widefrog\utils\main_service.py", line 442, in run_service
dwn_cmds, failed_cmds, proc_cmds = main_service.get_download_commands_parallel(demo_u rls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^
File "D:\Film en Series\DRM 2\Widefrog\utils\main_service.py", line 395, in get_download_commands_parallel
success, fail, proc = future.result()
^^^^^^^^^^^^^^^
File "C:\Python312\Lib\concurrent\futures\_base.py" , line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "C:\Python312\Lib\concurrent\futures\_base.py" , line 401, in __get_result
raise self._exception
File "C:\Python312\Lib\concurrent\futures\thread.py ", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Film en Series\DRM 2\Widefrog\utils\main_service.py", line 281, in get_download_commands
raise e
File "D:\Film en Series\DRM 2\Widefrog\utils\main_service.py", line 266, in get_download_commands
dl_cmds, pr_cmds = main_service.get_download_command(service, source_element)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^
File "D:\Film en Series\DRM 2\Widefrog\utils\main_service.py", line 84, in get_download_command
raise e
File "D:\Film en Series\DRM 2\Widefrog\utils\main_service.py", line 63, in get_download_command
manifest, pssh, additional = service.get_video_data(source_element)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Film en Series\DRM 2\Widefrog\services\vtmgo_be.py", line 125, in get_video_data
raise CustomException(ERR_MSG.format(
utils.structs.CustomException: [USER_ERROR]/[APP_ERROR] Failed to download: https://www.vtmgo.be/vtmgo/afspelen/7c0ac9e3-6c1a-4175-b9d5-f63f0f0c562d. Reason: This content is no longer available or refresh the site cookies or VPN issues (Belgium). Solution: Do not attempt to download it or sign into your account using Firefox and play a random video or fix your VPN. If it persists then debug the service.
(venv) D:\Film en Series\DRM 2\Widefrog>
I'm using Firefox to watch the video before I even open cmd, that's how it always worked in the past to make sure it picks up the cookies.Last edited by Kevste; 25th Mar 2026 at 02:17.
-
I am using the widefrog.exe (widefrog_v3_2_0_windows) file to download from VTMGo. This worked well but recently I also experienced something strange after cookie updates. Now I get the following error :
[USER_ERROR] Failed to download: from vtmgo_be. Reason: Need account for this service. Solution: Sign into your account using Firefox.
Although the video plays in firefox, widefrog fails. I think that something has been changed related to DPG media and the way the login details are stored. -
So out of curiosity, is Joyn.de working for other people?
I tried to debug it preperly a few weeks ago, but while I'm certainly not new to coding (I've worked mainly with C++), I am new to Pyhon (not an issue - it's just logic), and web (more of an issue - a lot of alien concepts). I concluded Joyn changed the login flow and I needed to start on a simpler project. Seems I was wrong and for some it works? Or is it only working when you hard-code the token copied from a real browser login, as opposed to the "not signed in" token? I tried and failed to locate the latter...
I have read elsewhere that 1080p is possible with L3, so it may have been choice of content (e.g. https://www.joyn.de/serien/kuestenwache/17-21-hexenloch) which limited the resolution, or possibly that my "fix" was based on the token used when you don't log in.
(I'm not expecting a fix or a download. I got 540p for the things I wanted from Joyn (it wasn't just this), which may be all that's on offer anyway, at least with my Android Studio L3 cert. My aim is to get to the point of writing my own scripts, so more, it's for my education
.)
Last edited by Hutrx; 30th Mar 2026 at 02:26.
-
Joyn works for me, but I use a cached token + refresh token workflow, and don't use widefrog. I can't tell you if they changed the login flow.
For 1080p you'll need a valid paid subscription; I've once tested it and wasn't able to download 1080p material then, but L3 should suffice. -
Thanks for taking the trouble to respond. When it comes to Widefrog, I've taken the view that it's abandonware, and it's up to the people that want services to work to fix them. And really I don't see why I can't fix it given time (which is in short supply right now anyway), and if I fix it, I'll post the solution.
But it sounds like I'm already getting as good as I can. I am unable to subscribe anyway, as they've rejected my payment, I guess based on billing address (I learn German, but I don't live in D-A-CH).
In practice, I've found most of what I can't get is available elsewhere at 1080p, if you know where to look... -
Joyns own Stuff is 1080p with L3 but external stuff like FBI, NCIS etc is 1024/1280 browser only, you need the TV endpoint for 1080p but then you need L1 or PlayReady.
-
Thanks! It's really their own stuff I'm after anyway. There's not much need for anyone to download the FBI stuff themselves, and it's not really what I'm after, but useful to know it wouldn't work...
German TV helps me learn German, and fixing/writing a downloader will help me learn web, which is a huge gap in my knowledge. So with something like this...
https://www.joyn.de/serien/ein-hof-zum-verlieben
...which is their own and new, I have a feeling that it looks like 1080p in Brave (I don't even need VPN to play it), although that's by eye, of course.
I am wondering if for someone like me (can write code, but knows nothing about the web), fixing Widefrog isn't the right thing for me to do. The real requirement is to download from Joyn at the best resultion possible with the cert I have, and I might learn more with a dedicated script anyway, which could use a cached token, just as others do.
Thanks for your hints
Last edited by Hutrx; 30th Mar 2026 at 08:34.
-
Actually, could I just ask one minor thing on this. You say there's a separate TV endpoint that needs L1 / PlayReady, and of course there is a web endpoint. Do you need to use the TV endpoint for all 1080p but the level or protection changes depending on the content? Or is it 1080p in the browser if it's theirs?
I think you meant the latter, but I wanted to check. I have not paid, but I think for that show I sent, I am getting better than 540p, but hard to be sure how much better.
Thanks again
-
If its in 1080p in browser then its L3 if you can only get 1024/1280 its still L3 but 1280/1080p is L1 (depends on the series sometimes 1280 is available in browser but mostly not for licensed stuff like FBI/NCIS and so on).
I don't have premium at the moment so i cant test
-
is this project still being maintained, i have issues understanding how a nba/wnba manifest url works. this is a vod link "https://lpnba.akamaized.net/vod-pz/p/hls-wvpr/NBA_65E9AAF5A56D5CB78B8E5EEC632A995862F7AC00/v0-121.m3u8?addUserInfo=1&sessionId=e8d4482e-485f-4c7e-8968-5a3035dbdade&hdnts=exp=1776310655~acl=/*~hmac=a065a7a26769a8fb4861a38996a7e5ec4f85b453513 4bfb32bfe0ddee3bf8426" which works and shows the segment playlist but this live link "https://lpnba.akamaized.net/live-pz/p/hls-wvpr/e1022690014e1000784/v0-121.m3u8?addUserInfo=1&start=2026-04-13T23:14:00Z&end=2026-04-14T03:45:00Z&sessionId=0a2f87ff-5466-4dea-8568-f4791973fba3&hdnts=exp=1776155486~acl=/*~hmac=f1371562b2659cd8038be75aae906bae4de77a76269 14b6121924d343522157d" will give a 200 success then redirect to the main nanifest playlist link instead of giving the segment playlist. i think it has something to do with the missing parameters, if you would notice the ids are different for vod NBA_65E9AAF5A56D5CB78B8E5EEC632A995862F7AC00 and for live e1022690014e1000784 so possibly how they correspond with thier url parameters is different as well. is there anyone on this project who has any kind of knowledge on how this whole thing works?
-
do you understand how the url works, i found a way to get the pssh
headers = {
"authorizationtoken": "AuthToken1fZJRb9sgFIV_Tf0yxcLYYHjwg9WuTZdlk7J0XZ4 mAtcJqg0WYLferx9Om1Wduknogs79zkUcUQ9Kg5FQHUPo_UVeX-DruBy0kzaHXrgwpb2zSqRmL9Iw5rK1g0ql7SKV3Ho_gPvL64P_ j2VmX1F5hE749KlrvRV9at0hqo8-FowQidupaAUm6DDFo2yF7ua-ER1UhwF8-KmgEUMbkq19ALOdeqhuZj3ZghEm3KrqDFzBqCWciHvYJ3Xb2kd QZ8z_4e48uGh7O72W0g6ncW_1q-f9Xc8GRNtVBzDg4sVGDRHy70fQaemst014CeocAptDoP8Iwdn2 JYQP8-ikHsLROv1LBG3NWviHKs9ZVnKGUEkYJQXPKKWEEs4xK3PO5m6G KcszlDFMCpxxWhQlI5xkhKBipgpWkJJTRjCmnOQUxz5iycenXj vwX02VlSWLNkyy5NKBCKCeRYoZYVFcwXQzaFU1EpgkoBaSM7ko 9mWzYCDQgktJJBUlR6JIluv68tuyxoRWborvbjY_1moMd_h4_U kICDuQn79_GXdqsyrVfkTLbLfaoiZ-P_Ub",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
"x-mk-signature": "eyJzaWduZWRLZXkiOiJleUpRZFdKc2FXTkxaWGtpT2lJcmJ6a EhhalI2VGxBNFdIQnJhamh3U1RSd05sTldXbXAxU2psRE0weGF TR3BsYTNaNVFUWXpPVE52UFNJc0lrVjRjR2x5WlhNaU9qRTNOe lkwTkRrd09UZ3NJbE5wWjI1aGRIVnlaU0k2SW05NFEyVXlhM0o yYUVaelpERnpOelF2VERreU1FdERPV0ZwYVZoNlJHWlRZWE5VT VZvNU4xaHdaa2xwYms0MVl6ZzFiVlp2YmtnM2FFeDFiRkIxUzF KdGRITkVlakZqTTNGamFIQkZkVkIyTW0xb2MwSlJQVDBpTENKQ mRYUm9iM0pwZW1GMGFXOXVWRzlyWlc0aU9pSkJkWFJvVkc5clp XNHhabHBLVW1JNWMyZEdTVlpmVkdZd2VYaGpURmxaU0dwM1p6b FhkVlJhWkd4ck4wb3dXRm8wYlVGMFkwcHhaekJYV1V4bVpYSjR PVTl0TVZka2RXdHViMmR6TnpsNmExVmpWVkU1UzJjMVJsRklWV kJ2WDFWV1pWZ3RSSEoxUW5rd2EzcGhTRmh5WjNkd1lqSjZVM0Z TYlV3NVNYYzFja3N4WnpCeGJEZFRTMVl6U0c5ZloxQjJURFkwV UY5cU1sWnRXREZHTldoRk56UTVTMnh5ZGxKV09XRjBNR2h4Ynp ndFJtOTNVV2xrZFhCaFFWVnROa1JFUm04eWVVWTNkV0V0UlZJe FZXaDNSamd0UzIxblJWVk5ZbXR4TVRsQlRFOWtaWEZvZFZwcU0 xcG5hRVZ0TTB0eWNVUkdla0p4UTFkamFVaDJXVW96V0dJeWEyU lJXamg2WHpSbE5EaDFSMmczVHpjeVZ6Qm5ObTVqVjE4eGNTMW1 PVmhqT0VkU1RuUldRbnBFWnpSelZrZEVVa2g1TnpCbVVXRmxiW E4wTURFMFEyVnZZMEZ3ZEVSdlVEaEpkMlJ1TWtwWlVWQTRMV2x yU0hOTVVrOTJNVXhDUnpOT1YzWnBTRXR6T1ZwV2JrdEhWVVZyV 1VwUldGQkxTMWRGUlhNMGVFc3pVRTgxYlRaSFMyTnplbXhFUms xRGNIaDRWMmhSYkVrMWVHdG9TMEpwY0dkd1YydEtTbFJTYWtOd GJrOVJWWGg2TldsNVkyVnVXR3AyZDFnd01sWnNVMWRNVG10NWV UVk9TMEpEUzBObFVsbHZXbGxXUm1OM1dGRjZZVVpWTVVWd1oyd HZRbUZUVFRkcmJ6bHRWM3BaUTBSUloydDBTa3BDVld4U05rcEp iSFYyTmpoMGRYbDRiMUpYWW05eWRtSnFXVjh4Ylc5TlpGOW9OR jlWYTBsRFJIVlJiamM1WDBkWVpIRnplWEpXWm10VVRHSk1abUZ 2YVZvdFVGOVZZaUo5Iiwic2lnbmVkUmVxdWVzdCI6eyJzaWduZ WRKc29uIjoiZXlKdElqb2lSMFZVSWl3aWNYTWlPbnNpWVdSa1Z YTmxja2x1Wm04aU9pSXhJaXdpYzNSaGNuUWlPaUpNU1ZaRklpd 2laVzVrSWpvaVJVNUVJaXdpZG5CdGRYUmxJam9pTUNJc0lsTjB ZWFJsSWpvaVUwVWlMQ0pRYjNOMFlXeERiMlJsSWpvaU1DSXNJb HBwY0NJNklqQWlMQ0pNWVhSTWIyNW5VbUZrYVhWeklqb2lMVEk wTGpZMU9qSTFMamt4SWl3aVNWTlBNekUyTmlJNklrSlhJaXdpY zJWemMybHZia2xrSWpvaVpESmxNRFJrTTJJdE5HTmxNaTAwWWp nMkxUZzJNMll0TlRNeU1UQmhZVEl4TkRWaUlpd2lhVzVOZFd4M GFYWnBaWGNpT2lKbVlXeHpaU0lzSW1Ga2N5STZJbkJ5SWl3aVg yWjNYM1pqYVdReUlqb2lZWFZoWkdOeGNXVXRaMmhuY3kxaFptU jJMV3RzZEhFdE5XTmxjWFUxT1RZMGJYVnBJaXdpWDJaM1gyZGt jSElpT2lJd0lpd2lYMlozWDJka2NISmZZMjl1YzJWdWRDSTZJa UlzSWw5bWQxOTFjMTl3Y21sMllXTjVJam9pTVMwdExTSXNJbDl tZDE5cGMxOXNZWFFpT2lJeElpd2lYMmx6WDJ4aGRDSTZJakVpT ENKZlpuZGZZMjl2YTJsbFgyTnZibk5sYm5RaU9pSXhJaXdpWjN Cd0lqb2lJaXdpWjNCd1gzTnBaQ0k2SWlJc0lsOW1kMTlqYjI5c mFXVWlPaUl3SWl3aVVISnZjR1Z5ZEhsZlRtRnRaU0k2SW01aVl UcDNaV0lpTENKRVpYWnBZMlZmVG1GdFpTSTZJa1JsYzJ0MGIzQ XJWMlZpSWl3aWFYTk1iMmRuWldSSmJpSTZJbVpoYkhObElpd2l aR1JwWkNJNklpSXNJbU5wWVcwaU9pSWlMQ0pmWm5kZllXVWlPa UprTkRGa09HTmtPVGhtTURCaU1qQTBaVGs0TURBNU9UaGxZMlk 0TkRJM1pTSXNJbDltZDE5b1gzVnpaWEpmWVdkbGJuUWlPaUpOY jNwcGJHeGhKVEpHTlM0d0pUSXdLRmRwYm1SdmQzTWxNakJPVkN VeU1ERXdMakFsTTBJbE1qQlhhVzQyTkNVelFpVXlNSGcyTkNrb E1qQkJjSEJzWlZkbFlrdHBkQ1V5UmpVek55NHpOaVV5TUNoTFN GUk5UQ1V5UXlVeU1HeHBhMlVsTWpCSFpXTnJieWtsTWpCRGFIS nZiV1VsTWtZeE5EY3VNQzR3TGpBbE1qQlRZV1poY21rbE1rWTF NemN1TXpZaUxDSmtZV2t0WkdWaWRXY2lPaUptWVd4elpTSXNJb TkyY0ZOcmRTSTZJbTV2VDNad0lpd2lWMlZpZG1sbGR5STZJbVp oYkhObElpd2lVR0ZuWlY5T1lXMWxJam9pYm1KaE9uZGhkR05vT 25acFpHVnZMWEJzWVhsaVlXTnJJaXdpVTJsMFpWOVRaV04wYVc 5dUlqb2libUpoT25kaGRHTm9JaXdpY0d4aGRHWnZjbTBpT2lKM 1pXSWlMQ0oyWlhKemFXOXVJam9pTWk0eE9DNHdJaXdpWjJWMFJ HVjJhV05sVkhsd1pTSTZJa1JGVTB0VVQxQWlMQ0prWlhacFkyV jBlWEJsSWpvaVRVWmZVRjlYWldKRGFISnZiV1VpZlgwPSIsInN pZ25hdHVyZSI6IjB0U011R3AxQ01ISXFNWlR2UHp0SXhHTDZvU 3pPaUM4Q2Yxd0V5bC9WME9lMnVtUzJKelZnNGF3Y0NaYVVQWW5 MY3g0L3o3bllqK0Vxb01iVmFRRUNRPT0ifX0="
}
url = "https://lpnba.akamaized.net/live-pz/p/hls-wvpr/e0022492658e1001393/v0-121.m3u8?addUserInfo=1&start=LIVE&end=END&vpmute=0 &State=SE&PostalCode=0&Zip=0&LatLongRadius=-24.65%3A25.91&ISO3166=BW&sessionId=d2e04d3b-4ce2-4b86-863f-53210aa2145b&inMultiview=false&ads=pr&_fw_vcid2=au adcqqe-ghgs-afdv-kltq-5cequ5964mui&_fw_gdpr=0&_fw_gdpr_consent=&_fw_us_p rivacy=1---&_fw_is_lat=1&_is_lat=1&_fw_cookie_consent=1&gpp=& gpp_sid=&_fw_cookie=0&Property_Name=nba%3Aweb&Devi ce_Name=Desktop%2BWeb&isLoggedIn=false&ddid=&ciam= &_fw_ae=d41d8cd98f00b204e9800998ecf8427e&_fw_h_use r_agent=Mozilla%252F5.0%2520(Windows%2520NT%252010 .0%253B%2520Win64%253B%2520x64)%2520AppleWebKit%25 2F537.36%2520(KHTML%252C%2520like%2520Gecko)%2520C hrome%252F147.0.0.0%2520Safari%252F537.36&dai-debug=false&ovpSku=noOvp&Webview=false&Page_Name=n ba%3Awatch%3Avideo-playback&Site_Section=nba%3Awatch&hdnts=exp%3D1776 383912~acl%3D%2F*~hmac%3D9e9bc47e5ecb1fcd364e0c75e ec33872b1fbff5328b302969f6dd22c0cdb6689&platform=w eb&version=2.18.0&getDeviceType=DESKTOP&devicetype =MF_P_WebChrome"
response = requests.get(url, headers=headers, timeout=60)
but its still a challenge understanding how the headers are obtained and how to build the url
Similar Threads
-
Batch IMDB Image Downloader
By Jay123210599 in forum ComputerReplies: 3Last Post: 11th Jan 2024, 12:02 -
Help downloading DRM protected content
By edenshapira in forum Video Streaming DownloadingReplies: 0Last Post: 28th Oct 2023, 14:59 -
Downloading DRM protected content from mewatch.sg
By notred in forum Video Streaming DownloadingReplies: 4Last Post: 25th Nov 2022, 04:34 -
Weird Behaviour Of DRM Protected Content
By portalie in forum Video Streaming DownloadingReplies: 1Last Post: 6th Feb 2022, 15:10


Quote
