rsshub
Version:
Make RSS Great Again!
47 lines (46 loc) • 1.82 kB
JavaScript
import { t as rofetch } from "./ofetch-W1aeTHCo.mjs";
import { t as parseDate } from "./parse-date-CjhZE69i.mjs";
import { t as cache_default } from "./cache-CiDoUSLo.mjs";
//#region lib/routes/av01/util.ts
const baseUrl = "https://www.av01.media";
const allNames = (named) => [.../* @__PURE__ */ new Set([named.name, ...Object.values(named.name_translations ?? {})])].join(" / ");
const resolveId = (endpoint, name) => cache_default.tryGet(`av01:${endpoint}:${name}`, async () => {
const { aggregations } = await rofetch(`${baseUrl}/api/v1/videos/search`, {
method: "POST",
query: {
lang: "jp",
include_facets: true
},
body: {
query: name,
pagination: {
page: 1,
limit: 20
}
}
});
const candidates = aggregations[endpoint === "actress" ? "actresses" : "tags"];
return String((candidates.find((c) => c.name === name) ?? candidates[0]).id);
});
const fetchVideos = async (ctx, endpoint, key) => {
const id = /^\d+$/.test(key) ? key : await resolveId(endpoint, key);
const limit = ctx.req.query("limit") ?? "20";
const response = await rofetch(`${baseUrl}/api/v1/videos/${endpoint}/${id}`, { query: {
page: 1,
limit
} });
return {
title: `${response[endpoint].name} - AV01`,
link: `${baseUrl}/jp/${endpoint}/${id}`,
item: response.videos.map((video) => ({
title: `${video.dvd_id} ${video.title}`,
description: [video.description, ...Object.entries(video.description_translations ?? {}).map(([lang, text]) => `${lang}: ${text}`)].join("<br><br>"),
link: `${baseUrl}/jp/video/${video.id}/${video.dvd_id.toLowerCase()}`,
pubDate: parseDate(video.uploaded_time),
author: video.actresses.map((actress) => allNames(actress)).join(", ") || video.maker,
category: video.tags.map((tag) => allNames(tag))
}))
};
};
//#endregion
export { fetchVideos as t };