Skip to content

Commit

Permalink
feat(route): introduce tsdm39/bd (DIYgod#16038)
Browse files Browse the repository at this point in the history
* feat(route): introduce `tsdm39/bd`

* feat(route): deadbydaylight.com latest blog (DIYgod#16037)

* feat(route): deadbydaylight.com latest blog

* addressing comments

* Update lib/routes/deadbydaylight/index.ts

* doc(route): fix incorrect MD syntax (DIYgod#16040)

* fix(route): 中国投资者网返回空结果 (DIYgod#16044)

* fix: review

* fix: review

* fix: review

* fix: review

* fix: throw if cookie not found

* fix: remove unnecessary cache

---------
  • Loading branch information
equt authored Jul 1, 2024
1 parent 88486f7 commit 674fa0f
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,9 @@ export type Config = {
tophub: {
cookie?: string;
};
tsdm39: {
cookie: string;
};
twitter: {
username?: string[];
password?: string[];
Expand Down Expand Up @@ -622,6 +625,9 @@ const calculateValue = () => {
tophub: {
cookie: envs.TOPHUB_COOKIE,
},
tsdm39: {
cookie: envs.TSDM39_COOKIES,
},
twitter: {
username: envs.TWITTER_USERNAME?.split(','),
password: envs.TWITTER_PASSWORD?.split(','),
Expand Down
101 changes: 101 additions & 0 deletions lib/routes/tsdm39/bd.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import type { DataItem, Route } from '@/types';
import { config } from '@/config';
import ofetch from '@/utils/ofetch';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
import ConfigNotFoundError from '@/errors/types/config-not-found';

// type id => display name
type Mapping = Record<string, string>;

const TYPE: Mapping = {
'403': '720P',
'404': '1080P',
'405': 'BDMV',
'4130': '4K',
'5815': 'AV1',
};

// render into MD table
const mkTable = (mapping: Mapping): string => {
const heading: string[] = [],
separator: string[] = [],
body: string[] = [];

for (const key in mapping) {
heading.push(mapping[key]);
separator.push(':--:');
body.push(key);
}

return [heading.join(' | '), separator.join(' | '), body.join(' | ')].map((s) => `| ${s} |`).join('\n');
};

const handler: Route['handler'] = async (ctx) => {
const { type } = ctx.req.param();

const cookie = config.tsdm39.cookie;
if (!cookie) {
throw new ConfigNotFoundError('缺少 TSDM39 用户登录后的 Cookie 值 <a href="https://docs.rsshub.app/zh/deploy/config#route-specific-configurations">TSDM 相关路由</a>');
}

const html = await ofetch(`https://www.tsdm39.com/forum.php?mod=forumdisplay&fid=85${type ? `&filter=typeid&typeid=${type}` : ''}`, {
headers: {
Cookie: cookie,
},
});

const $ = load(html);

const item = $('tbody.tsdm_normalthread')
.toArray()
.map<DataItem>((item) => {
const $ = load(item);

const title = $('a.xst').text();
const price = $('span.xw1').last().text();
const link = $('a.xst').attr('href');
const date = $('td.by em').first().text().trim();

return {
title,
description: `价格:${price}`,
link,
pubDate: parseDate(date),
};
});

return {
title: '天使动漫论坛 - BD',
link: 'https://www.tsdm39.com/forum.php?mod=forumdisplay&fid=85',
language: 'zh-Hans',
item,
};
};

export const route: Route = {
path: '/bd/:type?',
name: 'BD',
categories: ['anime'],
maintainers: ['equt'],
example: '/tsdm39/bd',
parameters: {
type: 'BD type, checkout the table below for details',
},
features: {
requireConfig: [
{
name: 'TSDM39_COOKIES',
optional: false,
description: '天使动漫论坛登陆后的 cookie 值,可在浏览器控制台通过 `document.cookie` 获取。',
},
],
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
handler,
description: [TYPE].map((el) => mkTable(el)).join('\n\n'),
};
7 changes: 7 additions & 0 deletions lib/routes/tsdm39/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: '天使动漫论坛',
url: 'www.tsdm39.com',
categories: ['anime'],
};

0 comments on commit 674fa0f

Please sign in to comment.