1. 程式人生 > 其它 >nodejs 爬取m3u8視訊

nodejs 爬取m3u8視訊

技術標籤:nodeJS視訊爬取

let fs =require('fs');
let readline=require('readline');
let request = require("request");
let path = require("path")

let rl=readline.createInterface({
	input:process.stdin,
	output:process.stdout
})
function ques(){//m3u8檔案路徑
	return new Promise(function(resolve,reject){
        rl.question('路徑?\n',function(ans){
            resolve(ans);
        })
    })
}
async function create(){
    let res = await ques()
    let fileStr = fs.readFileSync(res, "utf8");
    let kwArr = fileStr.match(/(start=\d+)&(end=\d+)/g)
    
    //建立資料夾目錄
    var dirPath = path.join(__dirname, "file");
    if (!fs.existsSync(dirPath)) {
        fs.mkdirSync(dirPath);
        console.log("資料夾建立成功");
    } else {
        console.log("資料夾已存在");
    }
    
    //迴圈多執行緒下載
    kwArr.forEach((v,i)=>{
        let start = v.split('&')[0].split('=')[1]
        let end = v.split('&')[1].split('=')[1]
        console.log('start:',start,'end:',end)
        let url = `https://encrypt-k-vod.xiaoe-tech.com/9764a7a5vodtransgzp1252524126/609e6b565285890799813207086/drm/v.f230.ts?start=${start}&end=${end}&type=mpegts&t=5fe4575f&sign=1da9dbb8525129ed54bd58ab5ae84680&whref=appwbcgvkzf4961.pc.xiaoe-tech.com&us=ofWpbDcVF57P`
        let fileName = `out-${start}-${end}.ts`;

        let options = {
            url,
            headers: {
                'Accept': '*/*',
                'Accept-Encoding': 'gzip, deflate, br',
                'Accept-Language': 'zh-CN,zh;q=0.9',
                'Cache-Control': 'no-cache',
                'Connection': 'keep-alive',
                'Host': 'encrypt-k-vod.xiaoe-tech.com',
                'Origin': 'https://appwbcgvkzf4961.pc.xiaoe-tech.com',
                'Pragma': 'no-cache',
                'Referer': 'https://appwbcgvkzf4961.pc.xiaoe-tech.com/',
                'Sec-Fetch-Dest': 'empty',
                'Sec-Fetch-Mode': 'cors',
                'Sec-Fetch-Site': 'same-site',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
            },
        }
        let stream = fs.createWriteStream(path.join(dirPath, fileName));
        request(options).pipe(stream).on("close", function (err) {
            console.log("檔案[" + fileName + "]下載完畢");
            if(kwArr.length === i + 1) {
                console.log("----------所有檔案下載完畢----------");
                composite()
            }
        });

        function composite() {
          // "/b":表示按二進位制合併;不加就預設按字元轉合併,會出問題
            exec("copy /b C:\Users\HC101\Desktop\express\file\*.ts C:\Users\HC101\Desktop\output\100 | 組織創新頂層架構設計(下).ts", (error, stdout, stderr) => {
                if (error) {
                    console.error(`執行的錯誤: ${error}`);
                    return;
                }
                console.log(`stdout: ${stdout}`);
                console.error(`stderr: ${stderr}`);
            });
        }
    })
}
create()