Files
RSSHub/lib/v2/leetcode/dailyquestion-solution-en.js
Albert Cai 792624e899 feat(route): 增加leetcode每日一题题解 (#10499)
* feat(route): 增加leetcode每日一题题解

* fix: leetcode每日一题题解

* fix: leetcode每日一题题解
2022-08-17 00:44:47 +08:00

136 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const got = require('@/utils/got');
const showdown = require('showdown');
const { parseDate } = require('@/utils/parse-date');
const timezone = require('@/utils/timezone');
module.exports = async (ctx) => {
const baseurl = `https://leetcode.com`;
const url = `${baseurl}/graphql/`;
const headers = {
'content-type': 'application/json',
};
const emoji = {
Medium: '🟡',
Easy: '🟢',
Hard: '🔴',
};
// 获取每日一题
const data = (
await got({
method: 'post',
url,
json: {
operationName: 'questionOfToday',
query: `query questionOfToday {
activeDailyCodingChallengeQuestion {
date
link
question {
frontendQuestionId: questionFrontendId
titleSlug
}
}
}`,
variables: {},
},
headers,
})
).data.data;
const questionTitle = data.activeDailyCodingChallengeQuestion.question.titleSlug;
const questionUrl = `${baseurl}/problems/${questionTitle}/`;
// 获取题目内容
const question = (
await got({
method: 'post',
url,
json: {
operationName: 'questionData',
query: `query questionData($titleSlug: String!) {
question(titleSlug: $titleSlug) {
questionId
questionFrontendId
categoryTitle
boundTopicId
title
titleSlug
content
translatedTitle
translatedContent
isPaidOnly
difficulty
likes
}
}`,
variables: {
titleSlug: questionTitle,
},
},
headers,
})
).data.data.question;
const diffEmoji = emoji[question.difficulty] || '';
// 获取题解en网站仅一个题解)
const article = (
await got({
method: 'post',
url,
json: {
operationName: 'QuestionNote',
query: `query QuestionNote($titleSlug: String!) {
question(titleSlug: $titleSlug) {
questionId
article
solution {
id
content
contentTypeId
canSeeDetail
paidOnly
hasVideoSolution
paidOnlyVideo
rating {
id
count
average
userRating {
score
}
}
}
}
}`,
variables: {
titleSlug: questionTitle,
},
},
headers,
})
).data.data.question.solution;
const converter = new showdown.Converter();
const handleText = (s) => {
// 处理多语言代码展示问题
s = s.replace(/(```)([a-zA-Z0-9-+#]+)\s*?(\[.*?\])?\n/g, '\r\n###$2\r\n$1$2\r\n');
return s;
};
ctx.state.data = {
title: 'LeetCode DailyQuestion Solution',
description: 'LeetCode DailyQuestion Solution',
link: questionUrl,
item: [
{
title: `DailyQuestion-${question.title}${diffEmoji}`,
link: questionUrl,
description: question.content,
pubDate: timezone(parseDate(data.activeDailyCodingChallengeQuestion.date), +8),
},
{
title: `Solution-${question.title}`,
link: `${questionUrl}solution/`,
description: converter.makeHtml(handleText(article.content)),
pubDate: timezone(parseDate(data.activeDailyCodingChallengeQuestion.date), +8),
author: 'leetcode',
},
],
};
};