RSSHub/lib/routes/bilibili/platform.ts

78 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Route } from '@/types';
import got from '@/utils/got';
import { parseDate } from '@/utils/parse-date';
import { config } from '@/config';
export const route: Route = {
path: '/platform/:area?/:p_type?/:uid?',
categories: ['social-media'],
example: '/bilibili/platform/-1',
parameters: {
area: '省市-国标码,默认为-1即全国',
p_type: '类型:见下表,默认为全部类型',
uid: '用户id可以不填不过不填不设置cookie搜索结果与登入账号后搜索结果不一样。可以在url中找到需要配置cookie值只需要SESSDATA的值即可',
},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['show.bilibili.com/platform'],
},
],
name: '会员购票务',
maintainers: ['nightmare-mio'],
handler,
url: 'show.bilibili.com/platform',
description: `| 类型 |
| -------- |
| 演出 |
| 展览 |
| 本地生活 |`,
};
async function handler(ctx) {
const { area = -1, type = '全部类型', uid } = ctx.req.param();
const cookie = config.bilibili.cookies[uid];
const link = 'https://show.bilibili.com/api/ticket/project/listV2';
const headers = {
Referer: 'https://space.bilibili.com',
Cookie: cookie ? `SESSDATA=${cookie}` : undefined,
};
const { data: response } = await got({
method: 'get',
url: `${link}?version=134&page=1&pagesize=16&area=${area}&filter=&platform=web&p_type=${type}`,
headers,
});
// 列表
const list = response.data.result;
const items = list.map((item) => {
const bodyHtml = `<img src="${item.cover}"></img>`;
const coordinate = `<div>活动地点: ${item.city} ${item.venue_name}</div>`;
const liveTime = `<div>活动时间: ${item.tlabel}</div>`;
const staff = `<div>参展览嘉宾: ${item.staff}</div>`;
const countdown = `<div>结束日期: ${item.countdown}</div>`;
const price = `<div>最低价: ${item.price_low / 100} ; 最高价: ${item.price_high / 100}</div>`;
return {
title: item.project_name,
link: item.url,
description: bodyHtml + coordinate + liveTime + staff + countdown + price,
pubDate: parseDate(item.sale_start_time * 1000),
};
});
return {
title: `bilibili会员购票务-${area}`,
link,
item: items,
};
}