UNPKG

rsshub

Version:
99 lines (88 loc) 3.32 kB
import { config } from '@/config'; import { Route } from '@/types'; import cache from '@/utils/cache'; import ofetch from '@/utils/ofetch'; import { load } from 'cheerio'; export const route: Route = { path: '/home/:column?', categories: ['new-media'], example: '/jumeili/home', parameters: { column: '内容栏, 默认为 `0`(最新)。其他可选:`-1`(头条)、`62073`(精选)、`13243`(年度大会)等。详细可以在开发者工具 Network 面板中找到,如:`https://www.jumeili.cn/ws/AjaxService.ashx?act=index_article&page=1&pageSize=20&column=0`最后的 `column=0` 即为`column` 参数', }, features: { requireConfig: [ { name: 'JUMEILI_COOKIE', optional: true, description: '用户登录后,可以从浏览器开发者工具 Network 面板中的 jumeili 页面请求获取 Cookie,如:`ASP.NET_SessionId=xxx;jmlweb4=xxx`全部复制并设置为环境变量', }, ], antiCrawler: true, }, radar: [ { source: ['www.jumeili.cn/', 'jumeili.cn/'], target: '/home/:column?', }, ], name: '首页资讯', maintainers: ['kjasn'], handler, description: `::: Warning 未登录用户无法获取完整文章内容,只能看到预览内容。想要获取完整文章内容,需要设置\`JUMEILI_COOKIE\`环境变量。 :::`, }; async function handler(ctx) { const baseUrl = 'https://www.jumeili.cn'; const column = ctx.req.param('column') ?? 0; const link = `${baseUrl}/ws/AjaxService.ashx?act=index_article&page=1&pageSize=20&column=${column}`; const cookie = config.jumeili.cookie; const response = await ofetch(link, { headers: { referer: baseUrl, 'user-agent': config.trueUA, accept: 'application/json, text/javascript, */*; q=0.01', cookie, }, }); // parse 两次 let data = JSON.parse(response); if (data && typeof data === 'string') { data = JSON.parse(data); } let items = data.items.map((item) => ({ title: item.title, link: baseUrl + item.url, description: item.subject, // 预览内容 image: item.imgurl, author: item.author, // pubDate: parseDate(item.pubTime), })); if (cookie) { items = await Promise.all( items.map((item) => cache.tryGet(item.link, async () => { const article = await ofetch(item.link, { headers: { referer: baseUrl, 'user-agent': config.trueUA, accept: 'application/json, text/javascript, */*; q=0.01', cookie, }, }); const $ = load(article); const content = $('#Cnt-Main-Article-JML').html(); if (content) { item.description = content; // 替换为完整正文 } return item; }) ) ); } return { title: '聚美丽 - 首页资讯', item: items, }; }