node获取抖音直播间Id
安装依赖
npm install fetch cheerio
pnpm install fetch cheerio
node代码
const fetch = require("fetch");
const cheerio = require("cheerio");
var cookieJar = new fetch.CookieJar();
function get(url) {
return new Promise((resolve, reject) => {
fetch.fetchUrl(url, { cookieJar }, function (err, response, bytes) {
if (err) {
reject(err);
} else {
resolve(bytes.toString("utf-8"));
}
});
});
}
function loadHtml(liveUrl, html) {
var $ = cheerio.load(html);
var regRoomId = /roomInfo[\W\w]*?id_str[\W:]{5}[0-9]+/;
var regNum = /[0-9]+/;
var roomIds = [];
$("script").each((index, el) => {
if (
el.children.length > 0 &&
el.children[0].type === "text" &&
regRoomId.test(el.children[0].data)
) {
var str = regRoomId.exec(el.children[0].data)[0];
var num = regNum.exec(str);
if (num) {
roomIds.push(num[0])
}
}
});
if (roomIds.length > 0) {
return Promise.resolve({ roomId: roomIds.join(',') });
}
return getRoomInfo(liveUrl);
}
let count = 0;
function getRoomInfo(liveUrl) {
count++;
if(count > 5){
return Promise.reject('获取直播间Id失败。')
}
return new Promise((resolve, reject) => {
get(liveUrl)
.then((html) => {
loadHtml(liveUrl, html)
.then((res) => {
if (typeof res === "string") {
var data = JSON.parse(res);
resolve(data);
} else resolve(res);
})
.catch((err) => {
reject(err);
});
})
.catch((err) => {
reject(err);
});
});
};
module.exports = getRoomInfo
const getRoomInfo = require("./room");
getRoomInfo("https://live.douyin.com/1").then((res) => {
const { roomId } = res;
console.log(roomId);
});