UNPKG

rsshub

Version:
139 lines (137 loc) 5.38 kB
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 ViewType } from "./types-D84BRIt4.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import "./proxy-Db7uGcYb.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import "./puppeteer-DGmvuGvT.mjs"; import "./readable-social-DoIL4WB3.mjs"; import "./puppeteer-utils-BK3JC9qW.mjs"; import { t as utils_default } from "./utils-D1eKDLN1.mjs"; import path from "node:path"; import { load } from "cheerio"; //#region lib/routes/weibo/search/hot.ts init_esm_shims(); let wpic = "false"; let fullpic = "false"; const route = { path: "/search/hot/:fulltext?", categories: ["social-media"], view: ViewType.SocialMedia, example: "/weibo/search/hot", parameters: { fulltext: { description: ` - 使用\`/weibo/search/hot\`可以获取热搜条目列表; - 使用\`/weibo/search/hot/fulltext\`可以进一步获取热搜条目下的摘要信息(不含图片视频); - 使用\`/weibo/search/hot/fulltext?pic=true\`可以获取图片缩略(但需要配合额外的手段,例如浏览器上的 Header Editor 等来修改 referer 参数为\`https://weibo.com\`,以规避微博的外链限制,否则图片无法显示。) - 使用\`/weibo/search/hot/fulltext?pic=true&fullpic=true\`可以获取 Original 图片(但需要配合额外的手段,例如浏览器上的 Header Editor 等来修改 referer 参数为\`https://weibo.com\`,以规避微博的外链限制,否则图片无法显示。)` } }, features: { requireConfig: [{ name: "WEIBO_COOKIES", optional: true, description: "" }], requirePuppeteer: true, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["s.weibo.com/top/summary"] }], name: "热搜榜", maintainers: ["xyqfer", "shinemoon"], handler, url: "s.weibo.com/top/summary" }; async function handler(ctx) { wpic = ctx.req.query("pic") ?? "false"; fullpic = ctx.req.query("fullpic") ?? "false"; const { data: { data } } = await utils_default.tryWithCookies((cookies) => got_default({ method: "get", url: "https://m.weibo.cn/api/container/getIndex?containerid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot&title=%E5%BE%AE%E5%8D%9A%E7%83%AD%E6%90%9C&extparam=filter_type%3Drealtimehot%26mi_cid%3D100103%26pos%3D0_0%26c_type%3D30%26display_time%3D1540538388&luicode=10000011&lfid=231583", headers: { Referer: "https://s.weibo.com/top/summary?cate=realtimehot", Cookie: cookies, ...utils_default.apiHeaders } })); let resultItems = null; if (ctx.req.param("fulltext") === "fulltext") { const tlist = data.cards[0].card_group.map((item) => { return { title: item.desc, link: `https://m.weibo.cn/search?containerid=100103type%3D1%26q%3D${encodeURIComponent(item.desc)}`, plink: `https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26q%3D${encodeURIComponent(item.desc)}` }; }); resultItems = await Promise.all(tlist.map((i) => cache_default.tryGet(i.plink, async () => { i.description = (await fetchContent(i.plink)).content; return i; }))); } else resultItems = data.cards[0].card_group.map((item) => { const title = item.desc; const link = `https://m.weibo.cn/search?containerid=100103type%3D1%26q%3D${encodeURIComponent(item.desc)}`; return { title, description: item.desc, link }; }); return { title: "微博热搜榜", link: "https://s.weibo.com/top/summary?cate=realtimehot", description: "实时热点,每分钟更新一次", item: resultItems }; } async function fetchContent(url) { const subres = await got_default(url, { headers: { Cookie: config.weibo.cookies ?? "" } }); let demostr = ""; try { const cards = subres.data.data.cards; demostr = seekContent(cards); } catch {} return { content: demostr }; } function seekContent(clist) { const stub = load("<div id=\"wbcontent\"></div>")("#wbcontent"); for (const curitem of clist) { if (curitem.card_type === 9) { const tbpic = curitem.mblog.thumbnail_pic ?? ""; const index = tbpic.lastIndexOf("/"); const thumbfolder = tbpic.slice(0, index + 1); const curcontent = load(curitem.mblog.text); if (wpic === "true") curcontent("img").attr("width", "1em").attr("height", "1em"); else curcontent("img").remove(); const section = art(path.join(__dirname, "templates/digest-69514cd7.art"), { author: { link: curitem.mblog.user.profile_url, name: curitem.mblog.user.screen_name }, msg: curcontent.html(), link: curitem.scheme, postinfo: curitem.mblog.created_at, picnum: wpic === "true" ? curitem.mblog.pic_num : 0, pics: wpic === "true" && curitem.mblog.pic_num > 0 ? curitem.mblog.pics.map((item) => { const pid = item.pid; return fullpic === "false" ? { url: thumbfolder + pid + ".jpg", rurl: item.url } : { url: item.url, rurl: item.url }; }) : [] }); stub.append(section); } if (curitem.card_type === 11) stub.append(seekContent(curitem.card_group)); } return stub.html(); } //#endregion export { route };