Add files via upload

添加作者信息
This commit is contained in:
小虎故洞
2020-10-28 00:00:02 +08:00
committed by GitHub
parent a76eebfdf9
commit 57935d09fa
+128 -126
View File
@@ -1,126 +1,128 @@
const got = require('@/utils/got'); const got = require('@/utils/got');
const cache = require('./cache'); const cache = require('./cache');
const config = require('@/config').value; const config = require('@/config').value;
const utils = require('./utils'); const utils = require('./utils');
const JSONbig = require('json-bigint'); const JSONbig = require('json-bigint');
module.exports = async (ctx) => { module.exports = async (ctx) => {
const uid = String(ctx.params.uid); const uid = String(ctx.params.uid);
const disableEmbed = ctx.params.disableEmbed; const disableEmbed = ctx.params.disableEmbed;
const name = await cache.getUsernameFromUID(ctx, uid); const name = await cache.getUsernameFromUID(ctx, uid);
const cookie = config.bilibili.cookies[uid]; const cookie = config.bilibili.cookies[uid];
if (cookie === undefined) { if (cookie === undefined) {
throw Error('缺少对应 uid 的 Bilibili 用户登录后的 Cookie 值'); throw Error('缺少对应 uid 的 Bilibili 用户登录后的 Cookie 值');
} }
const response = await got({ const response = await got({
method: 'get', method: 'get',
url: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${uid}&type_list=268435455`, url: `https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/dynamic_new?uid=${uid}&type_list=268435455`,
headers: { headers: {
Referer: `https://space.bilibili.com/${uid}/`, Referer: `https://space.bilibili.com/${uid}/`,
Cookie: cookie, Cookie: cookie,
}, },
}); });
if (response.data.code === -6) { if (response.data.code === -6) {
throw Error('对应 uid 的 Bilibili 用户的 Cookie 已过期'); throw Error('对应 uid 的 Bilibili 用户的 Cookie 已过期');
} }
const data = JSONbig.parse(response.body).data.cards; const data = JSONbig.parse(response.body).data.cards;
ctx.state.data = { ctx.state.data = {
title: `${name} 关注的动态`, title: `${name} 关注的动态`,
link: `https://t.bilibili.com`, link: `https://t.bilibili.com`,
description: `${name} 关注的所有动态`, description: `${name} 关注的动态`,
item: data.map((item) => { item: data.map((item) => {
const parsed = JSONbig.parse(item.card); const parsed = JSONbig.parse(item.card);
const data = parsed.item || parsed; const data = parsed.item || parsed;
const origin = parsed.origin ? JSONbig.parse(parsed.origin) : null; const origin = parsed.origin ? JSONbig.parse(parsed.origin) : null;
//作者
// img author: card.desc.user_profile.info.uname
let imgHTML = '';
const getImgs = (data) => { // img
let imgs = ''; let imgHTML = '';
// 动态图片 const getImgs = (data) => {
if (data.pictures) { let imgs = '';
for (let i = 0; i < data.pictures.length; i++) { // 动态图片
imgs += `<img src="${data.pictures[i].img_src}">`; if (data.pictures) {
} for (let i = 0; i < data.pictures.length; i++) {
} imgs += `<img src="${data.pictures[i].img_src}">`;
// 专栏封面 }
if (data.image_urls) { }
for (let i = 0; i < data.image_urls.length; i++) { // 专栏封面
imgs += `<img src="${data.image_urls[i]}">`; if (data.image_urls) {
} for (let i = 0; i < data.image_urls.length; i++) {
} imgs += `<img src="${data.image_urls[i]}">`;
// 视频封面 }
if (data.pic) { }
imgs += `<img src="${data.pic}">`; // 视频封面
} if (data.pic) {
// 音频/番剧/直播间封面/小视频封面 imgs += `<img src="${data.pic}">`;
if (data.cover && data.cover.unclipped) { }
imgs += `<img src="${data.cover.unclipped}">`; // 音频/番剧/直播间封面/小视频封面
} else if (data.cover) { if (data.cover && data.cover.unclipped) {
imgs += `<img src="${data.cover}">`; imgs += `<img src="${data.cover.unclipped}">`;
} } else if (data.cover) {
// 专题页封面 imgs += `<img src="${data.cover}">`;
if (data.sketch && data.sketch.cover_url) { }
imgs += `<img src="${data.sketch.cover_url}">`; // 专题页封面
} if (data.sketch && data.sketch.cover_url) {
return imgs; imgs += `<img src="${data.sketch.cover_url}">`;
}; }
return imgs;
imgHTML += getImgs(data); };
if (origin) { imgHTML += getImgs(data);
imgHTML += getImgs(origin.item || origin);
} if (origin) {
// video小视频 imgHTML += getImgs(origin.item || origin);
let videoHTML = ''; }
if (data.video_playurl) { // video小视频
videoHTML += `<video width="${data.width}" height="${data.height}" controls><source src="${unescape(data.video_playurl).replace(/^http:/, 'https:')}"><source src="${unescape(data.video_playurl)}"></video>`; let videoHTML = '';
} if (data.video_playurl) {
// some rss readers disallow http content. videoHTML += `<video width="${data.width}" height="${data.height}" controls><source src="${unescape(data.video_playurl).replace(/^http:/, 'https:')}"><source src="${unescape(data.video_playurl)}"></video>`;
// 部分 RSS 阅读器要求内容必须使用https传输 }
// bilibili short video does support https request, but https request may timeout ocassionally. // some rss readers disallow http content.
// to maximize content availability, here add two source tags. // 部分 RSS 阅读器要求内容必须使用https传输
// bilibili的API中返回的视频地址采用http,然而经验证,短视频地址支持https访问,但偶尔会返回超时错误(可能是网络原因)。 // bilibili short video does support https request, but https request may timeout ocassionally.
// 因此保险起见加入两个source标签 // to maximize content availability, here add two source tags.
// link // bilibili的API中返回的视频地址采用http,然而经验证,短视频地址支持https访问,但偶尔会返回超时错误(可能是网络原因)。
let link = ''; // 因此保险起见加入两个source标签
if (data.dynamic_id) { // link
link = `https://t.bilibili.com/${data.dynamic_id}`; let link = '';
} else if (item.desc && item.desc.dynamic_id) { if (data.dynamic_id) {
link = `https://t.bilibili.com/${item.desc.dynamic_id}`; link = `https://t.bilibili.com/${data.dynamic_id}`;
} } else if (item.desc && item.desc.dynamic_id) {
link = `https://t.bilibili.com/${item.desc.dynamic_id}`;
const getTitle = (data) => data.title || data.description || data.content || (data.vest && data.vest.content) || ''; }
const getDes = (data) =>
data.dynamic || data.desc || data.description || data.content || data.summary || (data.vest && data.vest.content) + (data.sketch && `<br>${data.sketch.title}<br>${data.sketch.desc_text}`) || data.intro || ''; const getTitle = (data) => data.title || data.description || data.content || (data.vest && data.vest.content) || '';
const getOriginDes = (data) => (data && (data.apiSeasonInfo && data.apiSeasonInfo.title && `//转发自: ${data.apiSeasonInfo.title}`) + (data.index_title && `<br>${data.index_title}`)) || ''; const getDes = (data) =>
const getOriginName = (data) => data.uname || (data.author && data.author.name) || data.upper || (data.user && (data.user.uname || data.user.name)) || (data.owner && data.owner.name) || ''; data.dynamic || data.desc || data.description || data.content || data.summary || (data.vest && data.vest.content) + (data.sketch && `<br>${data.sketch.title}<br>${data.sketch.desc_text}`) || data.intro || '';
const getOriginTitle = (data) => (data.title ? `${data.title}<br>` : ''); const getOriginDes = (data) => (data && (data.apiSeasonInfo && data.apiSeasonInfo.title && `//转发自: ${data.apiSeasonInfo.title}`) + (data.index_title && `<br>${data.index_title}`)) || '';
const getIframe = (data) => (!disableEmbed && data && data.aid ? `<br><br>${utils.iframe(data.aid)}<br>` : ''); const getOriginName = (data) => data.uname || (data.author && data.author.name) || data.upper || (data.user && (data.user.uname || data.user.name)) || (data.owner && data.owner.name) || '';
const getOriginTitle = (data) => (data.title ? `${data.title}<br>` : '');
// emoji const getIframe = (data) => (!disableEmbed && data && data.aid ? `<br><br>${utils.iframe(data.aid)}<br>` : '');
let data_content = getDes(data);
if (item.display.emoji_info) { // emoji
const emoji = item.display.emoji_info.emoji_details; let data_content = getDes(data);
emoji.forEach(function (item) { if (item.display.emoji_info) {
data_content = data_content.replace( const emoji = item.display.emoji_info.emoji_details;
new RegExp(`\\${item.text}`, 'g'), emoji.forEach(function (item) {
`<img alt="${item.text}" src="${item.url}"style="margin: -1px 1px 0px; display: inline-block; width: 20px; height: 20px; vertical-align: text-bottom;" title="" referrerpolicy="no-referrer">` data_content = data_content.replace(
); new RegExp(`\\${item.text}`, 'g'),
}); `<img alt="${item.text}" src="${item.url}"style="margin: -1px 1px 0px; display: inline-block; width: 20px; height: 20px; vertical-align: text-bottom;" title="" referrerpolicy="no-referrer">`
} );
});
return { }
title: getTitle(data),
description: `${data_content || getDes(data)}${ return {
origin && getOriginName(origin) ? `<br><br>//转发自: @${getOriginName(origin)}: ${getOriginTitle(origin.item || origin)}${getDes(origin.item || origin)}` : `${getOriginDes(origin)}` title: getTitle(data),
}${getIframe(data)}${getIframe(origin)}${imgHTML ? `<br>${imgHTML}` : ''}${videoHTML ? `<br>${videoHTML}` : ''}`, description: `${data_content || getDes(data)}${
pubDate: new Date(item.desc.timestamp * 1000).toUTCString(), origin && getOriginName(origin) ? `<br><br>//转发自: @${getOriginName(origin)}: ${getOriginTitle(origin.item || origin)}${getDes(origin.item || origin)}` : `${getOriginDes(origin)}`
link: link, }${getIframe(data)}${getIframe(origin)}${imgHTML ? `<br>${imgHTML}` : ''}${videoHTML ? `<br>${videoHTML}` : ''}`,
}; pubDate: new Date(item.desc.timestamp * 1000).toUTCString(),
}), link: link,
}; };
}; }),
};
};