javascript - 下载 billboard hot 100(但只有 50 个)mp3 文件

标签 javascript node.js ffmpeg youtube screen-scraping

呦呦呦。我有一个疯狂的想法,要从广告牌的 100 首热门歌曲中获取 50 首,将它们下载到 mp3 文件中,然后将它们放在私有(private)在线电台上。
问题是,我这样做的方式不是逐个下载每个文件,而是将所有音乐放在一个 mp3 文件中。到目前为止,这是我的代码(可怕,我知道......我只是想很快把它放在一起)

const { getChart } = require("billboard-top-100");
const ffmpeg = require("fluent-ffmpeg");
const { mkdir } = require("fs");
const ytdl = require("ytdl-core");
const YT = require("scrape-youtube").default;

getChart('hot-100', (err, chart) => {
    if(err) console.log(err);
    chart.songs.length = 50;
    for (var i = 0; i < chart.songs.length; i++) {
        var song = chart.songs[i];
        song.artist = song.artist.replace("Featuring", "feat.");
        var name = `${song.artist} - ${song.title}`;
        YT.search(name).then(res => {
            downloadVideo(res.videos[0].link, name).then(_ => { console.log(""); }).catch(console.log);
        }).catch(err => console.log(err));
    };
});

function downloadVideo(url, name) {
    return new Promise((resolve, reject) => {
        var stream = ytdl(url, { filter: "audioonly", quality: "highestaudio" });
        var start = Date.now();

        ffmpeg(stream)
            .audioBitrate(128)
            .save(`${__dirname}/${new Date().getWeek()}/${name}.mp3`)
            .on("end", _ => {
                console.log(`Downloaded "${name}.mp3" - Took ${(Date.now() - start) / 1000} seconds.`);
                resolve(`${name}.mp3`);
            })
            .on("error", _ => reject("something went wong"));
    });
}

Date.prototype.getWeek = function() {
  var onejan = new Date(this.getFullYear(),0,1);
  return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
}

最佳答案

通过使用 forEach 方法而不是常规 for 循环来解决此问题。

关于javascript - 下载 billboard hot 100(但只有 50 个)mp3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66440704/

相关文章:

javascript - 使用 JavaScript 从超链接加载时的默认下拉值

javascript - 访问 Meteor 模板中的数组值

javascript - UDP组播系统

ffmpeg 结合了 3 个 filter_complex 命令

javascript - 是否可以使用 Google Analytics 信息显示博客查看计数器

javascript - 在运行时使折线更长

javascript - 为什么 jasmine-node 没有选择我的帮助脚本?

node.js - 无法将文件上传到谷歌云存储

ffmpeg 将 mov 转换为 flv

ubuntu - 不再支持 Gstreamer AAC 编码?