mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-08 05:59:00 +08:00
126 lines
4.6 KiB
JavaScript
126 lines
4.6 KiB
JavaScript
const axios = require('../../utils/axios');
|
|
const qs = require('querystring');
|
|
const iconv = require('iconv-lite');
|
|
const cheerio = require('cheerio');
|
|
|
|
module.exports = {
|
|
getUsernameFromUID: async (ctx, uid) => {
|
|
const key = 'bili-username-from-uid-' + uid;
|
|
let name = await ctx.cache.get(key);
|
|
if (!name) {
|
|
const nameResponse = await axios({
|
|
method: 'post',
|
|
url: 'https://space.bilibili.com/ajax/member/GetInfo',
|
|
headers: {
|
|
Referer: `https://space.bilibili.com/${uid}/`,
|
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
},
|
|
data: qs.stringify({
|
|
mid: uid,
|
|
}),
|
|
});
|
|
name = nameResponse.data.data.name;
|
|
ctx.cache.set(key, name, 24 * 60 * 60);
|
|
}
|
|
return name;
|
|
},
|
|
getLiveIDFromShortID: async (ctx, shortID) => {
|
|
const key = `bili-liveID-from-shortID-${shortID}`;
|
|
let liveID = await ctx.cache.get(key);
|
|
if (!liveID) {
|
|
const liveIDResponse = await axios({
|
|
method: 'get',
|
|
url: `https://api.live.bilibili.com/room/v1/Room/room_init?id=${shortID}`,
|
|
headers: {
|
|
Referer: `https://live.bilibili.com/${shortID}`,
|
|
},
|
|
});
|
|
liveID = liveIDResponse.data.data.room_id;
|
|
ctx.cache.set(key, liveID, 24 * 60 * 60);
|
|
}
|
|
return liveID;
|
|
},
|
|
getUsernameFromLiveID: async (ctx, liveID) => {
|
|
const key = `bili-username-from-liveID-${liveID}`;
|
|
let name = await ctx.cache.get(key);
|
|
|
|
if (!name) {
|
|
const nameResponse = await axios({
|
|
method: 'get',
|
|
url: `https://api.live.bilibili.com/live_user/v1/UserInfo/get_anchor_in_room?roomid=${liveID}`,
|
|
headers: {
|
|
Referer: `https://live.bilibili.com/${liveID}`,
|
|
},
|
|
});
|
|
name = nameResponse.data.data.info.uname;
|
|
ctx.cache.set(key, name, 24 * 60 * 60);
|
|
}
|
|
return name;
|
|
},
|
|
getVideoNameFromAid: async (ctx, aid) => {
|
|
const key = `bili-videoName-from-aid-${aid}`;
|
|
let name = await ctx.cache.get(key);
|
|
|
|
if (!name) {
|
|
const nameResponse = await axios({
|
|
method: 'get',
|
|
url: `https://www.bilibili.com/video/av${aid}`,
|
|
responseType: 'arraybuffer',
|
|
});
|
|
const responseHtml = iconv.decode(nameResponse.data, 'UTF-8');
|
|
const $ = cheerio.load(responseHtml);
|
|
name = $('title').text();
|
|
name = name.substr(0, name.indexOf('_哔哩哔哩'));
|
|
ctx.cache.set(key, name, 24 * 60 * 60);
|
|
}
|
|
return name;
|
|
},
|
|
getFavNameFromFid: async (ctx, fid, uid) => {
|
|
const key = `bili-favName-from-fid-${fid}`;
|
|
let name = await ctx.cache.get(key);
|
|
|
|
if (!name) {
|
|
const nameResponse = await axios({
|
|
method: 'get',
|
|
url: `https://api.bilibili.com/x/space/fav/nav?mid=${uid}`,
|
|
headers: {
|
|
Referer: `https://space.bilibili.com/${uid}/#/favlist`,
|
|
},
|
|
});
|
|
if (nameResponse && nameResponse.data && nameResponse.data.data && nameResponse.data.data.archive) {
|
|
nameResponse.data.data.archive.forEach((item) => {
|
|
// noinspection EqualityComparisonWithCoercionJS
|
|
if (fid === item.fid.toString()) {
|
|
name = item.name;
|
|
}
|
|
});
|
|
}
|
|
ctx.cache.set(key, name, 24 * 60 * 60);
|
|
}
|
|
if (!name) {
|
|
name = 'Unknown';
|
|
}
|
|
return name;
|
|
},
|
|
getCidFromAid: async (ctx, aid, pid) => {
|
|
const key = `bili-Cid-from-Aid-${aid}-${pid}`;
|
|
let cid = await ctx.cache.get(key);
|
|
if (!cid) {
|
|
const cidResponse = await axios({
|
|
method: 'get',
|
|
url: `https://api.bilibili.com/x/web-interface/view?aid=${aid}`,
|
|
headers: {
|
|
Referer: `https://www.bilibili.com/video/av${aid}`,
|
|
},
|
|
});
|
|
if (cidResponse && cidResponse.data && cidResponse.data.data && cidResponse.data.data.pages && cidResponse.data.data.pages.length >= pid) {
|
|
cid = cidResponse.data.data.pages[pid - 1].cid;
|
|
}
|
|
if (!cid) {
|
|
ctx.cache.set(key, cid, 24 * 60 * 60);
|
|
}
|
|
}
|
|
return cid;
|
|
},
|
|
};
|