UNPKG

rsshub

Version:
173 lines (168 loc) 6.47 kB
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 };