rsshub
Version:
Make RSS Great Again!
173 lines (168 loc) • 6.47 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import { load } from "cheerio";
import bbobHTML from "@bbob/html";
import presetHTML5 from "@bbob/preset-html5";
//#region lib/routes/counter-strike/news.ts
const swapLinebreak = (tree) => tree.walk((node) => {
if (typeof node === "string" && node === "\n") return {
tag: "br",
content: null
};
return node;
});
const customPreset = presetHTML5.extend((tags) => ({
...tags,
url: (node) => ({
tag: "a",
attrs: {
href: Object.keys(node.attrs)[0],
rel: "noopener",
target: "_blank"
},
content: node.content
}),
video: (node, { render }) => ({
tag: "video",
attrs: {
controls: "",
preload: "metadata",
poster: node.attrs?.poster
},
content: render(Object.entries({
webm: "video/webm",
mp4: "video/mp4"
}).map(([key, type]) => ({
tag: "source",
attrs: {
src: node.attrs?.[key],
type
}
})))
})
}));
const handler = async (ctx) => {
const { category = "all", language = "english" } = ctx.req.param();
const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 100;
const rootUrl = "https://www.counter-strike.net";
const apiRootUrl = "https://store.steampowered.com";
const cdnRootUrl = "https://media.st.dl.eccdnx.com";
const currentUrl = new URL(`news${category && category !== "all" ? `/${category}` : ""}${language ? `?l=${language}` : ""}`, rootUrl).href;
const apiUrl = new URL("events/ajaxgetpartnereventspageable/", apiRootUrl).href;
const { data: response } = await got_default(apiUrl, { searchParams: {
clan_accountid: 0,
appid: 730,
offset: 0,
count: limit,
l: language
} });
const items = response.events.filter((item) => category === "updates" ? item.event_type === 12 : item.event_type).slice(0, limit).map((item) => {
const title = item.event_name;
const description = bbobHTML(item.announcement_body.body, [customPreset(), swapLinebreak]);
const guid = `counter-strike-news-${item.gid}`;
return {
title,
description,
pubDate: parseDate(item.announcement_body.posttime, "X"),
link: new URL(`newsentry/${item.gid}`, rootUrl).href,
category: item.announcement_body.tags,
guid,
id: guid,
content: {
html: description,
text: item.announcement_body.body
},
updated: parseDate(item.announcement_body.updatetime, "X")
};
});
const { data: currentResponse } = await got_default(currentUrl);
const $ = load(currentResponse);
const author = "Counter Strike";
const image = new URL("apps/csgo/images/dota_react//blog/default_cover.jpg", cdnRootUrl).href;
return {
title: `${author} - ${category === "updates" ? "Updates" : "News"}`,
description: $("title").text(),
link: currentUrl,
item: items,
allowEmpty: true,
image,
author,
language
};
};
const route = {
path: "/news/:category?/:language?",
name: "News",
url: "www.counter-strike.net",
maintainers: ["nczitzk"],
handler,
example: "/counter-strike/news",
parameters: {
category: "Category, `updates` or `all`, `all` by default",
language: "Language, english by default, see below for more languages"
},
description: `::: tip
If you subscribe to [Updates in English](https://www.counter-strike.net/news/updates?l=english),where the URL is \`https://www.counter-strike.net/news/updates?l=english\`, extract the \`l\`, which is \`english\`, and use it as the parameter to fill in. Therefore, the route will be [\`/counter-strike/news/updates/english\`](https://rsshub.app/counter-strike/news/updates/english).
:::
<details>
<summary>More languages</summary>
| 语言代码 | 语言名称 |
| ------------------------------------------------- | ---------- |
| English | english |
| Español - España (Spanish - Spain) | spanish |
| Français (French) | french |
| Italiano (Italian) | italian |
| Deutsch (German) | german |
| Ελληνικά (Greek) | greek |
| 한국어 (Korean) | koreana |
| 简体中文 (Simplified Chinese) | schinese |
| 繁體中文 (Traditional Chinese) | tchinese |
| Русский (Russian) | russian |
| ไทย (Thai) | thai |
| 日本語 (Japanese) | japanese |
| Português (Portuguese) | portuguese |
| Português - Brasil (Portuguese - Brazil) | brazilian |
| Polski (Polish) | polish |
| Dansk (Danish) | danish |
| Nederlands (Dutch) | dutch |
| Suomi (Finnish) | finnish |
| Norsk (Norwegian) | norwegian |
| Svenska (Swedish) | swedish |
| Čeština (Czech) | czech |
| Magyar (Hungarian) | hungarian |
| Română (Romanian) | romanian |
| Български (Bulgarian) | bulgarian |
| Türkçe (Turkish) | turkish |
| Українська (Ukrainian) | ukrainian |
| Tiếng Việt (Vietnamese) | vietnamese |
| Español - Latinoamérica (Spanish - Latin America) | latam |
</details>
`,
categories: ["game"],
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportRadar: true,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{
source: ["www.counter-strike.net/news/:category"],
target: (params, url) => {
url = new URL(url);
const category = params.category;
const language = url.searchParams.get("l");
return `/news${category ? `/${category}${language ? `/${language}` : ""}` : ""}`;
}
}]
};
//#endregion
export { handler, route };