I can get pssh and licence url of this video
But I can't generate the key as it says token is expired or reused.
PSSH: AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEA8Tut XOlUnznXRFyQHV+cJI49yVmwY=
License: https://adtv.ae/rte/widevinedrm?token=a2VmthuQo5TlrmZ4btTaGCbQfrGOIR4xBRk3WwIpW9yFtdnN...MdCwqEVMvp0%3D
https://adtv.ae/ar/shows/220757/%D8%AD%D9%84%D9%88%D8%A9%20%D8%A7%D9%84%D8%AF%D9%86%D9...n-1/episode-40
this is the error code I get
Error 400: <?xml version="1.0" encoding="utf-8"?><ERROR><CODE>expired-token-error</CODE><TEXT>RiGHTv token was expired.</TEXT></ERROR>
Support our site by donate $5 directly to us Thanks!!!
Try StreamFab Downloader and download streaming video from Netflix, Amazon!
Try StreamFab Downloader and download streaming video from Netflix, Amazon!
+ Reply to Thread
Results 1 to 14 of 14
-
Last edited by Maxw2191; 28th Jan 2024 at 05:38.
-
Block the license request from your Network tab, like here: https://forum.videohelp.com/threads/409536-Downloading-from-vdocipher#post2689906 (basically add a blocking filter for "adtv.ae/rte/widevinedrm")
This way the token is not used by your browser, and it will still be valid in your script.
Code:--key 0f13bad5ce9549f39d7445c901d5f9c2:e51e74fc994ffd2cd0a2b5f1f9dccb52
-
-
Your command:
Code:N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/592/8952/9ecd8113-4f3f-4fee-a4cf-235ed933703f/77cb3996-1545-5aee-e422-caca7ee2f583/manifest.mpd" --key 0f13bad5ce9549f39d7445c901d5f9c2:e51e74fc994ffd2cd0a2b5f1f9dccb52 -M format=mkv
https://www.transfernow.net/dl/20240316JIN5y9Ib
This should definitely be automated. They didn't even bother forcing you to make an account lol.Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 16th Mar 2024 at 08:16.
--[----->+<]>.++++++++++++.---.--------.
[*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*] -
-
Here is the downloader for https://adtv.ae . It works only for free videos. Doesn't matter if it's a series episode, a sports episode, or a movie. The best part about this script is that you don't even care anymore about the token expiring since it's entirely automated.
Code:import json import re from urllib.parse import urlparse, urlunparse, parse_qs import fake_useragent import requests from pywidevine.cdm import Cdm from pywidevine.device import Device from pywidevine.pssh import PSSH API_CONFIG = 'https://adtv.ae/api/biz/config/v1/config' API_PLAY_INFO = 'https://adtv.ae/api/biz/video{path}/playinfo' API_DETAIL = 'https://adtv.ae/api/biz/video/aggregate/detail' USER_AGENT = fake_useragent.UserAgent().random WVD_FILE = "./device_wvd_file.wvd" def get_content_info(source_url): if "/shows/" in source_url: ext_id = re.findall(r'/shows/([^/]*)/', source_url)[0] response = requests.get( API_DETAIL, headers={'User-Agent': USER_AGENT}, params={ 'type': 'Series', 'client': 'json', 'externalSeriesId': ext_id } ).content.decode() ext_id = re.findall(r'"externalId":"(\d+)"', response) ext_id = str(max([int(i) for i in ext_id])) ep_id = re.findall(r'/episode-(\d+)', source_url)[0] return "/episode", { 'season_external_id': ext_id, 'episode_number': ep_id, 'client': 'json' } elif "/watch?" in source_url: query_params = parse_qs(urlparse(source_url).query) for p in ["assetExternalId", "externalContentId"]: ext_id = query_params.get(p, []) if len(ext_id) > 0: ext_id = ext_id[0] break return "", {'asset_external_id': ext_id} print("Unknown URL format: ", source_url) exit(0) def get_video_data(source_url): app_locale = re.findall(r'/([a-zA-Z]{2})/', source_url)[0] license_url = json.loads(requests.get( API_CONFIG, headers={'User-Agent': USER_AGENT} ).content.decode())["response"]["widevine_licenser_vod"] license_url = urlparse(license_url) license_url = urlunparse(( license_url.scheme, license_url.netloc, license_url.path, '', '', '' )) path, url_params = get_content_info(source_url) response = json.loads(requests.get( API_PLAY_INFO.format(path=path), headers={ 'User-Agent': USER_AGENT, 'App-Locale': app_locale }, params=url_params ).content.decode())['response'] manifest, token = response["url"], response["token"] try: pssh_value = str(min(re.findall( r'<cenc:pssh\b[^>]*>(.*?)</cenc:pssh>', requests.get(manifest).content.decode() ), key=len)) except: return manifest, None, None, None return manifest, pssh_value, token, license_url def get_keys(pssh_value, token, license_url): if pssh_value is None: return [] pssh = PSSH(pssh_value) device = Device.load(WVD_FILE) cdm = Cdm.from_device(device) cdm_session_id = cdm.open() challenge = cdm.get_license_challenge(cdm_session_id, pssh) licence = requests.post( license_url, data=challenge, params={"token": token}, headers={'User-Agent': USER_AGENT} ) licence.raise_for_status() keys = [] cdm.parse_license(cdm_session_id, licence.content) for key in cdm.get_keys(cdm_session_id): if "CONTENT" in key.type: keys += [f"{key.kid.hex}:{key.key.hex()}"] cdm.close(cdm_session_id) return keys def get_download_command(source_url): manifest, pssh_value, token, license_url = get_video_data(source_url) keys = get_keys(pssh_value, token, license_url) if len(keys) == 0: return f'N_m3u8DL-RE.exe "{manifest}" -M format=mkv' return f'N_m3u8DL-RE.exe "{manifest}" {" ".join([f"--key {k}" for k in keys])} -M format=mkv' SOURCE_URLS = [ "https://adtv.ae/en/shows/216884/Al%20Ekhteyar/season-2/episode-28", "https://adtv.ae/en/shows/wasaya%20al%20sabbar-series/Wasaya%20Al-Sabbar/season-1/episode-2", "https://adtv.ae/ar/shows/216884/%D8%A7%D9%84%D8%A5%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1/season-2/episode-26", "https://adtv.ae/ar/watch?video_external_id=LP00050096&assetExternalId=LP00050096&externalContentId=LP00050096&type=Movie&media=%D8%A3%D8%B7%D9%84%D8%A7%D9%84-%D9%88%D8%AD%D8%B6%D8%A7%D8%B1%D8%A9", "https://adtv.ae/en/watch?video_external_id=27884199&assetExternalId=27884199&externalContentId=27884199&type=Movie&media=%D8%B5%D8%B1%D8%A7%D8%B9-%D9%81%D9%89-%D8%A7%D9%84%D9%86%D9%8A%D9%84", "https://adtv.ae/en/shows/229775/follow%20the%20wind/season-1/episode-14777", "https://adtv.ae/en/shows/HeadCoachSeries/HeadCoachSeries/season-1/episode-11" ] for s in SOURCE_URLS: print(get_download_command(s))
Code:N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/19445/19031/e1ddb853-5140-4991-a3fd-d0985496f622/77cb3996-1545-5aee-e422-caca7ee2f583/manifest.mpd" --key 5bc9d0b65f5d4027a1330c3a92055517:2165aa44aeca2f406fe928fd04ce2df7 -M format=mkv N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/8716/3421/ee5866bf-7017-43a3-b92d-0de779f704c2/82b249ab-5893-561b-1b2a-b221a78f723d/manifest.mpd" --key 5f4119619d2f40c5856b386057d153c6:0e6e73a98192d6b61685e09463ea23ee -M format=mkv N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/11611/6031/b66ff258-a6ba-46fa-b280-0775ab8b37f2/77cb3996-1545-5aee-e422-caca7ee2f583/manifest.mpd" --key 868c7b1610ea47ca81770478fc871928:30379a41b6266a026622908adef80aca -M format=mkv N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/17523/5654/1ff6fb68-3cf5-4117-9084-9ffb7a9a9bd7/82b249ab-5893-561b-1b2a-b221a78f723d/manifest.mpd" --key 2a520f8a11a74e50849d84bf663bcafd:f70e7b78d73e180de38ef7c0103dffe4 -M format=mkv N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/13910/6731/f0cb46c5-eec4-45b3-a32f-84b29c4a63c5/77cb3996-1545-5aee-e422-caca7ee2f583/manifest.mpd" --key 428b64240a364684a6a0db274b08ca76:af79c2e8ac92b23449064adb40e6eb0d -M format=mkv N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/13710/1405/ef33ba8e-6f14-4fec-9851-dcd37ac08fc7/77cb3996-1545-5aee-e422-caca7ee2f583/manifest.mpd" --key 86591b3de9cf42549a1b39e0d43b43b3:0cdda18cafa0e5c7a850e0ab2a805681 -M format=mkv N_m3u8DL-RE.exe "https://vo.cdb.cdn.orange.com/Content/DASH/VOD/6078/3609/be5c77e0-cadb-48cb-89ec-44f4b502b79a/82b249ab-5893-561b-1b2a-b221a78f723d/manifest.mpd" --key 7bf1c4a1041f43f28c98e9a02f0bf02c:cb0c068aab80d8d4c5ec5e05a73ad063 -M format=mkv
Oops. I misinterpreted your comment. My bad.
Edit: This script has been added and extended in the widefrog tool so I won't maintain it here. Any relevant updates will take place in the support thread.Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 21st May 2024 at 04:22.
--[----->+<]>.++++++++++++.---.--------.
[*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*] -
Last edited by ArbPc; 16th Mar 2024 at 12:32.
-
-
Unfortunately I don't have the device_wvd_file.wvd file and I don't know how to create it
i just have device_client_id_blob and device_private_key -
--[----->+<]>.++++++++++++.---.--------.
[*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*]
Similar Threads
-
AES 128 Key, How do i decrypt or find the key?
By GirlsGill in forum Video Streaming DownloadingReplies: 12Last Post: 12th Feb 2024, 08:03 -
How to get THE KEY from this TOKEN
By pericoplaner in forum Video Streaming DownloadingReplies: 1Last Post: 30th Nov 2023, 18:49 -
Seeking Assistance with Dynamic Token Issues in N_m3u8DL-RE Video Download
By omry in forum Video Streaming DownloadingReplies: 4Last Post: 23rd Nov 2023, 18:54 -
No downloader working without key. now getting base64 key string is tough.
By akshaysic in forum Video Streaming DownloadingReplies: 6Last Post: 14th Jan 2023, 10:33 -
How to video download with bearer token?
By sagokey in forum Video Streaming DownloadingReplies: 2Last Post: 19th Feb 2022, 13:27