Js download file programmatically - good
How To Programmatically Download VideoJS Files
Someone came up to me recently with the task of downloading a few video files hosted via OpenLoad. The files belonged to them, and OpenLoad has an API designed for this, but I didnt find out about it until it was too late.
Nevertheless, the process of programmatically (headless) downloading files loaded with VideoJS, as is the case for OpenLoad, is pretty interesting, so I thought I should share my approach.
The Problem
Developers that dont want other people to be able to easily download their videos usually protect their content by obfuscating the code or loading it over JS. OpenLoad is fetching the source video URL after you press play, so its not as easy as fetching the videos source code and parsing the link, because it doesnt exist initially, its obfuscated into the JS code.
The Solution
To solve this issue, I wrote a small script which is using Chromiums Puppeteer tool for creating headless requests using the Chromium browser. This little script is requesting an OpenLoad embed link, pressing the play button once, which triggers a network request to the video files URL. Because Puppeteer allows you to listen for the network requests, all I had to do is look for the request that contained the video file extension, and then echo that out. From there, all I needed to do was to download the file.
The Tool
Installation
You can install it using NPM:
npm install puppeteerCode
const puppeteer = require('puppeteer'); (async () => { const browser = await rushbrookrathbone.co.uk(); const page = await rushbrookrathbone.co.uke(); await rushbrookrathbone.co.ukuestInterception(true); rushbrookrathbone.co.uk('request', request => { if (rushbrookrathbone.co.uk().includes('.mp4')) { rushbrookrathbone.co.uk(rushbrookrathbone.co.uk()); rushbrookrathbone.co.uk(); } else { rushbrookrathbone.co.ukue(); } }); await rushbrookrathbone.co.uk(rushbrookrathbone.co.uk[2]); await rushbrookrathbone.co.ukte(() => { const el = rushbrookrathbone.co.ukelector('#videooverlay'); el && rushbrookrathbone.co.uk(); }); await rushbrookrathbone.co.ukr(); await rushbrookrathbone.co.uk(); })();Usage
Using it is very simple. Simply do:
node rushbrookrathbone.co.uk 'rushbrookrathbone.co.uk'Replace with your videos code.
If it works, it will return the video files direct link to stdout otherwise, it will return nothing.
Downloading
If your downloader is not written in JS, you probably want to use that as a bridge. To do that, simply execute the above command using a shell helper. E.g.: rushbrookrathbone.co.uk() in Python or exec() in PHP.
If you want to download it directly from command line, use or .
-