From 9ef53d597d14283d4bbfff71d23bf6022b9934ba Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 19 Oct 2023 14:06:21 +0000 Subject: [PATCH] fix(route): github topic description (#13566) --- lib/v2/github/topic.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/lib/v2/github/topic.js b/lib/v2/github/topic.js index e5a3809ff5d438..0ee7281241d813 100644 --- a/lib/v2/github/topic.js +++ b/lib/v2/github/topic.js @@ -1,25 +1,41 @@ const cheerio = require('cheerio'); const got = require('@/utils/got'); +const { parseDate } = require('@/utils/parse-date'); module.exports = async (ctx) => { - const link = `https://github.com/topics/${ctx.params.name}?${ctx.params.qs}`; - const { data } = await got(link); + const link = `https://github.com/topics/${ctx.params.name}`; + const { data, url } = await got(link, { + searchParams: new URLSearchParams(ctx.params.qs), + }); const $ = cheerio.load(data); ctx.state.data = { title: $('title').text(), - link, + description: $('.markdown-body').text().trim(), + link: url, item: $('article.my-4') - .map((_, item) => { + .toArray() + .map((item) => { item = $(item); - const title = $(item.find('h3 a').get(1)).attr('href').slice(1); + const title = item.find('h3').text().trim(); const author = title.split('/')[0]; - const description = item.find('div.border-bottom > div > p + div').text(); - const link = `https://github.com/${title}`; + const description = (item.find('a img').prop('outerHTML') ?? '') + item.find('div > div > p').text(); + const link = `https://github.com${item.find('h3 a').last().attr('href')}`; + const category = item + .find('.topic-tag') + .toArray() + .map((item) => $(item).text().trim()); + const pubDate = parseDate(item.find('relative-time').attr('datetime')); - return { title, author, description, link }; - }) - .get(), + return { + title, + author, + description, + link, + category, + pubDate, + }; + }), }; };