rsshub
Version:
Make RSS Great Again!
56 lines (54 loc) • 2.36 kB
JavaScript
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs";
import { t as config } from "./config-C37vj7VH.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as art } from "./render-BQo6B4tL.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import path from "node:path";
import { load } from "cheerio";
//#region lib/routes/followin/utils.ts
init_esm_shims();
const apiUrl = "https://api.followin.io";
const baseUrl = "https://followin.io";
const favicon = `${baseUrl}/favicon.ico`;
const getBParam = (lang) => ({
a: "web",
b: "",
c: lang,
d: 0,
e: "",
f: "",
g: "",
h: "0.1.0",
i: "official"
});
const getBuildId = (tryGet) => tryGet("followin:buildId", async () => {
const { data: pageResponse } = await got_default(baseUrl);
const $ = load(pageResponse);
const { buildId } = JSON.parse($("script#__NEXT_DATA__").text());
return buildId;
}, config.cache.routeExpire, false);
const getGToken = (tryGet) => tryGet("followin:gtoken", async () => {
const { data } = await got_default.post(`${apiUrl}/user/gtoken`);
return data.data.gtoken;
});
const parseList = (list, lang, buildId) => list.map((item) => ({
title: item.translated_title || item.title,
description: item.translated_content || item.content,
link: `${baseUrl}/${lang === "en" ? "" : `${lang}/`}feed/${item.id}`,
pubDate: parseDate(item.publish_time, "x"),
category: item.tags.map((tag) => tag.name),
author: item.nickname,
nextData: `${baseUrl}/_next/data/${buildId}/${lang}/feed/${item.id}.json`
}));
const parseItem = (item, tryGet) => tryGet(item.link, async () => {
const { data } = await got_default(item.nextData);
const { queries } = data.pageProps.dehydratedState;
const info = queries.find((q) => q.queryKey[0] === "/feed/info").state;
const thread = queries.find((q) => q.queryKey[0] === "/feed/thread");
item.description = thread ? art(path.join(__dirname, "templates/thread-1c70519d.art"), { list: thread.state.data.list }) : info.data.translated_full_content || info.data.full_content;
item.updated = parseDate(info.dataUpdatedAt, "x");
item.category = [...new Set([...item.category, ...info.data.tags.map((tag) => tag.name)])];
return item;
});
//#endregion
export { getBuildId as a, parseList as c, getBParam as i, baseUrl as n, getGToken as o, favicon as r, parseItem as s, apiUrl as t };