rsshub
Version:
Make RSS Great Again!
78 lines (76 loc) • 2.8 kB
JavaScript
import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { n as appDetail, r as getRootUrl, t as X_UA } from "./utils-DY91kUEc.mjs";
//#region lib/routes/taptap/common/review.ts
const makeSortParam = (isIntl, order) => {
if (isIntl) {
if (order === "helpful" || order === "recent") return `type=${order}`;
return "type=helpful";
} else {
if (order === "new" || order === "hot") return `sort=${order}`;
return "sort=hot";
}
};
const fetchMainlandItems = async (params) => {
const id = params.id;
const order = params.order ?? "hot";
const lang = params.lang ?? "zh_CN";
let url = `${getRootUrl(false)}/webapiv2/review/v2/list-by-app?app_id=${id}&limit=10`;
url += `&${makeSortParam(false, order)}`;
url += `&${X_UA(lang)}`;
return (await ofetch_default(url)).data.list.map((review) => {
const author = review.moment.author.user.name;
return {
title: `${author} - ${review.moment.review.score}星`,
author,
description: review.moment.review.contents.text + (review.moment.review.contents.images ? review.moment.review.contents.images.map((img) => `<img src="${img.original_url}">`).join("") : ""),
link: `${getRootUrl(false)}/review/${review.moment.review.id}`,
pubDate: parseDate(review.moment.publish_time, "X")
};
});
};
const fetchIntlItems = async (params) => {
const id = params.id;
const order = params.order ?? "helpful";
const lang = params.lang ?? "en_US";
let url = `${getRootUrl(true)}/webapiv2/feeds/v3/by-app?app_id=${id}&limit=10`;
url += `&${makeSortParam(true, order)}`;
url += `&${X_UA(lang)}`;
return (await ofetch_default(url)).data.list.map((review) => {
const author = review.post.user.name;
const score = review.post.list_fields.app_ratings[id].score;
return {
title: `${author} - ${"★".repeat(score)}`,
author,
description: review.post.list_fields.summary || review.post.list_fields.title,
link: `${getRootUrl(true)}/post/${review.post.id_str}`,
pubDate: parseDate(review.post.published_time, "X")
};
});
};
async function handler(ctx) {
const isIntl = ctx.req.path.replace("/taptap", "").startsWith("/intl/");
const id = ctx.req.param("id");
const order = ctx.req.param("order") ?? "default";
const lang = ctx.req.param("lang") ?? (isIntl ? "en_US" : "zh_CN");
const detail = await appDetail(id, lang, isIntl);
const appImg = detail.app.icon.original_url;
const appName = detail.app.title;
const items = isIntl ? await fetchIntlItems({
id,
order,
lang
}) : await fetchMainlandItems({
id,
order,
lang
});
return {
title: `TapTap 评价 ${appName}`,
link: `${getRootUrl(isIntl)}/app/${id}/review?${makeSortParam(isIntl, order)}`,
image: appImg,
item: items
};
}
//#endregion
export { handler as t };