rsshub
Version:
Make RSS Great Again!
68 lines (66 loc) • 2.7 kB
JavaScript
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import "./helpers-DxBp0Pty.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/sciencedirect/call-for-paper.ts
init_esm_shims();
const route = {
path: "/call-for-paper/:subject",
categories: ["journal"],
example: "/sciencedirect/call-for-paper/education",
parameters: { subject: "学科分类,例如“education”" },
radar: [{ source: ["sciencedirect.com"] }],
name: "Call for Papers",
maintainers: ["etShaw-zh"],
handler,
url: "sciencedirect.com/browse/calls-for-papers",
description: "`sciencedirect.com/browse/calls-for-papers?subject=education` -> `/sciencedirect/call-for-paper/education`"
};
async function handler(ctx) {
const { subject = "" } = ctx.req.param();
const apiUrl = `https://www.sciencedirect.com/browse/calls-for-papers?subject=${subject}`;
const scriptJSON = load((await got_default(apiUrl, { headers: {
accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
} })).body)("script[data-iso-key=\"_0\"]").text();
if (!scriptJSON) throw new Error("Cannot find the script with data-iso-key=\"_0\"");
let data;
try {
data = JSON.parse(JSON.parse(scriptJSON));
} catch (error) {
throw new Error(`Failed to parse embedded script JSON: ${error.message}`);
}
const cfpList = data?.callsForPapers?.list || [];
if (!cfpList.length) throw new Error("No Calls for Papers found");
const items = cfpList.map((cfp) => {
const link = `https://www.sciencedirect.com/special-issue/${cfp.contentId}/${cfp.url}`;
const description = art(path.join(__dirname, "templates/description-7826a6be.art"), {
summary: cfp.summary,
submissionDeadline: cfp.submissionDeadline,
displayName: cfp.journal.displayName,
impactFactor: cfp.journal.impactFactor,
citeScore: cfp.journal.citeScore
});
return {
title: cfp.title,
author: `${cfp.journal.displayName} (IF: ${cfp.journal.impactFactor})`,
link,
description,
pubDate: cfp.submissionDeadline || ""
};
});
return {
title: `ScienceDirect Calls for Papers - ${subject}`,
link: apiUrl,
description: `Calls for Papers on ScienceDirect for subject: ${subject}`,
item: items
};
}
//#endregion
export { route };