UNPKG

rsshub

Version:
68 lines (66 loc) 2.53 kB
import "./config-C37vj7VH.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./proxy-Db7uGcYb.mjs"; import { n as puppeteer_default } from "./puppeteer-DGmvuGvT.mjs"; import { load } from "cheerio"; //#region lib/routes/researchgate/publications.ts const route = { path: "/publications/:id", radar: [{ source: ["researchgate.net/profile/:username"], target: "/publications/:username" }], name: "Unknown", maintainers: [], handler }; async function handler(ctx) { const currentUrl = `https://www.researchgate.net/profile/${ctx.req.param("id")}`; const browser = await puppeteer_default(); const page = await browser.newPage(); await page.setRequestInterception(true); page.on("request", (request) => { request.resourceType() === "document" || request.resourceType() === "script" ? request.continue() : request.abort(); }); await page.goto(currentUrl); const response = await page.evaluate(() => document.documentElement.innerHTML); await page.close(); const $ = load(response); const list = $("div[itemprop=\"headline\"] a").toArray().slice(0, ctx.req.query("limit") ? Number(ctx.req.query("limit")) : 15).map((item) => { item = $(item); return { title: item.text(), link: item.attr("href") }; }); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { const page$1 = await browser.newPage(); await page$1.setRequestInterception(true); page$1.on("request", (request) => { request.resourceType() === "document" || request.resourceType() === "script" ? request.continue() : request.abort(); }); await page$1.goto(item.link); const detailResponse = await page$1.evaluate(() => document.documentElement.innerHTML); await page$1.close(); const content = load(detailResponse); item.doi = content("meta[property=\"citation_doi\"]").attr("content"); item.pubDate = parseDate(content("meta[property=\"citation_publication_date\"]").attr("content")); const authors = []; content("meta[property=\"citation_author\"]").each(function() { authors.push(content(this).attr("content")); }); item.author = authors.join(", "); item.description = content("div[itemprop=\"description\"]").html(); return item; }))); await browser.close(); return { title: `${$("meta[property=\"profile:username\"]").attr("content")}'s Publications - ResearchGate`, link: currentUrl, item: items }; } //#endregion export { route };