forked from DIYgod/RSSHub
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(route): introduce
tsdm39/bd
(DIYgod#16038)
* 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
Showing
3 changed files
with
114 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'), | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'], | ||
}; |