Mas Koding
/

Cara Membuat Rest Api Youtube Downloader Dengan Nodejs

Mas Koding
April 27, 2021

Kali ini saya akan membagikan sebuah script nodejs yang berfungsi untuk melakukan scraping data link video youtube di sisi server melalui request link rest api dan menghasilkan output link download video youtube dalam bentuk response json.

Alur Kerja Script

Disini saya telah meracik sebuah script rest api youtube downloader.

var http = require('http');
var unirest = require('unirest');
const isUrl = require("is-valid-http-url");
var beautify = require("json-beautify");
const jsdom = require("jsdom");
const { JSDOM } = jsdom;

var formatThousandsRegExp=/\B(?=(\d{3})+(?!\d))/g,formatDecimalsRegExp=/(?:\.0*|(\.[^0]+)0+)$/,map={b:1,kb:1024,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)},parseRegExp=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function bytes(a,e){return"string"==typeof a?parse(a):"number"==typeof a?format(a,e):null}function format(a,e){if(!Number.isFinite(a))return null;var r=Math.abs(a),t=e&&e.thousandsSeparator||"",p=e&&e.unitSeparator||"",o=e&&void 0!==e.decimalPlaces?e.decimalPlaces:2,n=Boolean(e&&e.fixedDecimals),m=e&&e.unit||"";m&&map[m.toLowerCase()]||(m=r>=map.pb?"PB":r>=map.tb?"TB":r>=map.gb?"GB":r>=map.mb?"MB":r>=map.kb?"KB":"B");var s=(a/map[m.toLowerCase()]).toFixed(o);return n||(s=s.replace(formatDecimalsRegExp,"$1")),t&&(s=s.replace(formatThousandsRegExp,t)),s+p+" "+m}function parse(a){if("number"==typeof a&&!isNaN(a))return a;if("string"!=typeof a)return null;var e,r=parseRegExp.exec(a),t="b";return r?(e=parseFloat(r[1]),t=r[4].toLowerCase()):(e=parseInt(a,10),t="b"),Math.floor(map[t]*e)}

http.createServer(function (req, res) {
    res.writeHead(200, {
        "Access-Control-Allow-Origin": "*",
        "content-type": "text/plain"
    });
    if (req.url.split("/?get=")[1] == undefined == false && isUrl(req.url.split("/?get=")[1]) == true && req.method === "GET") {
      let linkYt=req.url.split("/?get=")[1];
      unirest('GET',linkYt)
      .end(function (resku) {
        const dom = new JSDOM(resku.raw_body);
        let dbSc=dom.window.document.querySelectorAll("script");
        let dbScript=[];
        dbSc.forEach(function(a){
          if(a.innerHTML.indexOf("ytInitialPlayerResponse")>0){
            dbScript.push(a.innerHTML);
          };
        });
        let fixScript="";
        dbScript.forEach(function(b){
          if(b.indexOf("streamingData")>0){
            fixScript=b;
          };
        });
        try{
          eval(fixScript);
          let dbFormat = ytInitialPlayerResponse.streamingData.adaptiveFormats;
          let fixData=[];
          let nameFile="video";
          if(ytInitialPlayerResponse.videoDetails){
            nameFile=encodeURIComponent(ytInitialPlayerResponse.videoDetails.title);
          };
          dbFormat.forEach(function(c){
            var formatData={};
            formatData["url"]=c.url+"&title="+nameFile;
            formatData["mime"]=c.mimeType;
            formatData["size"]=bytes(Number(c.contentLength));
            if(c.fps){
              formatData["fps"]=c.fps;
            }else{
              formatData["fps"]="-";
            };
            if(c.qualityLabel){
              formatData["quality"]=c.qualityLabel;
            }else{
              formatData["quality"]="-";
            };
            fixData.push(formatData);
          });
          res.end(beautify(fixData, null, 2, 100));
        }catch(e){
          res.end("error!");
        };
      });
    } else {
      res.end("error!");
    };
}).listen(process.env.PORT);

Disini saya telah menjalankan script ini secara online dan telah menghasilkan link rest api sebagai berikut : 

https://api-youtube-downloader.blogspot.repl.co/?get=

Untuk menjalankan link rest api ini, kita cukup menambahkan link youtube di akhir link rest api ini. Sebagai contoh, disini saya memiliki link youtube sebagai berikut : 

https://www.youtube.com/watch?v=ZAYxR5WR7js

Lalu link youtube ini saya tambahkan di akhir link rest api, sehingga link akhirnya menjadi seperti berikut :

https://api-youtube-downloader.blogspot.repl.co/?get=https://www.youtube.com/watch?v=ZAYxR5WR7js

Ketika link ini saya jalankan, maka akan menghasilkan output data json dimana data output ini akan menampilkan aneka pilihan link download beserta property lain seperti ukuran file, kualitas dan fps video. Berikut penampakannya :

Rest Api Youtube Downloader


Artikel selanjutnya nanti saya akan membagikan sourch kode dimana saya akan menerapkan rest api ini menjadi sebuah tools online.

Semoga artikel yang singkat ini bisa membantu kamu dalam mengembangkan project berbasis nodejs yang berhubungan dengan youtube. Jika ada kendala dalam penggunaan, silahkan komentar di bawah.

Share Article

Spread the word

4 Komentar

  1. kenapa tidak semua video youtube bisa terdownload? trus yg bisa ke download suaranya gk ada

    BalasHapus
    Balasan
    1. hasil output ada 2 jenis.. audio dan video.. silahkan lihat di bagian mime..

      Knapa dibuat terpisah ? karena kadang orang ada yang hanya perlu download audionya saja..

      Knapa tidak semua video bisa terdownload ? karena sebagian video ada yg terenkripsi.. jadi nanti akan saya update script ini kedepannya..

      Hapus
  2. Wah Keren-keren tutorialnya disini.. saya melihat banyak hal baru di dunia Node JS, mungkin admin bisa buat script juga, yg lagi rame itu saya lihat di grup blogger pada nyari safelink, bisa buat safelink min ?

    BalasHapus
    Balasan
    1. Safelink sudah ada di artikel web saya mas.. silahkan di searching..hehe

      Hapus

Mas Koding

Sharing knowledge about technology, programming tutorials, and the latest web development trends. Built for developers by developers.

Discover

© 2025 Mas Koding. Crafted with h.

System Operational