VideoHelp Forum
+ Reply to Thread
Page 1 of 3
1 2 3 LastLast
Results 1 to 30 of 65
Thread
  1. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    Hello. I was inspired by Freevine (great program by the way @stabbedbybrick) and Devine so I wrote my own downloader from scratch, one that mostly ignores any metadata since I don't care about it and will be centered around unpopular/niche/weird/dubious sites that may not receive the same level of attention as other popular websites.

    To use the downloader a certain basic level of tech knowledge is required so if you lack experience in any of those fields, I advise you to not use this tool until you researched and learned:
    - python, pip, and package management (venv is optional but good to know)[*]
    - running Python scripts or executables from the command line
    - N_m3u8DL-RE and its proper arguments[*]
    - dumping a CDM (either emulated or real), generating a CDM in WVD format
    If you're going to use the exe provided by the zip file, you can ignore any Python knowledge requirements. If you're happy with the default N_m3u8DL-RE parameters you don't need to know anything else about it.

    The current version of the downloader can be found here:
    https://files.videohelp.com/u/308780/widefrog_v1_14_0.zip

    Before I continue I should say that the program is mostly "what you see is what you get". If at any point you find yourself disapproving of the way I developed/designed it or even with the way I run/maintain things or something else that may be a dealbreaker, just use another downloader. No paid content is supported for any service and I won't add it even if someone gives me access to an account.

    If you find yourself having some questions at some point, make sure you read this entire post at least once before asking or PM-ing me directly. It is highly possible that your issue was addressed at some point during this post.

    The tool was designed for Windows (64 bit) users and I won't extend it to other operating systems or architectures (Linux is an exception so feel free to ask. I might change my mind if enough people request this). It can work on other OS (and 32 bit) but you'll be able to use it just to generate download commands on a text file. The program is focused mainly on Widevine DRM content. Non-DRM support was added as well when it was easy to extend. HLS AES services are supported as well but there won't be many services focused on this.

    For each service, it will search for the manifest with the highest available quality that is only available through the browser web API (endpoints that are used by other devices/TVs/etc. will be ignored even if they can provide higher quality). If someone wants a low quality like 360p but the best browser manifest is 720p minimum, then tough luck I guess (even if you might find lower ones from the site's API).

    As features, the tool will focus on downloading 3 things: individual content (including livestreams), lists, and series. All services support individual content downloading since it's the most basic feature, however not all sites may offer support for livestreams. The difference between lists and series is about how they're structured. In this context, I consider a series to be composed of seasons and episodes (*generally since it depends on the site).

    A list is just a set of videos that don't belong to an indexed collection (think of a YouTube playlist, liked videos, or videos that may result from a keyword search, etc). A collection can be queried only through the use of an interval (a union of intervals won't be supported). For example, one may request the content from season 1, episode 2, to season 3, episode 4. Or the content of a list between element 1 and element 4.

    That being said, the currently supported services and corresponding features are:
    - 6play.fr (series)
    - 35mm.online (series)
    - adtv.ae (series)
    - aloula.sa (series)
    - auvio.rtbf.be (livestream, list, series)
    - cda.pl (series)
    - dazn.com (livestream, series)
    - eurovisionsport.com (series)
    - fifa.com
    - kijk.nl (series)
    - mediasetinfinity.mediaset.it (list)
    - nba.com (list)
    - npo.nl (list, series)
    - open.spotify.com [*only video podcasts*] (list)
    - pianogroove.com (list)
    - play.tv3.lt (list, series)
    - plus.fifa.com (list, series)
    - plus.rtl.de
    - ptvflix.org (series)
    - rakuten.tv (livestream, series)
    - rmcbfmplay.com (list, series)
    - rsi.ch (livestream, list, series)
    - shahid.mbc.net (livestream, series)
    - tf1.fr (list, series)
    - threenow.co.nz (series)
    - viki.com (series)
    - vrt.be (livestream, list, series)
    - vtmgo.be (series)
    - watch.globaltv.com (livestream, list, series)
    - wittytv.it (list)
    - zee5.com (list)

    The output is always MKV, regardless if someone wants to download only video, only audio, or even only subtitles. The output location is also fixed (in the same directory from where the user is running the tool). The output name will be extracted from the content's URL and will be barely enough just to distinguish and recognize the downloaded content. A template for the output won't ever be a feature of this program.

    For the services that don't use subtitles in their manifests, all additional subtitles will always be downloaded (the user won't be able to select which subtitles to download unless they are provided by the manifest, however, the user can choose to ignore any extra subtitles).

    1. Installation
    The following additional tools are needed (use Google if you're confused):
    - N_m3u8DL-RE
    - mp4decrypt
    - shaka-packager (don't forget to rename it to shaka-packager.exe)
    - ffmpeg
    - mkvmerge

    Place them all in a folder and add the folder to the system environment variables. The zip has the requirements.txt file included. Whether or not you use a virtual env, is up to you (use stackoverflow if you don't know about venv). Do NOT attempt to install the Python dependencies using the command: pip install -r requirements.txt

    It will fail because there are version conflicts among some packages. Luckily this can be ignored if you install manually all packages. Or if you want to speed things up, you can just run in CMD:
    Code:
    FOR /F %k in (requirements.txt) DO ( if NOT # == %k ( pip install %k ) )
    And then also run (this is only for cda.pl):
    Code:
    playwright install
    Don't worry about any version conflicts, they aren't relevant. For those of you who aren't big fans of Python, you can use the exe from the RELEASE folder (that's why the archive is that big). It comes with everything prepackaged. Always keep the exe file in the same place as the "terminal" folder. The executable was generated using the following command (in the base folder, hence why the paths are relative):
    Code:
    pip install pyinstaller
    pyinstaller --noconfirm --onefile --console --add-data "services;services/" --add-data "utils;utils/" --add-data "utils/tools;tools/" --hidden-import "browser_cookie3" --hidden-import "librespot" --hidden-import "bs4" --hidden-import "xmltodict" --hidden-import "pycountry" --hidden-import "html5lib" "widefrog.py"
    It's worth noting that the exe doesn't contain the following services (couldn't include some modules):
    - cda.pl

    I scanned that exe using VirusTotal and this is the result:
    https://www.virustotal.com/gui/file/f5d8db45757b1bd452e8292c9628a1be9120b738a0167b5d358f5b9b155baab6

    The reason why it is detected by some antiviruses is that pyinstaller was used with the argument --onefile. I've read a little about pyinstaller and it was used before by quite a few bad actors to send hidden malware. It's not because pyinstaller is malware itself. So that's why it's instantly detected as a false positive. I tested it even with a simple "Hello World" script and it's still detected.

    It's understandable if you have doubts about using the executable now. I placed it there for people who don't care at all. You will however have to figure out Python if you want to use the program. The same applies if your antivirus falsely detects it and you aren't willing to whitelist it. For those of you that are going to use the exe, you can call it from CMD using: widefrog.exe instead of: python widefrog.py

    2. Usage
    If you intend to use DRM services, you will need a CDM in WVD format. It's up to you to figure out how to get one so read the forum. If you're getting license call errors with a CDM that wasn't obtained by you, then you have to learn how to extract one. You need a fresh CDM since the one you're using is either banned or wasn't correctly generated.

    I advise using an emulated CDM. If you use the program excessively (a ridiculous amount) with your CDM, in theory, there's a small chance (< 1%) that it can get toasted. So just to be safe, use one that is emulated because you don't care if you lose it since you can just get a new one. After obtaining a valid WVD file, you can place it directly in the main folder to speed things up.

    If everything was set up right, run it for the first time and you will see:
    Code:
    python widefrog.py
    [INFO] The app_files\config.json file was created. Edit the file and run the program.
    Do not delete any file from that folder unless you see a message specifically telling you to. An exception is when you update the downloader to a new version. In that case make sure you deleted the old config file before generating a new one, especially if new services that require credentials were added. Before starting editing the config file, run
    Code:
    python widefrog.py --help
    python widefrog.py --config
    And read everything that's there and understand how it works. It should take around 2 minutes. Then you can edit the config file. In summary, that JSON file allows you to:
    - set the number of threads used by the tool (don't use too many or some services will block you temporarily)
    - set the parameters for N_m3u8DL-RE (it is highly recommended for you to be familiar with N_m3u8DL-RE because you'll have to provide the right parameters if you want anything else in particular than what the default mode provides)
    - set the service credentials

    If you don't feel comfortable using your credentials with the program, then just make a burner account. Most of these sites let you use a fake email and since the downloader is centered around free content, using a paid account is useless. Whenever I mention that a service uses browser cookies, I always mean Firefox.

    Also whenever email/password credentials are mentioned, I mean the classic non-Gmail/non-Facebook/non-Apple/non-etc. email/password. I prefer to implement the login flow from scratch but if a site keeps changing it, I'll just go the lazy route and use cookies.

    Regarding geographic restrictions, I won't implement any proxy features so that is entirely up to the user how he fixes this problem (VPNs are one solution and if you use the program correctly, you can use a free VPN without wasting data on downloading, only on basic information scraping which is considerably less). If I mention that a specific country IP is needed for a service that doesn't mean that it's the only country that can be used, it just means it's the first country that worked for me.

    Now I will showcase some commands for each service. For most services when it comes to individual content, you can use directly the updated URL after you press play on a video. Feel free to skip any service that isn't relevant to you.

    - 6play.fr
    Read this.

    - 35mm.online
    Some content can't be viewed on the browser unless you're using an account but luckily they don't enforce this for downloading. A series for this site is represented by the result pages of a filter search from https://35mm.online/search
    You need to have at least one filter applied and you can copy the updated URL as valid input.
    Code:
    #video
    python widefrog.py "https://35mm.online/vod/animacja/pani-twardowska"
    python widefrog.py "https://35mm.online/fonoteka/muzyka/muzyka-ludowa/radosny-poranek"
    #series
    python widefrog.py "https://35mm.online/search?page=1&searchPhrase.3=polska&__NodeTypeAlias.2=asset%2Cseries&__productionYear.4=1940%2C2024" --query=5:40:6:4
    - adtv.ae
    Because the Arabic names were kinda bugged for both Windows and N_m3u8DL-RE, I used the content ID as the output name (even if some content may have had English names available). To download a specific series, click on a show from that site and a popup window will appear. The new URL is the series URL. Some episodes from specific series may be shown to be there, but the actual content is not available in some cases.
    Code:
    #video
    python widefrog.py "https://adtv.ae/en/watch?video_external_id=28870325&externalContentId=28870325&type=Movie&media=%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%A3%D8%B7%D9%84%D8%A7%D9%84"
    #series
    python widefrog.py "https://adtv.ae/en/shows?media=%D8%A7%D9%84%D8%A5%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1&video_external_id=216884_page&externalContentId=216884_page&externalSeriesId=216884&type=Series" --query=1:15:2:15
    - aloula.sa
    Same problem with Arabic names.
    Code:
    #video
    python widefrog.py "https://www.aloula.sa/en/episode/19934"
    #series
    python widefrog.py "https://www.aloula.sa/en/title/32" --query=1:25:1:28
    - auvio.rtbf.be
    Belgian IP is needed (for most content) and email/password are needed as well. If you're making an account from outside Belgium, using a VPN isn't sufficient. You need to edit your account information to fool them that you're from Belgium. Only then using a VPN is enough.

    Usually, the content that has "/media/" in its URL is considered to be individual. If you click on a show and you want a specific video, find it and click the button "Details" near the video. You will be redirected to a "/media/" URL and you can use that as input. If the show doesn't have a list of videos and you can't find the "Details" button (that usually happens for some movies), then just take the current URL that contains "/emission/" and use it as input. The default video from that page will be downloaded.

    To access the main show page, when you click on a random video, you'll see the button "Tous les episodes". Click it and you'll be redirected to a page that has "/emission/" in the URL. Regarding collections, when you click on a show with multiple videos, it can be structured in 4 ways. By year, by season, a single big section labeled as "Tous les episodes" or by multiple horizontal widget rails. In the first 2 cases, the URL is considered to be a series. The season index can be the specified year or the season itself. If there is only one section labeled "Tous les episodes" that URL will be treated like a list with top-bottom numbering.

    Shows with horizontal widgets are ignored and only the default video is downloaded as individual content. If you want to download the list of videos from a specific widget rail, click the button "Voir tout" on the right side and you'll be redirected to a URL that contains "/widget/". That URL is the valid input and will be treated like a list with the order top-down, left-right (default unsorted/unfiltered order). Some shows have the additional button "Extraits & bonus". Click on it and you'll be redirected to a URL that ends in "/bonus". You can download that as well and it will be considered a list with the same defined numbering.

    You can also download audio content. Go to the podcasts section and select a show or a specific podcast. The same rules that were defined previously for videos, apply here as well. Also, livestream videos and livestream audio can be downloaded as well. Unfortunately, a livestream audio can only be downloaded through the use of collections since the site doesn't offer a URL for that content.
    Code:
    #video
    python widefrog.py "https://auvio.rtbf.be/media/attraction-attraction-s01-3018437"
    python widefrog.py "https://auvio.rtbf.be/emission/titane-27377"
    #audio
    python widefrog.py "https://auvio.rtbf.be/media/un-jour-dans-le-sport-14-aout-2004-3164197"
    #livestream video
    python widefrog.py "https://auvio.rtbf.be/live/roland-garros-2024-31-mai-direct-tipik-526661"
    #livestream audio
    python widefrog.py "https://auvio.rtbf.be/chaine/classic-21-5" --query=:2::2
    #list
    python widefrog.py "https://auvio.rtbf.be/widget/19164" --query=:5::7
    python widefrog.py "https://auvio.rtbf.be/widget/22508?context%5BprogramId%5D=8340" --query=:2::4
    python widefrog.py "https://auvio.rtbf.be/emission/la-theorie-du-y-11043/bonus" --query=:6::7
    python widefrog.py "https://auvio.rtbf.be/emission/pandore-20618" --query=:5::8
    python widefrog.py "https://auvio.rtbf.be/chaine/musiq3-7" --query=:2::3
    #series
    python widefrog.py "https://auvio.rtbf.be/emission/le-cactus-4043" --query=2017:180:2018:5
    python widefrog.py "https://auvio.rtbf.be/emission/l-art-du-crime-27164" --query=3:2:4:2
    - cda.pl
    Some premium content is free if you use a Polish IP. Cloudflare will time you out temporarily if you request large amounts of content. A series in this context isn't made up of seasons and episodes as usual, but rather pages and videos. You can query many videos from a random category of the "Wideo użytkowników" section or a folder of a random user.

    It was kinda fun to use N_m3u8DL-RE on mp4 URLs of various resolutions. Credit goes to @divadsn for figuring out how to decrypt the mp4 URL. It's funny that the devs from this site spent more time defending their non-DRM content, rather than DRM, against automation.
    Code:
    #video
    python widefrog.py "https://www.cda.pl/video/684622bc/vfilm"
    python widefrog.py "https://www.cda.pl/video/75382667f"
    #series
    python widefrog.py "https://www.cda.pl/video/komedia" --query=2:7:3:2
    python widefrog.py "https://www.cda.pl/WojnaIdei/folder-glowny" --query=2:30:3:5
    - dazn.com
    Dazn has free content that can be accessed if you make a free account. When signing up, if it asks you about a credit card, just cancel and you'll be able to enjoy only free content.

    Regarding the service, email/password are needed. Before using this service, go to dazn > Menu > My Account > Devices > Playback devices. Make sure you have only one device connected there (at all times). The user agent of that device needs to be added to config.json . If you used the service before doing this, just add the parameter "--fresh" to your running command (only once is needed) to make sure the old cache is automatically deleted. A VPN can work with this service to download content that is not accessible in your region, but I don't recommend it. If dazn detects your VPN, you won't download anything.

    If you want to download individual content, go to a random video and hit play. The updated URL is the valid input. A series in this context, is not about seasons/episodes, but about rails/videos. A rail is usually horizontal with arrows on the right and left sides. On rare occasions, it can be vertical as well. For the following sample commands, I used GLOBAL to hide the country since I don't think it's relevant. Credit goes to @lomero, @chrisl106 for providing the solution on a random Dazn forum post.
    Code:
    #video
    python widefrog.py "https://www.dazn.com/en-GLOBAL/fixture/ContentId:1tgxrg9du1139g0l7ymj3m904/1tgxrg9du1139g0l7ymj3m904/16rxt36zhuyhx1jkeadzjspv0m"
    python widefrog.py "https://www.dazn.com/en-GLOBAL/home/ArticleId:1xhcteqo20ow9135l0521xzay6/1xhcteqo20ow9135l0521xzay6"
    python widefrog.py "https://www.dazn.com/en-GLOBAL/competition/Competition:5uk137lx4llnufwupxtqi18jq/3p1lp0j5d9yw8t94p1lak8vxz/aafrc8liagg91tyw3d4cjfhbg"
    python widefrog.py "https://www.dazn.com/en-GLOBAL/show/Competition:5nmbccksqu7zpp7cp31i0ewzu/ArticleId:1timiod627kxo1c8mve8wjwgrj/1timiod627kxo1c8mve8wjwgrj"
    #livestream
    python widefrog.py "https://www.dazn.com/en-GLOBAL/fixture/ContentId:2xyjgq7ffrrdck7yi3qc2ixbj/2xyjgq7ffrrdck7yi3qc2ixbj/pzv0wy4hli7k1rus65ptuyz68"
    #series
    python widefrog.py "https://www.dazn.com/en-GLOBAL/competition/Competition:bwowjwcssos25g6yp5i7hgl6t" --query=1:10:2:3
    python widefrog.py "https://www.dazn.com/en-GLOBAL/show/Competition:cdkm65em8l4jxhtpyo6yov858" --query=1:2:1:7
    - eurovisionsport.com
    Read this.

    - fifa.com
    Read this.

    - kijk.nl
    Dutch IP is needed for most content. Most shows have the sections "Afleveringen" and "Clips" which are the focus. The first section contains all of the show's seasons. In the right drop-down list, the seasons are sorted from bottom to top. In some cases, the seasons may have years as an index. The second section, "Clips", may have different names for other shows, for example, "Hoogtepunten" (it depends on the show). A section can be identified as "Clips" if it contains videos that aren't related to other shows.

    The "Clips" section is considered to be next season following the last one from the "Afleveringen" section. The other sections that contain videos tied to other shows are ignored. If you want to download them, go to their respective shows. Regardless of section, all videos are numbered from top to bottom, left to right, in the same order they are displayed, regardless of what's written in their name.
    Code:
    #video
    python widefrog.py "https://www.kijk.nl/programmas/10-voor-taal/BPSOLHDAwPp"
    python widefrog.py "https://www.kijk.nl/films/lock-stock-and-two-smoking-barrels/qw9q3GjAQu7"
    #series
    python widefrog.py "https://www.kijk.nl/programmas/het-jachtseizoen" --query=8:7:9:2
    python widefrog.py "https://www.kijk.nl/programmas/lang-leve-de-liefde" --query=5:217:6:2
    python widefrog.py "https://www.kijk.nl/programmas/de-538-ochtend-met-wietze-en-klaas-eindejaarsgesprek" --query=2021:1:2022:1
    python widefrog.py "https://www.kijk.nl/programmas/de-laatste" --query=2019:10:2020:2
    python widefrog.py "https://www.kijk.nl/programmas/dwars-door" --query=1:2:1:4
    - mediasetinfinity.mediaset.it
    Some videos need Italian IP. I don't use good paid VPNs so I have no way of testing if the geographically restricted videos work but they should in theory. When you click on a random video, you'll have the button "Vai alla serie". Click on it and you'll have multiple separate horizontal sections filled with videos (for example Puntate, Servizi, etc.). Each section is followed by a small arrow. Click on the section title and you'll be redirected to a collection of videos. That collection is interpreted as a list by the tool and can be downloaded.

    The manifest with the highest quality isn't always available directly through the browser but the tool finds it through URL editing. Credit goes to @white_snake for explaining this trick.
    Code:
    #video
    python widefrog.py "https://mediasetinfinity.mediaset.it/video/studioapertomag/gustosi-piatti-da-palermo_F312329301352C01"
    #list
    python widefrog.py "https://mediasetinfinity.mediaset.it/programmi-tv/superpartes/puntate_SE000000001278,ST000000004154,sb100025733" --query=:2::5
    python widefrog.py "https://mediasetinfinity.mediaset.it/browse/regione-piemonte_e6538f0b2a0e845001909118d" --query=:3::7
    - nba.com
    Browser cookies are needed for some content only. A list of videos for this site means the page that you access when you click "See More" on the right side of a horizontal grid of videos. The default order is top-bottom.
    Code:
    #video
    python widefrog.py "https://www.nba.com/watch/video/the-fast-break-mar-10-2"
    python widefrog.py "https://www.nba.com/game/ind-vs-orl-0022300928?watchRecap=true"
    #list
    python widefrog.py "https://www.nba.com/watch/list/collection/g-league-ignite-fcc-highlights" --query=:2::5
    - npo.nl
    Only the /start/ and /npo3/ sections from that site are allowed. Regarding /npo3/, a list means a page where multiple npo3 videos are displayed. The order is top to bottom and only videos are considered to be valid elements. Articles are ignored. Regarding /start/, a show where only the section "Uitzendingen" is displayed is considered a list and the order is top to bottom. If the show has multiple seasons, those are indexed bottom-top instead and the same applies to their episodes. The seasons always start from index 1 (had to do this because some shows had seasons numbered as years, and some seasons didn't even have numbers).

    Sadly, some content is geo-restricted to the Netherlands and the content manifest is tied to the user's IP so you need a VPN for downloading as well. But if you just want non-restricted content, everything else is fine.
    Code:
    #video
    python widefrog.py "https://npo.nl/start/video/het-leven-is-vurrukkulluk"
    python widefrog.py "https://npo.nl/start/serie/het-mooiste-meisje-van-de-klas/seizoen-9/joyce_4/afspelen"
    python widefrog.py "https://npo.nl/npo3/mijn-vader-verbrak-contact-wegens-mijn-zwangerschap/16-05-2024/WO_KN_20194462"
    #list
    python widefrog.py "https://npo.nl/start/serie/dit-was-het-nieuws" --query=:5::8
    python widefrog.py "https://npo.nl/npo3/atje-voor-de-sfeer-met-mark-baanders/POMS_S_POWN_20135656" --query=:2::4
    #series
    python widefrog.py "https://npo.nl/start/serie/hunted" --query=10:5:11:7
    - open.spotify.com
    Email/password are needed for this service. As mentioned previously, only video podcasts are allowed. Many tools for Spotify specialize in audio so I focused on video only. Librespot, the package used by this service, will create locally the file credentials.json. Don't delete it, it will be created next time again (you still need to leave your credentials in the config.json file).

    This is one reason why you should run the tool only in the main folder since the JSON file of the module is created relative to the path from where you execute the script. The service also has support for a list of videos. A list in this context means the list of podcasts of a content creator. They are numbered from top to bottom.
    Code:
    #video
    python widefrog.py "https://open.spotify.com/episode/4dbjxVECWt1p2CcGrs7Wen"
    #list
    python widefrog.py "https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk" --query=:2::5
    - pianogroove.com
    I added this service just to see how an HLS AES service would fit into this program. Since most of the content is locked behind a paywall, only the free preview will be downloaded. For this site, a list means the set of videos that belong to a specific course (numbered from top to bottom starting with the small intro video as the first index).
    Code:
    #video
    python widefrog.py "https://www.pianogroove.com/blues-piano-lessons/minor-blues-introduction/"
    #list
    python widefrog.py "https://www.pianogroove.com/jazz-piano-lessons/jazz-piano-foundations/" --query=:2::4
    - play.tv3.lt
    The service has support for h265 content. The h265 manifest will be merged with the default h264 one and can be downloaded at the same time. Lithuanian IP is needed if you want to watch some content on the browser, but you don't need a VPN at all when it's about downloading. The site has some livestreams but unfortunately, they can't be downloaded. The service has support for live streams built in just in case but I haven't found any live content that uses Widevine on their site to test it.

    A list for this site means the page of videos that you access when you click "Žiūrėti viską >" on a horizontal grid of videos or after you choose a category from "Kategorija >". Only the default unsorted order is considered and the numbering is left-right, top-bottom. The shows of this site can be found in the "Serialai", "Laidos" and "Vaikams" sections. If you click a random episode, you can access its show by clicking the main show's title.

    The episodes of a show's season are usually numbered from right to left if proper numbering is missing (like S02E02). Some seasons may have an additional grid of videos called "Klipai". Those are short clips related only to that specific season. That grid can be downloaded as a collection as well and is considered to be an additional season. The "Klipai" videos are numbered from left to right instead. If a show has the numbered seasons 1, 10, and 100 then their corresponding "Klipai" seasons are numbered 101, 102, and 103 (in the same order, 1<=>101, 10<=>102, and 100<=>103).
    Code:
    #video
    python widefrog.py "https://play.tv3.lt/series/nenugalima-meile,serial-6053655/serija-13,episode-6053757"
    python widefrog.py "https://play.tv3.lt/shows/starkus-stato-,serial-3535772/serija-6,episode-4853188"
    python widefrog.py "https://play.tv3.lt/news/dienos-pjuvis,serial-2941600/dienos-pjuvis-is-ko-atims-ir-kam-prides--is-kur-valdzia-paims-pinigu-gynybai,episode-7577486"
    python widefrog.py "https://play.tv3.lt/clip/tv3-zinios-ukraina-rusijai-kur-yra-zuvusiu-karo-belaisviu-kunai,clip-6831718"
    python widefrog.py "https://play.tv3.lt/Sports/ilgoji-pertrauka,serial-6858901/ilgoji-pertrauka-pao-triumfas-kaip-trauma-keicia-kevanso-situacija-ir-grubi-teiseju-klaida-panevezyje-,episode-7491244"
    python widefrog.py "https://play.tv3.lt/lives/tv3-lt,live-2831094/tv3-zinios,programme-7547429"
    python widefrog.py "https://play.tv3.lt/kids_series/ar-zinai-kaip-as-tave-myliu,serial-1601493/serija-49,episode-1601570"
    #list
    python widefrog.py "https://play.tv3.lt/news/sections/tv3-zinios-1600,2870499" --query=:5::10
    python widefrog.py "https://play.tv3.lt/shows/slocaltvshowslt,4197901" --query=:7::9
    python widefrog.py "https://play.tv3.lt/news/tv3_zinios,4198085" --query=:3::7
    #series
    python widefrog.py "https://play.tv3.lt/shows/tevai-paprastai,serial-4654553" --query=3:10:4:2
    python widefrog.py "https://play.tv3.lt/series/cesapiko-krantai,serial-5649152" --query=3:2:4:2
    python widefrog.py "https://play.tv3.lt/news/dienos-pjuvis,serial-2941600" --query=2022:700:2023:2
    python widefrog.py "https://play.tv3.lt/movies/madagaskaro-pingvinai,serial-3187159" --query=3:5:3:7
    - plus.fifa.com
    A list for this site means the page where the showcases are displayed. The order of that page is considered to be the default one (by popularity) and the videos are indexed from top-bottom to left-right. A list can also mean the results from a filter search after accessing:
    https://www.plus.fifa.com/en/archive
    Make sure you aren't using the default filters (the empty ones). You have to select at least one filter from the left side.

    The series URL needs to be a URL that points to all seasons for a specific series. It doesn't work if you use a season URL. If you don't know how to obtain the series URL, click on a random season URL, then click the main title. Regarding the audio tracks of a video from this site. Multiple audio languages are available and each one is on a different mpd URL. The downloader is looking for all of them and it merges them in a single mpd file.
    Code:
    #video
    python widefrog.py "https://www.plus.fifa.com/en/player/0227a034-a0c7-405d-897a-aaa103809e88?catalogId=6339b79e-5a0b-41a7-ba30-8c37d042e065"
    #list
    python widefrog.py "https://www.plus.fifa.com/en/showcase/1994-fifa-world-cup-usa-highlights/abc35ac9-0859-48b7-88aa-2ed8936290e7" --query=:2::4
    python widefrog.py "https://www.plus.fifa.com/en/archive?filters=video-type%3Aplayer-awards-fifa-plus-archive-project-collections%2Cseason%3Afifa-u-17-world-cup-indonesia-2023tm%2Ccompetition%3Afifa-women-s-world-cuptm%2Ccompetition%3Afifa-u-17-world-cup" --query=:3::5
    #series
    python widefrog.py "https://www.plus.fifa.com/en/content/when-the-world-watched/3f3a5286-32e7-4587-a094-0edb473d3ed2" --query=1:2:2:2
    - plus.rtl.de
    Because you need a good German VPN for most content I didn't bother with anything else, other than individual content. Didn't test any restricted content but it should in theory work.
    Code:
    python widefrog.py "https://plus.rtl.de/video-tv/shows/hilfe-die-camper-kommen-861468/2023-4-971471/episode-6-die-verbleibenden-paare-erreichen-ihr-ziel-in-spanien-861475"
    - ptvflix.org
    Email/password needed. This site was weird. I dunno what triggers this scenario, but sometimes all the free content will get temporarily locked (a little lock icon will appear on each show thumbnail). Either from too much downloading, too much viewing, or anything else. Maybe it happens if you aren't from Pakistan, really don't know what to say. Regardless, this block is temporary and will go away in 30 min / 1 hour. If you're worried about this, just use a burner account. For all show URLs, the section "Other episodes " is considered to be Season 0 as an index.
    Code:
    #video
    python widefrog.py "https://ptvflix.org/player/4185"
    #series
    python widefrog.py "https://ptvflix.org/category/843" --query=0:2:0:3
    python widefrog.py "https://ptvflix.org/category/646" --query=1:5:1:11
    - rakuten.tv
    I don't know how relevant is this but I advise you to use an emulated cdm that's from Google Pixel. If you use a different CDM and the tool is not working, I'm gonna have to take a look in private at that CDM and how the downloader is behaving. The site is weird when it comes to manifests. A video with multiple audio tracks in different languages has multiple different manifest mpd URLs. So to get all the audio tracks you need to request all the mpd URLs. To include them all in one single download, I merged them. I don't know how good is this fix so let me know if the tool crashes for a specific video with multiple audio tracks.

    You can download trailers for any content. When you click on a movie/show, you'll see a button called "Trailer". Click on it and take the updated URL if you want that trailer. If you want to download a show with series/episodes click on one of them and a popup window will appear. The URL will change and you can take that as valid input (regardless of where the show was found). Some seasons may not be numbered properly (some can use years as an index) so the default order is top-bottom regardless of what's written there.

    The livestream subtitles are kinda weird for some content. Some of the subtitles are longer than the live content itself when you download a portion of it so it is advised to skip any captions/additional subtitles when dealing with livestreams. Credit goes to @stabbedbybrick for explaining in forum posts why you can't use the browser requests when dealing with this site and some possible solutions. For the following commands, GLOBAL was used to replace the country because it shouldn't be relevant.
    Code:
    #video
    python widefrog.py "https://www.rakuten.tv/GLOBAL/player/movies/stream/bojan-beyond-the-smile"
    python widefrog.py "https://www.rakuten.tv/GLOBAL/player/movies/trailer/rumeysa-walking-tall"
    python widefrog.py "https://www.rakuten.tv/GLOBAL/player/episodes/stream/fast-forward-1/fast-forward-1-2"
    python widefrog.py "https://www.rakuten.tv/GLOBAL/player/seasons/trailer/champions-1"
    #livestream
    python widefrog.py "https://www.rakuten.tv/GLOBAL/live_channels/gusto-tv-new"
    #series
    python widefrog.py "https://www.rakuten.tv/GLOBAL/gardens/avod-fast?content_type=tv_shows&tv_show_id=discovering-canary-islands&content_id=discovering-canary-islands-1" --query=1:3:2:2
    python widefrog.py "https://www.rakuten.tv/GLOBAL/search?q=fast&content_type=tv_shows&tv_show_id=fast-forward&content_id=fast-forward-1" --query=1:2:1:4
    - rmcbfmplay.com
    Email/password needed, as well as French IP. A list in this context means a show page where there aren't any sections labeled "Saison" (the order is left-right).
    Code:
    #video
    python widefrog.py "https://www.rmcbfmplay.com/video/rmc-bfm-play/alexandre-le-grand-la-vraie-histoire-dun-conquerant-de-legende?contentId=Product::NEUF_BFMAVOD_BAV984224866527&universe=PROVIDER"
    #list
    python widefrog.py "https://www.rmcbfmplay.com/info-programme/rmc-story/retour-a-linstinct-primaire?contentId=Product::NEUF_NUM23_N23_934016897527&universe=PROVIDER" --query=:2::4
    #series
    python widefrog.py "https://www.rmcbfmplay.com/info-programme/rmc-bfm-play/australie-la-ruee-vers-lor?contentId=Product::NEUF_BFMAVOD_BAV_623218986527&universe=PROVIDER" --query=2:4:3:4
    - rsi.ch
    Read this.

    - shahid.mbc.net
    Read this.

    - tf1.fr
    Email/password needed, as well as French IP. A list in this context means the sections of a show page that aren't labeled as "Tout". Examples: "Extrait", "Exclu", "Bonus", etc.
    Code:
    #video
    python widefrog.py "https://www.tf1.fr/tf1-series-films/le-chacal/videos/le-chacal-50497079.html"
    #list
    python widefrog.py "https://www.tf1.fr/tf1/les-feux-de-l-amour/videos/bonus" --query=:5::10 
    #series
    python widefrog.py "https://www.tf1.fr/tmc/les-mysteres-de-l-amour/videos" --query=18:5:19:20
    - threenow.co.nz
    New Zealander IP is needed. For some reason, you need an account to watch their content on the browser but you don't need one for downloading. If a show with multiple seasons contains as well the "Extras" section, the index of that section is considered to be the next one after the last season. For some episodes, their index starts at 0 (very rare though). So make sure what you're attempting to download is correct by checking the generated commands.
    Code:
    #video
    python widefrog.py "https://www.threenow.co.nz/shows/married-at-first-sight-nz/season-4-ep-1/1713735158325/M85501-832"
    #series
    python widefrog.py "https://www.threenow.co.nz/shows/high-country/1712093997956" --query=1:5:2:1
    python widefrog.py "https://www.threenow.co.nz/shows/7-days/61183" --query=2023:5:2024:2
    python widefrog.py "https://www.threenow.co.nz/shows/below-deck/S1647-006" --query=7:2:11:4
    python widefrog.py "https://www.threenow.co.nz/shows/toke/S2279-908" --query=1:0:1:0
    - viki.com
    All shows from this site have exactly one season with all the episodes. Additionally, a show may have 2 other sections, clips, and trailers. Those are considered "seasons" (2 and 3) and can be downloaded as collections similarly. The site can display the clips and trailers in 2 ways: one big section where they are both present or 2 small separated sections. Regardless of the display method, they are still considered separated seasons as structures. Their order is top to bottom and left to right.
    Code:
    #video
    python widefrog.py "https://www.viki.com/videos/1250242v-bitter-sweet-hell-episode-2"
    python widefrog.py "https://www.viki.com/videos/1249260v"
    #series
    python widefrog.py "https://www.viki.com/tv/36367c-joy-of-life" --query=1:45:3:1
    python widefrog.py "https://www.viki.com/tv/35630c-because-this-is-my-first-life" --query=2:20:3:2
    python widefrog.py "https://www.viki.com/movies/37657c-project-gutenberg" --query=3:2:3:3
    - vrt.be
    Only the section /vrtmax/ is allowed. Belgian IP is needed (for most content). Browser cookies are needed (for most content as well). When clicking on a show, if on the left side there are multiple sections always click on the one that you want to download from and take the updated URL since that is the valid input. If a show doesn't have sections then the show URL is the proper input.

    If you want the seasons of a show, you're gonna have to select the section that offers that content. If that section has a drop-down list (on the right side) from where you can select a specific season, the ones that aren't labeled properly as "Seizoen <number>" will be ignored. If you want the non-season ones downloaded as well, you're going to have to click on one of them and take the updated URL that will now contain a query parameter (for example: ?seizoen=extra). The input will be processed as a list and the numbering starts from top to bottom.

    If you select any other left-side section that isn't responsible for seasons (for example: bloopers, extras, etc.), each horizontal rail that contains videos is considered to be an indexed collection (equivalent to "season"), and the numbering is left to right. Similar to how the shows were managed, you can also download podcasts (in batch as well). Go to a random podcast and click "Meer van dit programma" to go to the main URL. The same previous explanations from the classic shows apply here in the same way.

    In addition, you can also download radio and livestream audio. Go to the main page of a radio channel and select the "Uitzendingen" section. That will be treated as a list (numbered from top to bottom). Haven't found any livestream videos to test the downloader sadly.
    Code:
    #video
    python widefrog.py "https://www.vrt.be/vrtmax/a-z/de-gruffalo/2009/de-gruffalo/"
    #audio
    python widefrog.py "https://www.vrt.be/vrtmax/podcasts/mnm/0/22-minuten-stomme-vragen-/3/frances-lefebure/"
    python widefrog.py "https://www.vrt.be/vrtmax/luister/radio/d/de-mnm-weekendploeg~55-278/de-mnm-weekendploeg~55-39614-0/"
    #livestream
    python widefrog.py "https://www.vrt.be/vrtmax/livestream/audio/studio-brussel/"
    #list
    python widefrog.py "https://www.vrt.be/vrtmax/a-z/-likeme/?seizoen=surprise#reeksen" --query=:4::8
    python widefrog.py "https://www.vrt.be/vrtmax/luister/radio/u/ultratop50~55-26/#uitzendingen" --query=:2::4
    #series
    python widefrog.py "https://www.vrt.be/vrtmax/a-z/doc-martin/#afleveringen" --query=1:5:2:8
    python widefrog.py "https://www.vrt.be/vrtmax/a-z/thuis/#podcasts" --query=1:10:2:2
    python widefrog.py "https://www.vrt.be/vrtmax/a-z/postbus-x/" --query=1989:6:1989:12
    python widefrog.py "https://www.vrt.be/vrtmax/podcasts/radio-1/v/voorproevers/#afleveringen" --query=1:155:2:5
    - vtmgo.be
    Browser cookies are needed. I didn't manage to figure out the refresh mechanism so once in a while you're gonna have to manually refresh them by playing a random video in your browser.
    Code:
    #video
    python widefrog.py "https://www.vtmgo.be/vtmgo/afspelen/2d6b57a5-c129-45a2-95dc-ba5e06f32716"
    #series
    python widefrog.py "https://www.vtmgo.be/vtmgo/familie~96a49148-59f6-420c-9b90-8b058760c467" --query=5:200:6:3
    - watch.globaltv.com
    Canadian IP is needed. The content that needs a provider account is not supported. To get the right URL for a collection of videos, click on a random show and you will see multiple sections for that content: Episodes, Extras, Deleted Scenes, etc. (it depends on the show). When you click on a section from those, the URL changes and that is your valid input. If the chosen section is "Episodes" and contains other subsections labeled as "Season" the input will be considered a series. In any other case, it is considered a list.
    Code:
    #video
    python widefrog.py "https://watch.globaltv.com/movie/WNET0056532040000500"
    #livestream
    python widefrog.py "https://watch.globaltv.com/channel/215422c9-d1b9-4009-aaca-32e403f22b01"
    #list
    python widefrog.py "https://watch.globaltv.com/series/32666602/collection/1054443075512/" --query=:2::4
    python widefrog.py "https://watch.globaltv.com/series/411617347723/collection/902261827613/" --query=:5::7
    #series
    python widefrog.py "https://watch.globaltv.com/series/f7a04c78-c1ff-11ee-ac50-0242ac110005/collection/4f809a02-caa1-11ee-abe3-0242ac110004/" --query=2:5:3:6
    - wittytv.it
    A list in this context means the videos from a page after you press "Scopri di piu". The URL needs to have the query parameters "transmissioni" and "category_name". The manifest with the highest quality is hidden but the tool searches for it by using some simple URL editing (same as mediasetinfinity).
    Code:
    #video
    python widefrog.py "https://www.wittytv.it/uomini-e-donne/lunedi-11-marzo-2"
    #list
    python widefrog.py "https://www.wittytv.it/?trasmissioni=cat-originals&category_name=google-bar" --query=:2::4
    - zee5.com
    Even though the shows from this site have Episodes, I haven't seen any Seasons in their data structures. To get to the main URL of a show, click on a random episode, then click on the show's title. The hidden manifest with the highest quality is obtained through URL editing (thanks again @white_snake for explaining how).
    Code:
    #video
    python widefrog.py "https://www.zee5.com/global/movies/details/kaagaz/0-0-1z536625"
    python widefrog.py "https://www.zee5.com/global/tv-shows/details/navri-mile-hitlerla/0-6-4z5521328/latest"
    #list
    python widefrog.py "https://www.zee5.com/global/tv-shows/details/pavitra-rishta/0-6-133" --query=:1390::1410
    For all these services, the --query parameter is optional. It is completely ignored if it's used with individual content, and for collections, if it's missing, it will just grab the entire set. The tool allows for a txt file input as well. The file can contain a list of URLs (each URL on a newline). The advantage to this is that you can download at the same time N URLs spread across M services (provided you don't have 2 conflicting services with different geographic restrictions). So basically you can do something like this:
    Code:
    python widefrog.py "urls.txt" --query=1:2:3:4
    Where the content of "urls.txt" can be:
    Code:
    https://35mm.online/vod/animacja/pani-twardowska
    https://www.aloula.sa/en/episode/19934
    https://open.spotify.com/episode/4dbjxVECWt1p2CcGrs7Wen
    https://www.pianogroove.com/blues-piano-lessons/minor-blues-introduction/
    https://www.plus.fifa.com/en/content/when-the-world-watched/3f3a5286-32e7-4587-a094-0edb473d3ed2
    https://ptvflix.org/category/646
    I may extend some of these services if there are a lot of requests. For example: I may add livestream support for some sites if there's interest in it.

    Do let me know if:
    - I missed some hidden subtitles.
    - Some collection queries are not working as expected (either wrong season, wrong episode, etc.).
    - A service is broken for a specific URL because no amount of testing will get rid of all bugs after all. I don't have any personal interest in any of those services so unless someone notifies me that a service is broken, I will have no way of knowing (don't expect a quick fix though).

    It would be nice if:
    - You wouldn't request a specific service to be added. When it comes to adding new services, I just cherrypick once in a while a random site based on some personal criteria when I'm bored.
    - You wouldn't spam this post asking for download links for any of these services. You should learn to use the program since it's better in the long run or just make a separate forum post for your issue.
    - In the eventual case that you don't know how to use a specific service, just Ctrl+F search for your site and look at the example commands.
    - You wouldn't talk about paid content. Even if the program might allow for paid content downloading on the rare chance. That is entirely by accident and it's because their site is badly designed.

    Regarding errors, a message is always displayed. In any scenario, first, you check if what you want to download can be played on your browser currently. If it can be played, check the current version of your program and see if it's the latest version. If not, then update and maybe you get lucky. If the error still happens, then check the message. If it has the prefix [USER_ERROR] that's something that can be fixed by you. If instead, it has the [APP_ERROR] prefix, you should leave a message on this post with the full error. You should also add the parameter --debug to your command and write what's displayed there as well.

    I'd really appreciate it if this post remains only a support thread for any eventual relevant issues. For Python-related issues, you can see Stackoverflow, and for CDM issues the sticky threads of this forum are useful. If anyone is interested in porting these services to Devine or anything else so more people can use it, then you have my full approval if you want to use this tool as a reference.

    In the case where the result is good, I'll just drop the ported services since I don't like redundant features or lower-quality services (plus I'll have fewer services to maintain). I also may drop a service if a random dev from their site makes it obvious that they lurk around or if their VPN restrictions increase. I'll edit this post and change the zip URL at the top if a new version appears.

    Finally, I'd like to thank @white_snake for his testing and amazing feedback. You're awesome man.

    Edit: If you have any relevant questions, you can ask them here. Don't PM me strictly about this program. After all, this is a support thread for a reason.
    Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 27th Jun 2024 at 12:23. Reason: typos, grammar, spelling, clarifications, new services, version release, etc.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  2. Search, Learn, Download! Karoolus's Avatar
    Join Date
    Oct 2022
    Location
    Belgium
    Search Comp PM
    Very nice share! Well done

    Btw, I could share the way the token refresh works in VTMGo if you're interested?
    Last edited by Karoolus; 14th May 2024 at 07:57.
    Quote Quote  
  3. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    I'll be using this post as the next part of the first main post because of text length limitations.

    2. Usage
    - 6play.fr
    French IP (for most content) and email/password are needed. Make sure your account has at least one profile that is adult (not kids). If you ever edit the account profiles (especially if you ever delete one), delete the service's corresponding cache and run the script after that. Audio podcasts can be downloaded as well but unfortunately only in collections because the site doesn't offer easily an individual URL for a specific podcast.

    A series in this context is structured in rails of videos. Each horizontal rail (with little arrows on the left/right side) represents a season. The numbering is top-down and left to right. Doesn't matter how the rails are called (even if they are named "Saison <number>"). Videos that aren't released yet and are locked, aren't counted in the series collection. In the rare cases of podcasts, the rail of contents is considered to be vertical.
    Code:
    #video
    python widefrog.py "https://www.6play.fr/below-deck-mediterranee-p_26014/s4-e1-pardonnez-mon-francais-c_13075174"
    #audio
    python widefrog.py "https://www.6play.fr/les-voix-du-crime-p_25750" --query=1:2:1:2
    #series
    python widefrog.py "https://www.6play.fr/lois-et-clark-les-nouvelles-aventures-de-supe-p_25720" --query=3:17:4:2
    python widefrog.py "https://www.6play.fr/6play/top-5-series-realite-6play-5-f_887" --query=1:5:2:1
    python widefrog.py "https://www.6play.fr/lis-moi-une-histoire-p_25892" --query=1:3:1:5
    - eurovisionsport.com
    Email/password are needed. The manifests from this site are kinda broken and you'll get 500 internal errors for random fragments. Luckily, you can ignore this and the video can still be played. A series in this context is structured in rails/videos. A rail is always horizontal and can be found in a sport category or federation category.

    A series can also mean a past competition that took place on multiple days. If a day has at least one video, then it's considered a "season", otherwise it's ignored. The season numbering starts from 1 regardless of the day number. One minor problem with this feature is that the API sorting method for videos on a specific day isn't consistent. So their index position might be wrong in some cases (+ or - 1). If you applied a query on a particular episode range, make sure what you download is good. But if you're interested in downloading a full day of videos, there won't be any problems.
    Code:
    #video
    python widefrog.py "https://eurovisionsport.com/mediacard/EVS_240429_LEC_25261_"
    #series
    python widefrog.py "https://eurovisionsport.com/explore/sport?id=EBU-Home-Racket" --query=1:3:2:2
    python widefrog.py "https://eurovisionsport.com/explore/federation?id=LandingPage-CJR" --query=2:2:3:1
    python widefrog.py "https://eurovisionsport.com/explore/competition?id=Generic-Schedule-Landing-Page&cId=20240229IBUHolmenkollen" --query=2:3:3:2
    - fifa.com
    The sole purpose of this service is to allow embedded /watch/ fifa URLs that redirect to plus.fifa.com. Thus, it is dependent on the plus.fifa.com service. Make sure they're both present in the services folder if you intend to use one of them.
    Code:
    #video
    python widefrog.py "https://www.fifa.com/en/watch/7wST4MTAbpXRAAmufEpCbx"
    - rsi.ch
    This site doesn't use DRM at all. Only the /play/ section is supported. Swiss IP is needed for most content (not for the downloading stage though). The only livestreams that are allowed are the ones that contain the query parameter "urn" in their URL. A list for this site means the collection of URLs that are the result of a filtered search. After pressing the search button ("Cerca"), select at least one filter, click apply, and take the updated URL as input.

    A series for this site is represented by the page of a show. If you can't find it, then click on a random video, scroll down, and click "Pagina del programma". Each section of videos represents a season. Some extra videos (like trailers), may appear before the rails and their group is considered a "season" as well. The order is top-down, left-right, regardless of the section's name. A series can also mean the videos from a URL that contains the path /detail/ in it. If you see a group of videos with a little arrow, you can click on it and you'll be redirected to a "/detail/" URL.

    A weird bug happens rarely on their front end and sometimes you get some videos appearing multiple times on specific collections. So the index of downloaded videos may not match with what is shown on the page. Not my fault since it's a bug on their side. Credit goes to @aqzs for explaining the forward IP trick.
    Code:
    #video
    python widefrog.py "https://www.rsi.ch/play/tv/-/video/euro-2024-lunico-precedente-agli-europei-tra-svizzera-e-italia-e-lultima-vittoria-rossocrociata-27-06-2024?urn=urn:rsi:video:2188754"
    #livestream
    python widefrog.py "https://www.rsi.ch/play/tv/-/video/euro-2024-la-rete-dell1-1-di-mattia-zaccagni-in-croazia-italia-24-06-2024?urn=urn:rsi:video:2186168"
    #list
    python widefrog.py "https://www.rsi.ch/play/ricerca?query=footbal&shows=urn%3Arsi%3Ashow%3Atv%3A0&topics=urn%3Arsi%3Atopic%3Atv%3A8&properties=hdAvailable" --query=:5::7
    #series
    python widefrog.py "https://www.rsi.ch/play/tv/programma/narcos?id=704026" --query=2:5:3:2
    python widefrog.py "https://www.rsi.ch/play/tv/programma/la-strategia-dellacqua?id=702315" --query=1:1:2:2
    python widefrog.py "https://www.rsi.ch/play/tv/programma/a-tutta-champions?id=703950" --query=1:4:1:6
    python widefrog.py "https://www.rsi.ch/play/tv/detail/i-video-piu-recenti?id=cf7aa4e9-b234-41de-ac6c-84bf50e1bcc7" --query=1:5:1:10
    - shahid.mbc.net
    There is some premium content that becomes free if you use an Emirati IP. Because Arabic names are bugged, some of the URLs will have the content ID as the output name. All shows have an episode section. Some can have additional sections like "Trailers", "Clips", etc. Those can be downloaded as collections. For each season, those extra videos are all grouped (in the same order as the original sections).

    If you have seasons 3, 7, and 9, then their corresponding extra seasons are 10, 11, and 12 (same order 3 <=> 10, 7 <=> 11, 9 <=> 12). Because a show doesn't have a main page, it doesn't matter which season URL you're using as input. The only thing that matters is the query range. Credit goes to @aqzs for explaining the MPD trick so you can obtain the highest quality available.
    Code:
    #video
    python widefrog.py "https://shahid.mbc.net/en/player/episodes/Cloud-Kitchen-season-1-episode-1/id-1008736"
    python widefrog.py "https://shahid.mbc.net/en/player/movies/Special-Interview/id-979254"
    #livestream
    python widefrog.py "https://shahid.mbc.net/en/livestream/MBC1/livechannel-387238"
    #series
    python widefrog.py "https://shahid.mbc.net/fr/series/Leh-Laa%3F!-season-1/season-413520-413521" --query=3:10:4:2
    python widefrog.py "https://shahid.mbc.net/ar/shows/%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%83%D8%A7%D9%88%D9%8A/show-88548" --query=1:1:1:4
    ------------------------------------------------------------------------------------------------------------------------------------------------
    Originally Posted by Karoolus View Post
    Very nice share! Well done Btw, I could share the way the token refresh works in VTMGo if you're interested?
    Thank you @Karoolus If you don't mind me adding it to the tool, sure why not. I figured out the endpoint used for it, just the flow remained a mystery to me (headers and all that).
    Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 28th Jun 2024 at 00:52. Reason: typos, grammar, spelling, clarifications, new services, version release, etc.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  4. Great job!. Thanks for sharing.
    Quote Quote  
  5. I said it once and I'll say it again, great job mate! And thanks for the shoutout!
    Quote Quote  
  6. Member aqzs's Avatar
    Join Date
    Mar 2024
    Location
    Paris
    Search Comp PM
    As the others said : great job !!
    Quote Quote  
  7. Great job may have found a possible bug ?

    py widefrog.py https://watch.globaltv.com/series/65a52acc-5777-11ec-b478-0242ac110003 --query=1

    for example, I can download individually but doesn't like the query unless it's just me ?
    Quote Quote  
  8. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    New version 1.2.0: added support for ptvflix.org . Anyone interested in this new service that already has this tool, can download it again using the updated URL at the top.

    Originally Posted by jack_666 View Post
    Great job!. Thanks for sharing.
    Originally Posted by grzech67 View Post
    It works perfectly, thank you for sharing.
    Originally Posted by white_snake View Post
    I said it once and I'll say it again, great job mate! And thanks for the shoutout!
    Originally Posted by LittleSoldier View Post
    Great Job Pepe…
    Originally Posted by aqzs View Post
    As the others said : great job !!
    Originally Posted by PSXman_uk View Post
    Great job
    Thanks for the nice words guys. I appreciate it.

    Originally Posted by PSXman_uk View Post
    for example, I can download individually but doesn't like the query unless it's just me ?
    I explained this scenario in the first post. I wanted to separate the season/episodes section of a show from other bonus sections (extra, trailers, deleted scenes etc.) in case people wanted those downloaded as well in collections. In your case you will have to press on the "Episodes" section and use the updated URL:
    Code:
    python widefrog.py "https://watch.globaltv.com/series/65a52acc-5777-11ec-b478-0242ac110003/collection/ac105e0a-7487-11ec-a150-0242ac110006/" --query=1
    If you want all the seasons, just get rid of the --query parameter.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  9. 2nHxWW6GkN1l916N3ayz8HQoi - Thank you very much for this fantastic work
    Quote Quote  
  10. Excellent work, frogman! There's a lot work that goes into something like this, and it's nice to see someone focus on the smaller streaming services for once.

    Keep up the good work!
    Quote Quote  
  11. Thanks for the update I understand where I was going wrong thanks for a great tool
    Quote Quote  
  12. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    v1.3.0: added support for npo.nl

    Originally Posted by PepeForEver View Post
    2nHxWW6GkN1l916N3ayz8HQoi - Thank you very much for this fantastic work


    Originally Posted by stabbedbybrick View Post
    Excellent work, frogman! There's a lot work that goes into something like this, and it's nice to see someone focus on the smaller streaming services for once.

    Keep up the good work!
    Thanks a lot, man. Your program helped me sketch the basics of this.

    Originally Posted by PSXman_uk View Post
    Thanks for the update I understand where I was going wrong thanks for a great tool
    No problem.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  13. Member
    Join Date
    Feb 2022
    Location
    Search the forum first!
    Search PM
    Great stuff!! This forum had no-one sharing anything publicly two years ago - now look at us!!
    Noob Starter Pack. Just download everything DRM.
    https://files.videohelp.com/u/301890/hellyes.zip
    Quote Quote  
  14. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    New version: v1.4.0
    If you're interested in a specific service, Ctrl+F search your site's name and look at the provided use cases. Added support for:
    - cda.pl
    - dazn.com (it has free content): thanks again @snake for testing the service for any possible regional bugs
    - eurovisionsport.com

    The additional tools list and the requirements.txt got updated as well. Might add vrt.be in the next version if it's not too hard to crack.

    Originally Posted by A_n_g_e_l_a View Post
    Great stuff!! This forum had no-one sharing anything publicly two years ago - now look at us!!
    Thanks for the nice words. I don't see any point in hiding these, they're just data scrapers. If any exploits were used, I could understand not wanting to make them public. But in the current state, it's just Python 101.
    Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 22nd May 2024 at 09:50.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  15. Thank you for making a new tool to get videos.
    Quote Quote  
  16. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    v1.5.0: added vrt.be

    Originally Posted by Tom Saurus View Post
    Thank you for making a new tool to get videos.
    You're welcome.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  17. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    v1.6.0: + mediasetinfinity.mediaset.it
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  18. Member
    Join Date
    Aug 2023
    Location
    Turkey
    Search Comp PM
    super dubi big thanks nice work ..
    Quote Quote  
  19. Great script man!
    I used it to download my favorite series on Belgian public TV.
    (The one with Michel, Guido, Frankie and Alain)
    Quote Quote  
  20. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    v1.7.0: +auvio.rtbf.be

    For those of you who already have the tool, there is no need for getting the new version unless you're interested in the added service.

    If someone has available a random 6play.fr video URL where there are no geographic restrictions, feel free to leave a message here (keep in mind that I'm not asking for access to a fancy VPN). I'm interested in adding the site but I can't find accessible content to test stuff. I doubt there's any since I would have found it by now but it's worth a shot asking here.

    Originally Posted by senkron24 View Post
    super dubi big thanks nice work ..
    You're "super dubi big" welcome.

    Originally Posted by Flippi View Post
    Great script man!
    I used it to download my favorite series on Belgian public TV
    Thanks a lot, man. It feels nice knowing that the stuff I developed is put to good use. Happy downloading and enjoy the tool while you can. Sites change all the time.
    Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 31st May 2024 at 13:03.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  21. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    v1.8.0: +rakuten.tv (thanks @brick for testing the prototype on multiple regions).
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  22. Im trying to get this series from Rakuten tv as a test
    https://www.rakuten.tv/uk?content_type=tv_shows&tv_show_id=andromeda&content_id=andromeda-1
    tried this from the popup no joy also tried
    https://www.rakuten.tv/uk/player/episodes/stream/andromeda-1/andromeda-1-1
    Also doenst work for me unless im doing it wrong
    Quote Quote  
  23. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    Originally Posted by PSXman_uk View Post
    Also doenst work for me unless im doing it wrong
    To avoid spamming this post while blindly guessing the cause of your problem I sent you a PM. Can't really do much without a proper VPN but I can try. I managed to get it right for my country so there is some small chance I may have missed something.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  24. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    The rakuten issue was solved. There was a small problem due to some miscommunication on my part. I wasn't aware the show URL can have multiple forms. I edited the first post to detail the problem and solution. In the next tool version, I'll change it so that any type of show URL can be accepted (for now it remains like this since it isn't a major problem). Basically, make sure you select a show after you click the "free" section. The popup URL has to have avod-fast in it.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  25. The exe does not work after unzipping
    Quote Quote  
  26. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    Originally Posted by Bruce236 View Post
    The exe does not work after unzipping
    Have you properly installed all the necessary additional tools? How are you running that exe? I hope you aren't double clicking it and expecting a full GUI to magically appear. It's meant to be ran from cmd.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  
  27. I click on the windows explorer bar and type 'cmd' - that part is fine, and it comes up as the normal screen, but then when entering a link it doesn't work and errors appear.
    Quote Quote  
  28. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    Originally Posted by Bruce236 View Post
    I click on the windows explorer bar and type 'cmd' - that part is fine, and it comes up as the normal screen, but then when entering a link it doesn't work and errors appear.
    Show screenshot.
    --[----->+<]>.++++++++++++.---.--------.
    [*Have questions about widefrog? You can find all your answers here*]
    Quote Quote  



Similar Threads

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