rsshub
Version:
Make RSS Great Again!
100 lines (92 loc) • 3.35 kB
text/typescript
import { Route } from '@/types';
import cache from '@/utils/cache';
import got from '@/utils/got';
import weiboUtils from './utils';
import queryString from 'query-string';
import { config } from '@/config';
export const route: Route = {
path: '/super_index/:id/:type?/:routeParams?',
categories: ['social-media'],
example: '/weibo/super_index/1008084989d223732bf6f02f75ea30efad58a9/sort_time',
parameters: { id: '超话ID', type: '类型:见下表', routeParams: '额外参数;请参阅上面的说明和表格' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['weibo.com/p/:id/super_index'],
target: '/super_index/:id',
},
],
name: '超话',
maintainers: ['zengxs', 'Rongronggg9'],
handler,
description: `| type | 备注 |
| ---------- | ---------------- |
| soul | 精华 |
| video | 视频(暂不支持) |
| album | 相册(暂不支持) |
| hot\_sort | 热门 |
| sort\_time | 最新帖子 |
| feed | 最新评论 |`,
};
interface Card {
card_group?: Card[];
}
async function handler(ctx) {
const id = ctx.req.param('id');
const type = ctx.req.param('type') ?? 'feed';
const containerData = (await cache.tryGet(
`weibo:super_index:container:${id}:${type}`,
async () => {
const _r = await got('https://m.weibo.cn/api/container/getIndex', {
searchParams: queryString.stringify({
containerid: `${id}_-_${type}`,
luicode: '10000011',
lfid: `${id}_-_main`,
}),
headers: {
Referer: `https://m.weibo.cn/p/index?containerid=${id}_-_soul&luicode=10000011&lfid=${id}_-_main`,
'MWeibo-Pwa': '1',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
'X-Requested-With': 'XMLHttpRequest',
},
});
return _r.data.data;
},
config.cache.routeExpire,
false
)) as {
cards?: Card[];
pageInfo?: {
page_title: string;
};
};
const resultItems = [];
function handleCard(ctx, card, resultItems) {
if (card.card_type === '9' && 'mblog' in card) {
const formatExtended = weiboUtils.formatExtended(ctx, card.mblog, undefined);
resultItems.push(formatExtended);
}
}
for (const card of containerData?.cards ?? []) {
handleCard(ctx, card, resultItems);
if (!('card_group' in card)) {
continue;
}
for (const mblogCard of card.card_group!) {
handleCard(ctx, mblogCard, resultItems);
}
}
return weiboUtils.sinaimgTvax({
title: `微博超话 - ${containerData?.pageInfo?.page_title}`,
link: `https://weibo.com/p/${id}/super_index`,
description: `#${containerData?.pageInfo?.page_title}# 的超话`,
item: resultItems,
});
}