UNPKG

rsshub

Version:
219 lines (216 loc) 6.37 kB
import "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./config-C37vj7VH.mjs"; import { t as ViewType } from "./types-D84BRIt4.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import "./got-KxxWdaxq.mjs"; import { t as config_not_found_default } from "./config-not-found-Dyp3RlZZ.mjs"; import { i as maskHeader, n as getToken, r as pixiv_got_default, t as utils_default } from "./utils-BFdHMhIn.mjs"; import assert from "node:assert"; import queryString from "query-string"; //#region lib/routes/pixiv/api/get-ranking.ts const allowMode = new Set([ "day", "week", "month", "day_male", "day_female", "day_ai", "week_original", "week_rookie", "day_r18", "day_r18_ai", "day_male_r18", "day_female_r18", "week_r18", "week_r18g" ]); /** * 获取某天的排行榜 * @param {string} mode 模式 * @param {Date} date 日期 * @param {string} token pixiv oauth token * @returns {Promise<got.AxiosResponse<{illusts: illust[]}>>} */ function getRanking(mode, date, token) { assert.ok(allowMode.has(mode), "Mode not allow."); return pixiv_got_default("https://app-api.pixiv.net/v1/illust/ranking", { headers: { ...maskHeader, Authorization: "Bearer " + token }, searchParams: queryString.stringify({ mode, filter: "for_ios", ...date && { date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}` } }) }); } //#endregion //#region lib/routes/pixiv/ranking.ts const titles = { day: "pixiv 日排行", week: "pixiv 周排行", month: "pixiv 月排行", day_male: "pixiv 受男性欢迎排行", day_female: "pixiv 受女性欢迎排行", week_original: "pixiv 原创作品排行", week_rookie: "pixiv 新人排行", day_r18: "pixiv R-18 日排行", day_r18_ai: "pixiv R-18 AI生成作品排行", day_male_r18: "pixiv R-18 受男性欢迎排行", day_female_r18: "pixiv R-18 受女性欢迎排行", week_r18: "pixiv R-18 周排行", week_r18g: "pixiv R-18G 排行", day_ai: "AI 生成作品排行榜" }; const links = { day: "https://www.pixiv.net/ranking.php?mode=daily", week: "https://www.pixiv.net/ranking.php?mode=weekly", month: "https://www.pixiv.net/ranking.php?mode=monthly", day_male: "https://www.pixiv.net/ranking.php?mode=male", day_female: "https://www.pixiv.net/ranking.php?mode=female", day_ai: "https://www.pixiv.net/ranking.php?mode=daily_ai", week_original: "https://www.pixiv.net/ranking.php?mode=original", week_rookie: "https://www.pixiv.net/ranking.php?mode=rookie", day_r18: "https://www.pixiv.net/ranking.php?mode=daily_r18", day_r18_ai: "https://www.pixiv.net/ranking.php?mode=daily_r18_ai", day_male_r18: "https://www.pixiv.net/ranking.php?mode=male_r18", day_female_r18: "https://www.pixiv.net/ranking.php?mode=female_r18", week_r18: "https://www.pixiv.net/ranking.php?mode=weekly_r18", week_r18g: "https://www.pixiv.net/ranking.php?mode=r18g" }; const alias = { daily: "day", weekly: "week", monthly: "month", male: "day_male", female: "day_female", daily_ai: "day_ai", original: "week_original", rookie: "week_rookie", daily_r18: "day_r18", daily_r18_ai: "day_r18_ai", male_r18: "day_male_r18", female_r18: "day_female_r18", weekly_r18: "week_r18", r18g: "week_r18g" }; const route = { path: "/ranking/:mode/:date?", categories: ["social-media"], view: ViewType.Pictures, example: "/pixiv/ranking/week", parameters: { mode: { description: "rank type", options: [ { value: "day", label: "daily rank" }, { value: "week", label: "weekly rank" }, { value: "month", label: "monthly rank" }, { value: "day_male", label: "male rank" }, { value: "day_felame", label: "female rank" }, { value: "day_ai", label: "AI-generated work Rankings" }, { value: "week_original", label: "original rank" }, { value: "week_rookie", label: "rookie user rank" }, { value: "day_r18", label: "R-18 daily rank" }, { value: "day_r18_ai", label: "R-18 AI-generated work" }, { value: "day_male_r18", label: "R-18 male rank" }, { value: "day_female_r18", label: "R-18 female rank" }, { value: "week_r18", label: "R-18 weekly rank" }, { value: "week_r18g", label: "R-18G rank" } ], default: "day" }, date: "format: `2018-4-25`" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false, nsfw: true }, name: "Rankings", maintainers: ["EYHN"], handler }; async function handler(ctx) { if (!config.pixiv || !config.pixiv.refreshToken) throw new config_not_found_default("pixiv RSS is disabled due to the lack of <a href=\"https://docs.rsshub.app/deploy/config#route-specific-configurations\">relevant config</a>"); const mode = alias[ctx.req.param("mode")] ?? ctx.req.param("mode"); const date = ctx.req.param("date") ? new Date(ctx.req.param("date")) : /* @__PURE__ */ new Date(); const token = await getToken(cache_default.tryGet); if (!token) throw new config_not_found_default("pixiv not login"); const illusts = (await getRanking(mode, ctx.req.param("date") && date, token)).data.illusts; const dateStr = `${date.getFullYear()}${date.getMonth() + 1}${date.getDate()}日 `; return { title: (ctx.req.param("date") ? dateStr : "") + titles[mode], link: links[mode], description: dateStr + titles[mode], item: illusts.map((illust, index) => { const images = utils_default.getImgs(illust); return { title: `#${index + 1} ${illust.title}`, pubDate: parseDate(illust.create_date), description: `${illust.caption}<br><p>画师:${illust.user.name} - 阅览数:${illust.total_view} - 收藏数:${illust.total_bookmarks}</p><br>${images.join("")}`, link: `https://www.pixiv.net/artworks/${illust.id}`, author: [{ name: illust.user.name, url: `https://www.pixiv.net/users/${illust.user.id}`, avatar: illust.user.profile_image_urls.medium }], category: illust.tags.map((tag) => tag.name) }; }) }; } //#endregion export { route };