UNPKG

rsshub

Version:
96 lines (94 loc) 2.94 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; //#region lib/routes/bestblogs/feeds.ts const route = { path: "/feeds/:category?", categories: ["programming"], example: "/bestblogs/feeds/featured", parameters: { category: "the category of articles. Can be `programming`, `ai`, `product`, `business` or `featured`. Default is `featured`" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, name: "文章列表", maintainers: ["zhenlohuang"], handler }; var APIRequest = class { keyword; qualifiedFilter; sourceId; category; timeFilter; language; userLanguage; sortType; currentPage; pageSize; constructor({ keyword = "", qualifiedFilter = "true", sourceId = "", category = "", timeFilter = "1w", language = "all", userLanguage = "zh", sortType = "default", currentPage = 1, pageSize = 10 } = {}) { this.keyword = keyword; this.qualifiedFilter = qualifiedFilter; this.sourceId = sourceId; this.category = category; this.timeFilter = timeFilter; this.language = language; this.userLanguage = userLanguage; this.sortType = sortType; this.currentPage = currentPage; this.pageSize = pageSize; } toJson() { const requestBody = { keyword: this.keyword, qualifiedFilter: this.qualifiedFilter, sourceId: this.sourceId, category: this.category, timeFilter: this.timeFilter, language: this.language, userLanguage: this.userLanguage, sortType: this.sortType, currentPage: this.currentPage, pageSize: this.pageSize }; return JSON.stringify(requestBody); } }; async function handler(ctx) { const defaultPageSize = 100; const defaultTimeFilter = "1w"; const { category = "featured" } = ctx.req.param(); const apiRequest = new APIRequest({ category, pageSize: defaultPageSize, qualifiedFilter: category === "featured" ? "true" : "false", timeFilter: defaultTimeFilter }); const response = await ofetch_default("https://api.bestblogs.dev/api/resource/list", { headers: { "Content-Type": "application/json" }, method: "POST", body: apiRequest.toJson() }); if (!response || !response.data || !response.data.dataList) throw new Error("Invalid API response: " + JSON.stringify(response)); return { title: `Bestblogs.dev`, link: `https://www.bestblogs.dev/feeds`, item: response.data.dataList.map((article) => ({ title: article.title, link: article.url, description: article.summary, pubDate: parseDate(article.publishDateTimeStr), author: Array.isArray(article.authors) ? article.authors.map((author) => ({ name: author })) : [{ name: article.authors }], category: article.category })) }; } //#endregion export { route };