rsshub
Version:
Make RSS Great Again!
131 lines (121 loc) β’ 3.4 kB
text/typescript
import { Route } from '@/types';
import got from '@/utils/got';
import { art } from '@/utils/render';
import path from 'node:path';
const host = 'https://leetcode.cn';
export const route: Route = {
path: '/dailyquestion/cn',
radar: [
{
source: ['leetcode.cn/'],
},
],
name: 'Unknown',
maintainers: [],
handler,
url: 'leetcode.cn/',
};
async function handler() {
const question = {
date: '',
link: '',
titleSlug: '',
content: '',
frontedId: '',
difficulty: '',
tags: '',
};
const url = host + '/graphql';
const dailyQuestionPayload = {
query: `query questionOfToday {
todayRecord {
date
question {
frontendQuestionId: questionFrontendId
titleSlug
}
}
} `,
variables: {},
};
const dailyQuestionResponse = await got({
method: 'post',
url,
headers: {
'content-type': 'application/json',
},
body: JSON.stringify(dailyQuestionPayload),
});
const data = dailyQuestionResponse.data.data.todayRecord[0];
question.date = data.date;
question.titleSlug = data.question.titleSlug;
question.link = host + '/problems/' + question.titleSlug;
const detailsPayload = {
operationName: 'questionData',
query: `query questionData($titleSlug: String!) {
question(titleSlug: $titleSlug) {
questionId
questionFrontendId
title
titleSlug
content
translatedTitle
translatedContent
difficulty
topicTags {
name
slug
translatedName
__typename
}
__typename
}
}`,
variables: {
titleSlug: question.titleSlug,
},
};
const detailsResponse = await got({
method: 'post',
url,
headers: {
'content-type': 'application/json',
},
body: JSON.stringify(detailsPayload),
});
const emoji = {
Medium: 'π‘',
Easy: 'π’',
Hard: 'π΄',
};
const details = detailsResponse.data.data.question;
question.content = details.translatedContent;
question.frontedId = details.questionFrontendId;
question.difficulty = emoji[details.difficulty];
let topicTags = details.topicTags;
topicTags = topicTags.map((item) => {
let slug = '#' + item.slug;
slug = slug.replaceAll('-', '_');
return slug;
});
question.tags = topicTags.join(' ');
const rssData = {
title: question.frontedId + '.' + question.titleSlug,
description: art(path.join(__dirname, 'templates/question-description.art'), {
question,
}),
link: question.link,
};
return {
title: 'LeetCode ζ―ζ₯δΈι’',
link: 'https://leetcode.cn',
description: 'Leetcode ζ―ζ₯δΈι’',
item: [
{
title: rssData.title,
description: rssData.description + question.content,
link: rssData.link,
},
],
};
}