rsshub
Version:
Make RSS Great Again!
60 lines (58 loc) • 1.87 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";
//#region lib/routes/tradingview/pine.ts
const route = {
path: "/pine/:version?",
radar: [{
source: ["tradingview.com/pine-script-docs/en/:version/Release_notes.html"],
target: "/pine/:version"
}],
name: "Unknown",
maintainers: [],
handler
};
async function handler(ctx) {
const { version = "v5" } = ctx.req.param();
const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 100;
const rootUrl = "https://www.tradingview.com";
const currentUrl = new URL(`pine-script-docs/en/${version}/Release_notes.html`, rootUrl).href;
const { data: response } = await got_default(currentUrl);
const $ = load(response);
const items = $("div.section").toArray().filter((item) => {
item = $(item);
return /\w+-\d{4}/.test(item.prop("id"));
}).slice(0, limit).map((item) => {
item = $(item);
const id = item.prop("id");
const title = item.find("a.toc-backref").first().text();
const link = new URL(item.find("a.headerlink").prop("href"), currentUrl).href;
item.children().first().remove();
return {
title,
link,
description: item.html(),
pubDate: parseDate(`${id.charAt(0).toUpperCase()}${id.slice(1)}`, "MMMM-YYYY")
};
});
const image = new URL("_images/Pine_Script_logo.svg", currentUrl).href;
const icon = new URL("favicon.ico", rootUrl).href;
return {
item: items,
title: $("title").text(),
link: currentUrl,
description: $("div.text-logo").text(),
language: $("html").prop("lang"),
image,
icon,
logo: icon
};
}
//#endregion
export { route };