diff --git a/config/index.js b/config/index.js index e56049883e..0eecfcd4fa 100644 --- a/config/index.js +++ b/config/index.js @@ -424,6 +424,7 @@ const leetcodeConfig = { baseUrl: "https://leetcode-cn.com", submitUrl: "https://leetcode-cn.com/problems/$slug/submit/", loginUrl: "https://leetcode-cn.com/accounts/login/", + allProblem: "https://leetcode-cn.com/api/problems/all/", _91UsernameCookieName: "login", // 在91网站中存lc用户名的cookie的键名 _91PwdCookieName: "password", // 在91网站中存lc密码的cookie的键名 lcSeesionCookieName: "LEETCODE_SESSION", // lc存seesionid的 cookie键名 diff --git a/routes/lc.js b/routes/lc.js index d82ff56c9b..d07153a413 100644 --- a/routes/lc.js +++ b/routes/lc.js @@ -136,7 +136,6 @@ function formateSubmitData(problem = {}){ return Object.assign(problem, { judge_type: 'large', lang: problem.lang, - question_id: parseInt(problem.id, 10), test_mode: false, typed_code: problem.code }) diff --git a/static/solution/generate.js b/static/solution/generate.js index 90f4f0eb67..4244e788cd 100644 --- a/static/solution/generate.js +++ b/static/solution/generate.js @@ -1,9 +1,12 @@ const fs = require("fs"); const path = require("path"); +const fetch = require('node-fetch') +const { leetcodeConfig:{ allProblem } } = require('../../config/index') const { encrypt } = require("../../utils/crypto.js"); const solutions = require("./solutions.json"); +let lcProblemIdMap = {} function toArray(sep = "-", txt) { if (!txt) return txt; @@ -50,6 +53,15 @@ function matchWioutPaddingLine(reg, txt) { ); } +function getQuestionId(link = "") { + if(!link) return null + let slug = link + .split('/') + .reverse() + .find(item => item) + return lcProblemIdMap[slug] +} + function generate(rawMD, rawMDBuffer, i) { const regs = { ...getSatelliteDataReg(), @@ -73,8 +85,9 @@ function generate(rawMD, rawMDBuffer, i) { description, content: encrypt(rawMDBuffer), title, - link, + link }; + solutions[i]['question_id'] = getQuestionId(link) || solutions[i]['question_id'] } // 基础篇 function generateBasic() { @@ -113,8 +126,36 @@ function generateAdvance() { }); } -generateBasic(); -generateTopic(); -generateAdvance(); +function getLcProblemIdMap() { + return fetch(allProblem) + .then(res => res.json()) + .then(res => { + let result = {} + let data = res.stat_status_pairs + if(data){ + result = data.reduce((pre, item) => { + let { stat: { question__title_slug, question_id } = {} } = item || {} + if(question__title_slug && question_id){ + pre[question__title_slug] = question_id + } + return pre + }, {}) + } + return result + }) +} + +async function main() { + try { + lcProblemIdMap = await getLcProblemIdMap() + } catch (err) { + console.log(err); + } + generateBasic(); + generateTopic(); + generateAdvance(); + + fs.writeFileSync(__dirname + "/solutions.json", JSON.stringify(solutions)); +} -fs.writeFileSync(__dirname + "/solutions.json", JSON.stringify(solutions)); +main()