rsshub
Version:
Make RSS Great Again!
219 lines (216 loc) • 6.37 kB
JavaScript
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 };