下载广告牌热门 100(但只有 50)mp3 文件
Download billboard hot 100 (but only 50) mp3 files
哟哟哟哟。我想出了一个疯狂的想法,从广告牌 100 首热门歌曲中选出 50 首,将它们下载成 mp3 文件,然后将它们放在私人在线广播中。
问题是,我这样做的方式不是一个一个地下载每个文件,而是将所有音乐放在一个 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 循环解决了这个问题。
哟哟哟哟。我想出了一个疯狂的想法,从广告牌 100 首热门歌曲中选出 50 首,将它们下载成 mp3 文件,然后将它们放在私人在线广播中。
问题是,我这样做的方式不是一个一个地下载每个文件,而是将所有音乐放在一个 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 循环解决了这个问题。