rsshub
Version:
Make RSS Great Again!
99 lines (97 loc) • 4.98 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import { t as config } from "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import { t as config_not_found_default } from "./config-not-found-Dyp3RlZZ.mjs";
//#region lib/routes/miniflux/subscription.ts
const route = {
path: "/subscription/:parameters?",
description: `
1. If no specific parameters are specified, all subscription sources will be output by default.
2. Please obtain the Category ID or Subscription Source ID on the \`Category\` (shortcut \`g\` \`c\`) or \`Source\` (shortcut \`g\` \`f\`) page. The URL of each category (or subscription source) will display its ID information.
3. Support for category names and category IDs, to output multiple categories, please repeat entering \`category=\` and connect with \`&\`, or directly use **English** commas between different category names. For example, you can subscribe through \`/miniflux/subscription/category=technology&category=1\` or \`/miniflux/subscription/categories=technology,1\`.
4. Support specifying the subscription source name or subscription source ID, similar to setting categories. For example, you can subscribe through \`/miniflux/subscription/feed=1&feed=Archdaily\` or \`/miniflux/subscription/feeds=1,Archdaily\`.
5. Support simultaneously specifying subscription source information and category information; it will output subscription sources that meet the selected categories' criteria. Consider an example: by using \`/miniflux/subscription/feeds=1,archdaily&category=art,7\`, if the Subscription Source ID is 1 or the Subscription Source Name is ArchDaily indeed falls under Category 'art' or has a Category ID of 7, then output that subscription source information.
`,
categories: ["other"],
example: "/miniflux/subscription/categories=test",
parameters: { parameters: "Category name or category ID or/and subscription source name or subscription source ID" },
features: {
requireConfig: [{
name: "MINIFLUX_INSTANCE",
description: "The instance used by the user, by default, is the official MiniFlux [paid service address](https://reader.miniflux.app)"
}, {
name: "MINIFLUX_TOKEN",
description: "User's API key, please log in to the instance used and go to `Settings` -> `API Key` -> `Create a new API key` to obtain."
}],
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
name: "Subscriptions",
maintainers: ["emdoe", "DIYgod"],
handler
};
async function handler(ctx) {
const instance = config.miniflux.instance;
const token = config.miniflux.token;
if (!token) throw new config_not_found_default("This RSS feed is disabled due to its incorrect configuration: the token is missing.");
function set(item) {
if (item.search("=") === -1) return "";
const filter = item.slice(0, item.indexOf("="));
const option = item.slice(item.lastIndexOf("=") + 1);
if (filter.search("categor") !== -1) {
option.split(",").map((item$1) => categories.push(item$1.toString().toLowerCase()));
return filter;
}
if (filter.search("feed") === -1) return "";
else {
option.split(",").map((item$1) => feeds.push(item$1.toString().toLowerCase()));
return filter;
}
}
function addFeed(item) {
subscription.push({
title: item.title,
link: item.site_url,
pubData: item.last_modified_header,
description: `Feed URL: <a href=${item.feed_url}>${item.feed_url}</a>`
});
}
const response = await got_default.get(`${instance}/v1/feeds`, { headers: { "X-Auth-Token": token } });
const subscription = [];
const categories = [];
const feeds = [];
const feedsList = response.data;
if (ctx.req.param("parameters")?.split("&").map((parameter) => set(parameter)).join("")) {
for (const item of feedsList) if (categories.length && feeds.length) {
const categoryTitle = item.category.title.toLowerCase();
const categoryID = item.category.id.toString();
const feedID = item.id.toString();
const feedTitle = item.title.toLowerCase();
if ((categories.includes(categoryID) || categories.includes(categoryTitle)) && (feeds.includes(feedID) || feeds.includes(feedTitle))) addFeed(item);
} else if (categories.length) {
const categoryTitle = item.category.title.toLowerCase();
const categoryID = item.category.id.toString();
if (categories.includes(categoryID) || categories.includes(categoryTitle)) addFeed(item);
} else if (feeds.length) {
const feedID = item.id.toString();
const feedTitle = item.title.toLowerCase();
if (feeds.includes(feedID) || feeds.includes(feedTitle)) addFeed(item);
}
} else for (const item of feedsList) addFeed(item);
return {
title: `MiniFlux | Subscription List`,
link: instance,
description: `A subscription tracking feed.`,
item: subscription,
allowEmpty: true
};
}
//#endregion
export { route };