VideoHelp Forum


Try StreamFab Downloader and download from Netflix, Amazon, Youtube! Or Try DVDFab and copy Blu-rays!


Try StreamFab Downloader and download streaming video from Youtube, Netflix, Amazon! Download free trial.


+ Reply to Thread
Page 3 of 3
FirstFirst 1 2 3
Results 61 to 80 of 80
Thread
  1. Originally Posted by Karoolus View Post
    Originally Posted by bachus View Post
    Sorted all good now... thanks for lossing your time with a noob
    Well what did you do to fix it? Others might have a similar issue later and having the solution here, could help them.

    I made the change on the code without closing the UI ,so I close the UI and save the change after i restart the UI and it worked
    Quote Quote  
  2. Originally Posted by bachus View Post
    Originally Posted by Karoolus View Post
    Originally Posted by bachus View Post
    Sorted all good now... thanks for lossing your time with a noob
    Well what did you do to fix it? Others might have a similar issue later and having the solution here, could help them.

    I made the change on the code without closing the UI ,so I close the UI and save the change after i restart the UI and it worked
    Quote Quote  
  3. Hi Should such files be in the device folder? Image
    [Attachment 77279 - Click to enlarge]
    Quote Quote  
  4. Search, Learn, Download! Karoolus's Avatar
    Join Date
    Oct 2022
    Location
    Belgium
    Search Comp PM
    Originally Posted by gustawa21 View Post
    Hi Should such files be in the device folder? Image
    [Attachment 77279 - Click to enlarge]
    No you need to create a wvd file, it says so
    Quote Quote  
  5. Originally Posted by gustawa21 View Post
    Hi Should such files be in the device folder? Image
    [Attachment 77279 - Click to enlarge]
    You need to convert them to wvd

    https://forum.videohelp.com/threads/411862-Beyond-WKS-KEYS
    Quote Quote  
  6. Member
    Join Date
    Mar 2024
    Location
    Spain
    Search PM
    I'm trying to use your wonderfull tool @imr_saleh but i can't obtein the key of this stream.

    PSSH
    Code:
    AAAAOnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABoIARIQI5lMDOSRSjigTh7d6EY9ZSIENDc2NA==
    License
    Code:
    https://wv-ottlic-f3.imagenio.telefonica.net/TFAESP/wvls/contentlicenseservice/v1/licenses
    I have a token, but i don't know how to use it.

    If i introduce this information the response of the tool is:

    Code:
    Error 401 Client error: Unauthorized for url: https://wv-ottlic-f3.imagenio.telefonica.net/TFAESP/wvls/contentlicenseservice/v1/licenses
    Thanks in advance for your help
    Quote Quote  
  7. Originally Posted by karrotto View Post
    I'm trying to use your wonderfull tool @imr_saleh but i can't obtein the key of this stream.

    PSSH
    Code:
    AAAAOnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABoIARIQI5lMDOSRSjigTh7d6EY9ZSIENDc2NA==
    License
    Code:
    https://wv-ottlic-f3.imagenio.telefonica.net/TFAESP/wvls/contentlicenseservice/v1/licenses
    widevineKeys-GUI doesn't support Movistar. Here's your key:

    Code:
    --key 23994c0ce4914a38a04e1edde8463d65:6958cd82ff263c2785d84af2d3a2a339
    Quote Quote  
  8. Member
    Join Date
    Mar 2024
    Location
    Spain
    Search PM
    Originally Posted by white_snake View Post
    Originally Posted by karrotto View Post
    I'm trying to use your wonderfull tool @imr_saleh but i can't obtein the key of this stream.

    PSSH
    Code:
    AAAAOnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABoIARIQI5lMDOSRSjigTh7d6EY9ZSIENDc2NA==
    License
    Code:
    https://wv-ottlic-f3.imagenio.telefonica.net/TFAESP/wvls/contentlicenseservice/v1/licenses
    widevineKeys-GUI doesn't support Movistar. Here's your key:

    Code:
    --key 23994c0ce4914a38a04e1edde8463d65:6958cd82ff263c2785d84af2d3a2a339
    Thanks for the code. I'm sorry to heard that. Anyway thanks a lot
    Quote Quote  
  9. Hi, I am getting an Error: Could not decode data as Base64, Incorrect padding anyone come across this issue?

    [HTML]PSSH: AAAAOHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABgSEEMhuv 7jQ8v4lZdyM28W+HVI49yVmwY

    Licence URL = https://drm-widevine-licensing.axprod.net/AcquireLicense

    Sorted ..wrong heders Thanks
    Last edited by bachus; 15th Jul 2024 at 08:08. Reason: Sorted ..wrong heders Thanks
    Quote Quote  
  10. update v2.
    1- Get license link and headers automatically from curl(bash)
    2- Remove all old tabs
    3- Remove download via n_m3u8dl-re
    Quote Quote  
  11. Originally Posted by imr_saleh View Post
    update v2.
    1- Get license link and headers automatically from curl(bash)
    2- Remove all old tabs
    3- Remove download via n_m3u8dl-re
    TOP 🧨🔥Thanks !!!
    Quote Quote  
  12. wonderful. thanks for share
    Quote Quote  
  13. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    @imrsaleh

    Image
    [Attachment 82661 - Click to enlarge]


    Your parse_curl method seems to be an EXACT copy of my parse_curl in the AllHell3 family of scripts. Developing that took me ages and I'm damned if I'll let you claim it.

    If you are to flagrantly going to rip off others code please do not be a prick about it. At the very least acknowledge where you copied it from.

    You should be ashamed of yourself!
    Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  14. Originally Posted by A_n_g_e_l_a View Post
    @imrsaleh

    Image
    [Attachment 82661 - Click to enlarge]


    Your parse_curl method seems to be an EXACT copy of my parse_curl in the AllHell3 family of scripts. Developing that took me ages and I'm damned if I'll let you claim it.

    If you are to flagrantly going to rip off others code please do not be a prick about it. At the very least acknowledge where you copied it from.

    You should be ashamed of yourself!
    Your code looked juicy I wouldn't copy it but it lacked some challenges, doesn't it look great with my touch ,

    I copied and learned a lot of information especially from the sticky threads, collecting information is something I would never feel ashamed of,
    Have a great day
    Quote Quote  
  15. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    You should have given credit
    --[----->+<]>.++++++++++++.---.--------.
    [*drm mass downloader: widefrog*]~~~[*how to make your own mass downloader: guide*]
    Quote Quote  
  16. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Originally Posted by imr_saleh View Post
    Your code looked juicy ....
    I copied
    And yet another man-child.!!
    Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  17. @imr_saleh: on github you've placed your code under MIT license, but I've not seen a compatible license with Angelas code (in fact: there is no license). In that case it's a no-go to steal code from any of her projects. You should've asked for permission, and in fact you can't take her code and relicense it under MIT license. Giving credit is not enough in this case.

    Feel free to use and improve the code from my project - I explicitely put it under MIT license:
    Code:
    import re
    from urllib.parse import urlparse, parse_qsl
    from dataclasses import dataclass
    
    
    class RequestContext:
        method: str = None
        url: str = None
        params: dict = None
        headers: dict = None
        cookies: dict = None
        data: str = None
    
    
    def parse_url(url: str):
        """
        split url with query parameters in base url and list of query parameters
        """
        query_params = None
        urlparts = urlparse(url)
        baseurl = f'{urlparts.scheme}://{urlparts.netloc}{urlparts.path}'
        for (key, val) in parse_qsl(urlparts.query, keep_blank_values=True):
            if query_params is None:
                query_params = {}
            query_params[key] = val
        return baseurl, query_params
    
    
    def parse_cookies(cookies: str):
        """
        split cookies string into list of cookies
        """
        a_cookie = {}
        for cookie in cookies.split('; '):
            match = re.match(r'(.*?)=(.*)', cookie)
            a_cookie[match.group(1)] = match.group(2)
        return a_cookie
    
    
    def parse_headers(text):
        """
        extract headers list and cookies from text in curl notation
        """
        headers = None
        cookies = None
        fiter = re.finditer(r"\s+-H\s+'(.*?)'", text)
        if not fiter:
            fiter = re.finditer(r'\s+-H\s+"(.*?)"', text)
        if fiter:
            headers = {}
            for item in fiter:
                try:
                    key, val = item.group(1).split(':', 1)
                    if key.lower()  in ('cookies', 'cookie'):
                        cookies = parse_cookies(val)
                    headers[key.lower()] = val.lstrip()
                except:
                    pass
        return headers, cookies
    
    
    def parse_context(curl_cmd: str) -> RequestContext | None:
        """
        take a 'copy as curl' command from browser's dev tools
        and turn it into a python object.
        """
        text = curl_cmd.encode('latin1').decode('unicode-escape')
        match = re.search(r"curl\s+'(.*?)'(.*)(\ncurl)?", text)
        if not match:
            match = re.search(r'curl\s+"(.*?)"(.*)(\ncurl)?', text)
        if match:
            # extract url and query parameters
            url, params = parse_url(match.group(1))
            context = RequestContext(url=url, params=params)
    
            # extract headers and cookies
            headers = match.group(2)
            context.headers, context.cookies = parse_headers(headers)
    
            # extract method (GET, POST, ...)
            match = re.search(r'\s+-X\s+POST ', text)
            if match:
                context.method = 'POST'
    
            # extract raw data
            match = re.search(r" --data-raw.*?'(.*)'", text, re.S)
            if match:
                context.method = 'POST'
                context.data = match.group(1)
    
            return context
    
        match = re.search(r"(https://\S+)", text)
        if match:
            url = match.group(1)
            return parse_context(f"curl '{url}'")
    
        return None
    Last edited by Obo; 4th Oct 2024 at 09:48.
    Quote Quote  
  18. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Image
    [Attachment 82663 - Click to enlarge]

    imr_saleh
    I can't do this.... it's too hard.
    I better steal some code... I can just
    tell myself its my code
    and forget I stole it. Haha.
    Last edited by A_n_g_e_l_a; 4th Oct 2024 at 10:10.
    Noob Starter Pack. Just download every Widevine mpd! Not kidding!.
    https://files.videohelp.com/u/301890/hellyes6.zip
    Quote Quote  
  19. Originally Posted by Obo View Post
    @imr_saleh: on github you've placed your code under MIT license, but I've not seen a compatible license with Angelas code (in fact: there is no license). In that case it's a no-go to steal code from any of her projects. You should've asked for permission, and in fact you can't take her code and relicense it under MIT license. Giving credit is not enough in this case.

    Feel free to use and improve the code from my project - I explicitely put it under MIT license:
    Code:
    import re
    from urllib.parse import urlparse, parse_qsl
    from dataclasses import dataclass
    
    
    class RequestContext:
        method: str = None
        url: str = None
        params: dict = None
        headers: dict = None
        cookies: dict = None
        data: str = None
    
    
    def parse_url(url: str):
        """
        split url with query parameters in base url and list of query parameters
        """
        query_params = None
        urlparts = urlparse(url)
        baseurl = f'{urlparts.scheme}://{urlparts.netloc}{urlparts.path}'
        for (key, val) in parse_qsl(urlparts.query, keep_blank_values=True):
            if query_params is None:
                query_params = {}
            query_params[key] = val
        return baseurl, query_params
    
    
    def parse_cookies(cookies: str):
        """
        split cookies string into list of cookies
        """
        a_cookie = {}
        for cookie in cookies.split('; '):
            match = re.match(r'(.*?)=(.*)', cookie)
            a_cookie[match.group(1)] = match.group(2)
        return a_cookie
    
    
    def parse_headers(text):
        """
        extract headers list and cookies from text in curl notation
        """
        headers = None
        cookies = None
        fiter = re.finditer(r"\s+-H\s+'(.*?)'", text)
        if not fiter:
            fiter = re.finditer(r'\s+-H\s+"(.*?)"', text)
        if fiter:
            headers = {}
            for item in fiter:
                try:
                    key, val = item.group(1).split(':', 1)
                    if key.lower()  in ('cookies', 'cookie'):
                        cookies = parse_cookies(val)
                    headers[key.lower()] = val.lstrip()
                except:
                    pass
        return headers, cookies
    
    
    def parse_context(curl_cmd: str) -> RequestContext | None:
        """
        take a 'copy as curl' command from browser's dev tools
        and turn it into a python object.
        """
        text = curl_cmd.encode('latin1').decode('unicode-escape')
        match = re.search(r"curl\s+'(.*?)'(.*)(\ncurl)?", text)
        if not match:
            match = re.search(r'curl\s+"(.*?)"(.*)(\ncurl)?', text)
        if match:
            # extract url and query parameters
            url, params = parse_url(match.group(1))
            context = RequestContext(url=url, params=params)
    
            # extract headers and cookies
            headers = match.group(2)
            context.headers, context.cookies = parse_headers(headers)
    
            # extract method (GET, POST, ...)
            match = re.search(r'\s+-X\s+POST ', text)
            if match:
                context.method = 'POST'
    
            # extract raw data
            match = re.search(r" --data-raw.*?'(.*)'", text, re.S)
            if match:
                context.method = 'POST'
                context.data = match.group(1)
    
            return context
    
        match = re.search(r"(https://\S+)", text)
        if match:
            url = match.group(1)
            return parse_context(f"curl '{url}'")
    
        return None
    another delicious code thanks.
    Btw what is MIT license



    Originally Posted by A_n_g_e_l_a View Post
    Image
    [Attachment 82663 - Click to enlarge]

    imr_saleh
    I can't do this.... it's too hard.
    I better steal some code... I can just
    tell myself its my code
    and forget I stole it. Haha.
    K k don't throw cucumber on me :
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!