fix(route): Anti-Anti-Spider 哔哩哔哩 (#10886)

* fix(route): Anti-Anti-Reptilian 哔哩哔哩

* fix(route): Anti-Anti-Reptilian 哔哩哔哩

* fix(route): Remove debugging statement

* fix(route): Comply with code specifications by adding a semicolon.

* fix(route): Resolve the requested changes
Use normative key
Use cache.tryGet
Use more simplified got request
Remove unnecessary template
Use default UA

* fix(route): Remove unnecessary await

* fix(route): Use simplified got request.

* fix(route): Use default UA

* fix(route): Remove unnecessary require

Co-authored-by: cyx20080216 <cyx20080216@qq.com>
This commit is contained in:
cyx20080216 2022-09-28 22:11:07 +08:00 committed by GitHub
parent b175d5e1c3
commit 6fdd85e0fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 20 deletions

View File

@ -1,30 +1,53 @@
const got = require('@/utils/got');
module.exports = {
getCookie: (ctx) => {
const key = 'bili-cookie';
return ctx.cache.tryGet(key, async () => {
const response = await got(`https://www.bilibili.com/`);
return response.headers['set-cookie'];
});
},
getUsernameFromUID: (ctx, uid) => {
const key = 'bili-username-from-uid-' + uid;
return ctx.cache.tryGet(key, async () => {
const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&jsonp=jsonp`, {
const cookie = await module.exports.getCookie(ctx);
await got(`https://space.bilibili.com/${uid}/`, {
headers: {
Referer: `https://space.bilibili.com/${uid}`,
},
Referer: 'https://www.bilibili.com/',
Cookie: cookie
}
});
const {data: nameResponse} = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie
}
});
return nameResponse.data.name;
});
},
getUsernameAndFaceFromUID: async (ctx, uid) => {
const cookie = await module.exports.getCookie(ctx);
const nameKey = 'bili-username-from-uid-' + uid;
const faceKey = 'bili-userface-from-uid-' + uid;
let name = await ctx.cache.get(nameKey);
let face = await ctx.cache.get(faceKey);
if (!name) {
const nameResponse = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&jsonp=jsonp`, {
if (!name || !face) {
await got(`https://space.bilibili.com/${uid}/`, {
headers: {
Referer: `https://space.bilibili.com/${uid}`,
},
Referer: `https://www.bilibili.com/`,
Cookie: cookie
}
});
name = nameResponse.data.data.name;
face = nameResponse.data.data.face;
const {data: nameResponse} = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie
}
});
name = nameResponse.data.name;
face = nameResponse.data.face;
ctx.cache.set(nameKey, name);
ctx.cache.set(faceKey, face);
}

View File

@ -6,27 +6,45 @@ const { parseDate } = require('@/utils/parse-date');
module.exports = async (ctx) => {
const uid = ctx.params.uid;
const disableEmbed = ctx.params.disableEmbed;
const cookie = await cache.getCookie(ctx);
const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid);
const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, {
await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie
},
});
const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`,
Cookie: cookie
},
});
const vlist = [...response.data.data.list.vlist];
const pageTotal = Math.ceil(response.data.data.page.count / response.data.data.page.ps);
const getPage = async (pageId) => {
await got(`https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie
},
});
return await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${pageId}&keyword=&order=pubdate&jsonp=jsonp`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`,
Cookie: cookie
},
});
};
const promises = [];
if (pageTotal > 1) {
for (let i = 2; i <= pageTotal; i++) {
promises.push(
got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${i}&keyword=&order=pubdate&jsonp=jsonp`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
},
})
);
promises.push(getPage(i));
}
const rets = await Promise.all(promises);
rets.forEach((ret) => {

View File

@ -5,13 +5,19 @@ const utils = require('./utils');
module.exports = async (ctx) => {
const uid = ctx.params.uid;
const disableEmbed = ctx.params.disableEmbed;
const cookie = await cache.getCookie(ctx);
const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid);
const response = await got({
method: 'get',
url: `https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=10&tid=0&pn=1&order=pubdate&jsonp=jsonp`,
await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie
},
});
const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, {
headers: {
Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`,
Cookie: cookie
},
});
const data = response.data;