rsshub
Version:
Make RSS Great Again!
196 lines (195 loc) • 6.67 kB
JavaScript
import { t as rofetch } from "./ofetch-U0CdpE2g.mjs";
import { t as md5 } from "./md5-CpIHIxCO.mjs";
//#region lib/routes/showstart/const.ts
const HOST = "https://www.showstart.com";
const TITLE = "秀动网";
//#endregion
//#region lib/routes/showstart/utils.ts
const uuid = (length = 20) => {
const e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + Date.now();
const r = [];
for (let i = 0; i < length; i++) {
const index = Math.floor(Math.random() * e.length);
r.push(e.charAt(index));
}
return r.join("");
};
const deviceNo = uuid(32).toLowerCase();
const cookieMap = /* @__PURE__ */ new Map([["token", deviceNo]]);
const devioceInfo = {
vendorName: "",
deviceMode: "",
deviceName: "",
systemName: "",
systemVersion: "",
cpuMode: " ",
cpuCores: "",
cpuArch: "",
memerySize: "",
diskSize: "",
network: "",
resolution: "1920*1080",
pixelResolution: ""
};
const getAccessToken = async () => {
const { result } = await post("/waf/gettoken");
cookieMap.set("accessToken", result.accessToken.access_token);
cookieMap.set("idToken", result.idToken.id_token);
return cookieMap.get("accessToken");
};
const post = async (requestPath, accessToken = md5(Date.now().toString()), payload) => {
const traceId = uuid(32) + Date.now();
return await rofetch(`https://www.showstart.com/api${requestPath}`, {
method: "POST",
headers: {
cdeviceinfo: encodeURIComponent(JSON.stringify(devioceInfo)),
cdeviceno: deviceNo,
cookie: [...cookieMap].map(([key, value]) => `${key}=${value}`).join("; "),
crpsign: md5(accessToken + "web" + deviceNo + (payload ? JSON.stringify(payload) : "") + requestPath + "999web" + traceId),
crtraceid: traceId,
csappid: "web",
cterminal: "web",
cusat: accessToken,
cusid: "",
cusit: "",
cusname: "",
cusut: "",
cversion: "999"
},
body: payload
});
};
function sortBy(items, key) {
return items.toSorted((a, b) => a[key].localeCompare(b[key]));
}
function uniqBy(items, key) {
const set = /* @__PURE__ */ new Set();
return items.filter((item) => {
if (set.has(item[key])) return false;
set.add(item[key]);
return true;
});
}
//#endregion
//#region lib/routes/showstart/service.ts
async function fetchActivityList(params) {
params.pageNo ||= "1";
params.pageSize ||= "30";
const accessToken = await getAccessToken();
return (await post("/web/activity/list", accessToken, params)).result.result.map((item) => formatActivity(item));
}
const image = (src) => src ? `<img src="${src}" />` : "";
const time = (time) => time ? `<p>演出时间:${time}</p>` : "";
const address = (cityName, siteName) => cityName || siteName ? `<p>地址:${[cityName, siteName].join(" - ")}</p>` : "";
const performers = (name) => name ? `<p>艺人:${name}</p>` : "";
const price = (price) => price ? `<p>票价:${price}</p>` : "";
function formatActivity(item) {
return {
title: item.title,
link: `${HOST}/event/${item.id}`,
description: [
image(item.poster),
time(item.showTime),
address(item.cityName, item.siteName),
performers(item.performers),
price(item.price)
].join("")
};
}
async function fetchPerformerList(params) {
params.pageNo ||= "1";
params.pageSize ||= "30";
const accessToken = await getAccessToken();
return (await post("/web/performer/list", accessToken, params)).result.result.map((item) => ({
title: item.name,
link: `${HOST}/artist/${item.id}`,
description: `id: ${item.id}`
}));
}
async function fetchPerformerInfo(params) {
const accessToken = await getAccessToken();
const resp = await post("/web/performer/info", accessToken, params);
return {
id: params.performerId,
name: resp.result.name,
content: resp.result.content,
avatar: resp.result.avatar,
poster: resp.result.poster,
styles: resp.result.styles,
activityList: resp.result.activities.map((item) => formatActivity(item))
};
}
async function fetchBrandInfo(params) {
const accessToken = await getAccessToken();
const resp = await post("/web/brand/info", accessToken, params);
return {
id: params.brandId,
name: resp.result.name,
content: resp.result.content,
avatar: resp.result.avatar,
poster: resp.result.poster,
activityList: resp.result.activities.map((item) => formatActivity(item))
};
}
async function fetchSiteList(params) {
params.pageNo ||= "1";
params.pageSize ||= "30";
const accessToken = await getAccessToken();
return (await post("/web/site/list", accessToken, params)).result.result.map((item) => ({
title: `${item.cityName} - ${item.name}`,
link: `${HOST}/venue/${item.id}`,
description: `id: ${item.id}`
}));
}
async function fetchSiteInfo(params) {
const accessToken = await getAccessToken();
const resp = await post("/web/site/info", accessToken, params);
return {
id: params.siteId,
name: `${resp.result.cityName} - ${resp.result.name}`,
address: resp.result.address,
avatar: resp.result.avatar,
poster: resp.result.poster
};
}
async function fetchBrandList(params) {
params.pageNo ||= "1";
params.pageSize ||= "30";
const accessToken = await getAccessToken();
return (await post("/web/brand/list", accessToken, params)).result.result.map((item) => ({
title: item.name,
link: `${HOST}/host/${item.id}`,
description: `id: ${item.id}`
}));
}
async function fetchParams() {
const accessToken = await getAccessToken();
return post("/web/activity/list/params", accessToken);
}
async function fetchCityList(keyword = "") {
return sortBy((await fetchParams()).result, "cityCode").filter((item) => item.cityName.includes(keyword.trim())).map((item) => ({
title: item.cityName,
link: `${HOST}/event/list?cityCode=${item.cityCode}`,
description: `cityCode: ${item.cityCode}`
}));
}
async function fetchStyleList(keyword = "") {
let styles = (await fetchParams()).result.flatMap((item) => item.styles);
styles = uniqBy(styles, "key");
styles = sortBy(styles, "key");
return styles.filter((item) => item.showName.includes(keyword.trim())).map((item) => ({
title: item.showName,
link: `${HOST}/event/list?showStyle=${item.key}`,
description: `showStyle: ${item.key}`
}));
}
async function fetchDictionary(cityCode, showStyle) {
const target = (await fetchParams()).result.find((item) => String(item.cityCode) === cityCode);
if (!target) return {};
return {
cityName: target.cityName,
showName: target.styles.find((item) => String(item.key) === showStyle)?.showName
};
}
//#endregion
export { fetchDictionary as a, fetchSiteInfo as c, HOST as d, TITLE as f, fetchCityList as i, fetchSiteList as l, fetchBrandInfo as n, fetchPerformerInfo as o, fetchBrandList as r, fetchPerformerList as s, fetchActivityList as t, fetchStyleList as u };