Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from diygod:master #3

Merged
merged 2 commits into from
Apr 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/routes/hellogithub/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const sorts = {
};

export const route: Route = {
path: ['/article/:sort?/:id?', '/:sort?/:id?'],
path: ['/article/:sort?/:id?'],
categories: ['programming'],
example: '/hellogithub/article',
parameters: { sort: '排序方式,见下表,默认为 `hot`,即热门', id: '标签 id,可在对应标签页 URL 中找到,默认为全部标签' },
Expand Down Expand Up @@ -61,7 +61,7 @@ async function handler(ctx) {

const $ = load(tagResponse.data);

tag = $('meta[property="og:title"]').attr('content').split(' ').pop();
tag = $('meta[property="og:title"]')?.attr('content')?.split(' ').pop();
buildId = tagResponse.data.match(/"buildId":"(.*?)",/)[1];
}

Expand Down
3 changes: 2 additions & 1 deletion lib/routes/hellogithub/report.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ const types = {

export const route: Route = {
path: ['/ranking/:type?', '/report/:type?'],
name: 'Unknown',
example: '/hellogithub/ranking',
name: '榜单报告',
maintainers: ['moke8', 'nczitzk'],
handler,
description: `| 编程语言 | 服务器 | 数据库 |
Expand Down
63 changes: 39 additions & 24 deletions lib/routes/hellogithub/volume.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,53 +10,68 @@ const md = MarkdownIt({
html: true,
});
import { load } from 'cheerio';
import cache from '@/utils/cache';
import { config } from '@/config';

art.defaults.imports.render = function (string) {
return md.render(string);
};

export const route: Route = {
path: ['/month', '/volume'],
name: 'Unknown',
maintainers: ['moke8', 'nczitzk'],
example: '/hellogithub/volume',
name: '月刊',
maintainers: ['moke8', 'nczitzk', 'CaoMeiYouRen'],
handler,
};

async function handler() {
async function handler(ctx) {
const limit: number = Number.parseInt(ctx.req.query('limit')) || 10;
const rootUrl = 'https://hellogithub.com';
const apiUrl = 'https://api.hellogithub.com/v1/periodical/';

const periodicalResponse = await got({
method: 'get',
url: apiUrl,
});
const current = periodicalResponse.data.volumes[0].num;
const currentUrl = `${rootUrl}/periodical/volume/${current}`;
const buildResponse = await got({
method: 'get',
url: currentUrl,
});
const volumes = periodicalResponse.data.volumes.slice(0, limit);

const $ = load(buildResponse.data);
const items = await Promise.all(
volumes.map(async (volume) => {
const current = volume.num;
const currentUrl = `${rootUrl}/periodical/volume/${current}`;
const key = `hellogithub:${currentUrl}`;
return await cache.tryGet(
key,
async () => {
const buildResponse = await got({
method: 'get',
url: currentUrl,
});

const text = $('#__NEXT_DATA__').text();
const response = JSON.parse(text);
const data = response.props;
const id = data.pageProps.volume.current_num;
const $ = load(buildResponse.data);

const items = [
{
title: `No.${id}`,
link: `${rootUrl}/periodical/volume/${id}`,
description: art(path.join(__dirname, 'templates/volume.art'), {
data: data.pageProps.volume.data,
}),
},
];
const text = $('#__NEXT_DATA__').text();
const response = JSON.parse(text);
const data = response.props;
const id = data.pageProps.volume.current_num;
return {
title: `《HelloGitHub》第 ${id} 期`,
link: `${rootUrl}/periodical/volume/${id}`,
description: art(path.join(__dirname, 'templates/volume.art'), {
data: data.pageProps.volume.data,
}),
};
},
config.cache.routeExpire,
false
);
})
);

return {
title: 'HelloGithub - 月刊',
link: currentUrl,
link: 'https://hellogithub.com/periodical',
item: items,
};
}
4 changes: 2 additions & 2 deletions lib/routes/sjtu/yzb/zkxx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ async function handler(ctx) {
.toArray()
.map((elem) => ({
link: new URL(elem.attribs.href, pageUrl).href,
title: elem.attribs.title,
pubDate: parseDate($(elem.next).text().trim()),
title: $(elem).text(),
pubDate: parseDate($(elem.next?.next).text().trim()),
})),
};
}
Loading