UNPKG

rsshub

Version:
76 lines (74 loc) 2.6 kB
import "./dist-Bog6z_OM.mjs"; import "./config-MQ-7ebJ_.mjs"; import { t as ViewType } from "./types-gOySfSXJ.mjs"; import "./logger-C4avouvV.mjs"; import { t as ofetch_default } from "./ofetch-DKl_Ma9g.mjs"; import { t as parseDate } from "./parse-date-r5WDWHno.mjs"; import "./is-worker-DESPicPc.mjs"; import "./cache-SV6W5EPy.mjs"; import { t as fetchArticle } from "./utils-BCQ2SQer.mjs"; import pMap from "p-map"; //#region lib/routes/apnews/mobile-api.ts const route = { path: "/mobile/:path{.+}?", categories: ["traditional-media"], example: "/apnews/mobile/ap-top-news", view: ViewType.Articles, parameters: { path: { description: "Corresponding path from AP News website", default: "ap-top-news" } }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["apnews.com/"] }], name: "News (from mobile client API)", maintainers: ["dzx-dzx"], handler }; async function handler(ctx) { const screen = (await ofetch_default("https://apnews.com/graphql/delivery/ap/v1", { query: { operationName: "ContentPageQuery", variables: { path: ctx.req.param("path") ? `/${ctx.req.param("path")}` : "/hub/ap-top-news" }, extensions: { persistedQuery: { version: 1, sha256Hash: "3bc305abbf62e9e632403a74cc86dc1cba51156d2313f09b3779efec51fc3acb" } } } })).data.Screen; const list = [...screen.main.filter((e) => e.__typename === "ColumnContainer").flatMap((_) => _.columns), ...screen.main.filter((e) => e.__typename !== "ColumnContainer")].filter((e) => e.__typename !== "GoogleDfPAdModule").flatMap((e) => { switch (e.__typename) { case "PageListModule": return e.items; case "VideoPlaylistModule": return e.playlist; default: return; } }).filter(Boolean).map((e) => { if (e.__typename === "PagePromo") return { title: e.title, link: e.url, pubDate: parseDate(e.publishDateStamp), category: e.category, description: e.description, guid: e.id }; else if (e.__typename === "VideoPlaylistItem") return { title: e.title, link: e.url, description: e.description, guid: e.contentId }; else return; }).filter(Boolean).toSorted((a, b) => b.pubDate - a.pubDate).slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit"), 10) : 20); const items = ctx.req.query("fulltext") === "true" ? await pMap(list, (item) => fetchArticle(item), { concurrency: 10 }) : list; return { title: screen.category ?? screen.title, item: items, link: "https://apnews.com" }; } //#endregion export { route };