Add default device
Switch to requests to get manifest.
Import peacock service
This commit is contained in:
Aswin 2025-03-23 09:56:39 +05:30
parent 82cfd1c484
commit 05ed9d57df
10 changed files with 46 additions and 4 deletions

1
.gitignore vendored
View File

@ -182,7 +182,6 @@ pyrightconfig.json
# End of https://www.toptal.com/developers/gitignore/api/python # End of https://www.toptal.com/developers/gitignore/api/python
devices/
scalable/43.xml scalable/43.xml
scalable/40.xml scalable/40.xml

View File

@ -1,4 +1,4 @@
# VineTrimmer-PlayReady # VineTrimmer-PlayReady
A tool to download and remove DRM from streaming services. A version of an old fork of [devine](https://github.com/devine-dl/devine). A tool to download and remove DRM from streaming services. A version of an old fork of [devine](https://github.com/devine-dl/devine).
Modified to remove Playready DRM instead of Widevine. Modified to remove Playready DRM instead of Widevine.
@ -238,3 +238,7 @@ Tested so far on Amazon, AppleTVPlus, Max.
```bash ```bash
poetry run python scripts/ParseKeybox.py poetry run python scripts/ParseKeybox.py
``` ```
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=chu23465/VT-PR&type=Date)](https://www.star-history.com/#chu23465/VT-PR&Date)

View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAoVu83qcuNeQcIjfXzl9zCtXEKklvWndbp+04vFYJ/7s4tTrS
BQtECs6UHG5v7MNphq92oINzjLHRDS45sFYSCfKfqk6FEp6jKDexo82zi0oZB7Tz
mlqbFaf5y1txbGCm+A0cStJuHgfB7QIhmQh4lPY5DiLOLZjb/CsE1MjR9wcmD8eN
hXjtriV8Je2+b8Lm3RMT3GHjOCIxh0iX9PxfxrGSlvmrU2qexQMSLmyaTMPyFSsR
uFgLu4bQbFvFDiFGv53k/7S3AydWHqW+6PaZ/65D9jzJ+6RBUulfCGUP1LIloDbM
Y2ez/jgiWzMB6J6GDQzelpjVVeYnFPCU9txyMQIDAQABAoIBAAM+GbSLvYT9uYcC
gka2alRsaU3EPgWeYmwke0BlpjvKYmBZ90B8snhZIGbV3U/vuV4ohoTBP4AzTpUq
OaSOhjxG8Oh2PXxbTcIQJHS7PIFvEsOx4jdW3Mj5oC5y/vuDkbdoZAoo4meeFkqS
AWTW471ymUDseCI4cStHHgi8pGOHbAbZJh2xKQfVFpKiZYGWpr2eu/xatwWtk9y7
Pl69qhjDur6rkY55EBYl94EmsIT6yx9btESDWB+jcQ0zg+NlgtLOLZfHzlsEx8Lp
qaoQoqpuziURdevrk+3RxbHPZcjt51UWtUBauncFyu1O4/zVpB/gTnbJNCXOcrw4
hRQJHkUCgYEA440KJXT7GRke25RM6MGFc6S2z0270LxSFcmYlgNpNPuE+vm23lBv
WC5tmRmmS/Y19MLtdeD+cJsYj6BZlXUiZjZC/MXNGWDEPLyN3R9gxH0HjxPrcX/l
iXlfkzhd5dRwUXZs+L9ix4ANHPzIa3vsVwmyhbrWGz5dumeRkPtw/MsCgYEAtYgl
/ZMP3VSpol9KHQV8j1pI6AO5b+eT8Ic9f1KQejZP3t/fbY/7XIMiqUPG9APhv3qC
4ZTydc8RybXu7L9nzNewvwaCtJr5Zgdt4XOcTQqgX8UK+0z/Fm+omlObKrcJNoWH
SEHcVVAMtRHdmo9eOAxnsXpwtgII/+NcCq1vSXMCgYEApvWXWkBo9NNfttErVSSZ
HG7gy15HzjI/MElIsdky2nMp8VRD/v6Zk+QM+ma9g8LVeA+GWBWL22eRL+EBmg3l
/YUWxY0EnfhIRCA9Ht+lCsaKQ0rkV9T1wFbT75tOGhIzjzILZsBWY/bqqDg5fdPh
Z0NwP3sFGdw6vUi8n9o93t0CgYEAjoXsPeA+bmlQHdlumMZ7+xjJcM+rwb4xmoCz
uckbAbiukK93/c8zbHjQt9As3dxGW01WgMGucuw2bQXYJixI1LzrWa9E44NhF8fx
bzaTmrEjJM3RR2g2Rmk4GKJXivvV0eaYRhTfZmPI9kimkfjJ4ntq1h7paxzB8BWT
aBau7x0CgYEA0F9zW5P4Jc76WRtogc+OMlmqVMkxYVFr84MgzK2n13ExtvMWRHhN
KNHeZmukvqYYXlymPpBqvXibndXnHJjfX7NsX41l2u61mKcsKeQ65mCz4K+C9tOi
EMKMO4L9fCaylP5cbIO4ogmEtY/9He+yEdBZQaVz3d5t8wUT9inaT3s=
-----END RSA PRIVATE KEY-----

View File

@ -0,0 +1,9 @@
{
"name": "generic_8159_l3",
"description": "android generic 8159 l3",
"security_level": 3,
"session_id_type": "android",
"private_key_available": "True",
"vmp": "False",
"send_key_control_nonce": "True"
}

Binary file not shown.

View File

@ -59,7 +59,7 @@ def parse(*, url=None, data=None, source, session=None, downloader=None):
raise ValueError("Neither a URL nor a document was provided to Tracks.from_ism") raise ValueError("Neither a URL nor a document was provided to Tracks.from_ism")
base_url = url.rsplit('/', 1)[0] + '/' base_url = url.rsplit('/', 1)[0] + '/'
if downloader is None: if downloader is None:
data = (session or requests).get(url).text data = requests.get(url, verify=False).text
elif downloader == "aria2c": elif downloader == "aria2c":
out = os.path.join(config.directories.temp, url.split("/")[-1]) out = os.path.join(config.directories.temp, url.split("/")[-1])
asyncio.run(aria2c(url, out)) asyncio.run(aria2c(url, out))

View File

@ -59,7 +59,7 @@ def parse(*, url=None, data=None, source, session=None, downloader=None):
global base_url global base_url
base_url = url.rsplit('/', 1)[0] + '/' base_url = url.rsplit('/', 1)[0] + '/'
if downloader is None: if downloader is None:
data = (session or requests).get(url).text data = requests.get(url, verify=False).text
elif downloader == "aria2c": elif downloader == "aria2c":
out = os.path.join(config.directories.temp, url.split("/")[-1]) out = os.path.join(config.directories.temp, url.split("/")[-1])
asyncio.run(aria2c(url, out)) asyncio.run(aria2c(url, out))

View File

@ -10,6 +10,9 @@ from vinetrimmer.services.amazon import Amazon
from vinetrimmer.services.appletvplus import AppleTVPlus from vinetrimmer.services.appletvplus import AppleTVPlus
from vinetrimmer.services.max import Max from vinetrimmer.services.max import Max
from vinetrimmer.services.netflix import Netflix from vinetrimmer.services.netflix import Netflix
from vinetrimmer.services.peacock import Peacock
# Above is necessary since dynamic imports like below fuck up nuitak
# Below dynamic imports fuck with compiling when using Nuitka - exec() call is the problem # Below dynamic imports fuck with compiling when using Nuitka - exec() call is the problem
#for service in os.listdir(os.path.dirname(__file__)): #for service in os.listdir(os.path.dirname(__file__)):