diff --git a/lib/routes/douban/people/status.js b/lib/routes/douban/people/status.js
index 44c404a330..d413ab77d2 100644
--- a/lib/routes/douban/people/status.js
+++ b/lib/routes/douban/people/status.js
@@ -2,6 +2,62 @@ const querystring = require('querystring');
const got = require('@/utils/got');
const { fallback, queryToBoolean, queryToInteger } = require('@/utils/readable-social');
+function tryFixStatus(status) {
+ let result = { isFixSuccess: true, why: '' };
+ const now = new Date();
+
+ if (!status) {
+ result = {
+ isFixSuccess: false,
+ // 添加方括号,与 status.msg 的样式统一
+ why: '[ 无内容 ]',
+ };
+ status = {}; // dummy
+ } else if (status.deleted) {
+ result = {
+ isFixSuccess: false,
+ why: status.msg ? status.msg : '[ 内容已被删除 ]',
+ };
+ } else if (status.hidden) {
+ result = {
+ isFixSuccess: false,
+ why: status.msg ? status.msg : '[ 内容已被设为不可见 ]',
+ };
+ } else if (!status.activity || status.text === undefined || status.text === null || !status.uri) {
+ result = {
+ isFixSuccess: false,
+ why: status.msg ? status.msg : '[ 内容已不可访问 ]',
+ };
+ } else {
+ if (!status.author) {
+ status.author = {};
+ }
+ if (!status.author.url) {
+ status.author.url = 'https://www.douban.com/people/1/';
+ }
+ if (!status.author.name) {
+ status.author.name = '[作者不可见]';
+ }
+ if (!status.author.avatar) {
+ status.author.avatar = 'https://img1.doubanio.com/icon/user_normal.jpg';
+ }
+ if (!status.create_time) {
+ status.create_time = now.toLocaleString();
+ }
+ if (!status.entities) {
+ status.entities = [];
+ }
+ }
+
+ if (!result.isFixSuccess) {
+ status.sharing_url = 'https://www.douban.com?rsshub_failed=' + now.getTime().toString();
+ if (!status.create_time) {
+ status.create_time = now.toLocaleString();
+ }
+ }
+ return result;
+}
+
function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
const routeParams = querystring.parse(ctx.params.routeParams);
@@ -46,17 +102,27 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
} = params;
const { status, comments } = item;
+ const { isFixSuccess, why } = tryFixStatus(status);
+ if (!isFixSuccess) {
+ return {
+ title: why,
+ description: why,
+ };
+ }
+
let description = '';
let title = '';
let activityInDesc;
let activityInTitle;
+ const { isFixSuccess: isResharedFixSuccess, why: resharedWhy } = tryFixStatus(status.reshared_status);
+
if (status.activity !== '转发') {
activityInDesc = status.activity;
activityInTitle = status.activity;
} else {
- if (status.reshared_status.deleted) {
+ if (!isResharedFixSuccess) {
activityInDesc = `转发广播`;
activityInTitle = `转发广播`;
} else {
@@ -137,7 +203,7 @@ function getContentByActivity(ctx, item, params = {}, picsPrefixes = []) {
title += status.text.replace('\n', '');
}
- if (status.images.length) {
+ if (status.images && status.images.length) {
if (readable) {
description += `