rsshub
Version:
Make RSS Great Again!
101 lines (98 loc) • 4.02 kB
JavaScript
import { t as rofetch } from "./ofetch-C3ts-Hud.mjs";
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { t as cache_default } from "./cache-BkqOokyU.mjs";
import { t as timezone } from "./timezone-BBvDwS_3.mjs";
import { load } from "cheerio";
//#region lib/routes/finology/utils.ts
const getItems = async (url, extra) => {
const mainUrl = "https://insider.finology.in";
const $ = load(await rofetch(url));
const listItems = $(extra.selector).toArray().map((item) => {
const $item = $(item);
const title = $item.find("p.text-m-height").text();
const link = $item.find("a").attr("href");
const pubDate = extra.date ? timezone(parseDate($item.find("div.text-light p").first().text()), 0) : "";
const itunes_item_image = $item.find("img").attr("src");
const category = [$item.find("p.pt025").text()];
return {
title,
link: `${mainUrl}${link}`,
pubDate,
itunes_item_image,
category
};
});
const items = (await Promise.allSettled(listItems.map((item) => {
if (item.link === void 0) return item;
return cache_default.tryGet(item.link, async () => {
const $ = load(await rofetch(item.link || ""));
const div = $("div.w60.flex.flex-wrap-badge");
item.author = div.find("div a p").text();
item.updated = extra.date ? parseDate(div.find("p:contains(\"Updated on\") span").text()) : "";
item.description = $("div#main-wrapper div#insiderhead").find("div.flex.flex-col.w100.align-center").children("div.m-position-r").remove().end().find("a[href=\"https://quest.finology.in/\"]").remove().end().find("div.blur-wall-wrap").remove().end().html() ?? "";
return item;
});
}))).map((v, index) => v.status === "fulfilled" ? v.value : {
...listItems[index],
description: `Website did not load within Timeout Limits. <a href="${listItems[index].link}">Check with Website if the page is slow</a>`
});
const topicName = $("h1.font-heading.fs1875")?.text();
return {
items: items.filter((item) => item !== null && typeof item !== "string"),
topicName
};
};
//#endregion
//#region lib/routes/finology/category.ts
const route = {
path: "/category/:category",
categories: ["finance"],
url: "insider.finology.in/business",
example: "/finology/success-stories",
parameters: { category: "Refer Table below or find in URL" },
radar: [{ source: ["insider.finology.in/:category"] }],
name: "Category",
maintainers: ["Rjnishant530"],
handler,
description: `::: info Category
| Category | Link |
| --------------------- | ------------------ |
| **Business** | business |
| Big Shots | entrepreneurship |
| Startups | startups-india |
| Brand Games | success-stories |
| Juicy Scams | juicy-scams |
| **Finance** | finance |
| Macro Moves | economy |
| News Platter | market-news |
| Tax Club | tax |
| Your Money | your-money |
| **Invest** | investing |
| Stock Market | stock-market |
| Financial Ratios | stock-ratios |
| Investor's Psychology | behavioral-finance |
| Mutual Funds | mutual-fund |
:::`
};
async function handler(ctx) {
const { category } = ctx.req.param();
return await commonHandler("https://insider.finology.in", `/${category}`, {
description: (topic) => `Articles for your research and knowledge under ${topic}`,
date: true,
selector: "div.card"
});
}
async function commonHandler(baseUrl, route, extra) {
const { items, topicName } = await getItems(`${baseUrl}${route}`, extra);
return {
title: `${topicName} - Finology Insider`,
link: `${baseUrl}${route}`,
item: items,
description: extra.description(topicName || ""),
logo: "https://insider.finology.in/Images/favicon/favicon.ico",
icon: "https://insider.finology.in/Images/favicon/favicon.ico",
language: "en-us"
};
}
//#endregion
export { route as n, commonHandler as t };