1+ "use strict"
2+ import Axios from "axios"
3+
4+ class $Leetcode {
5+
6+ //实例预设值
7+ name = `Leetcode Api`
8+ host = `https://leetcode-cn.com/`
9+ GitHub_Link = `https://github.com/NeserCode/Leetcode-Api`
10+
11+ //实例化对象
12+ constructor ( ) {
13+ console . log ( `🙇 感谢使用 ${ this . name } \n🔗 Github项目地址 ${ this . GitHub_Link } \n⭐ 欢迎 star issue ` ) ;
14+ }
15+
16+ //获取题库
17+ getQuestionSet = async ( categorySlug , skip , limit ) => {
18+ var config = {
19+ method : 'post' ,
20+ url : `${ this . host } graphql/` ,
21+ data : JSON . stringify ( {
22+ "query" : "\n query problemsetQuestionList($categorySlug: String, $limit: Int, $skip: Int, $filters: QuestionListFilterInput) {\n problemsetQuestionList(\n categorySlug: $categorySlug\n limit: $limit\n skip: $skip\n filters: $filters\n ) {\n total\n questions {\n acRate\n difficulty\n solutionNum\n title\n titleCn\n titleSlug\n }\n }\n}\n" ,
23+ "variables" : {
24+ "categorySlug" : categorySlug ?? "" ,
25+ "skip" : skip ?? 0 ,
26+ "limit" : limit ?? 30 ,
27+ "filters" : { }
28+ }
29+ } )
30+ } ;
31+ return Axios ( config )
32+ }
33+
34+ //获取题目详情
35+ getQuestion = async ( slug ) => {
36+ var config = {
37+ method : 'post' ,
38+ url : `${ this . host } graphql/` ,
39+ data : JSON . stringify ( {
40+ "operationName" : "questionData" ,
41+ "variables" : {
42+ "titleSlug" : slug
43+ } ,
44+ "query" : "query questionData($titleSlug: String!) {\n question(titleSlug: $titleSlug) {\n questionId\n questionFrontendId\n categoryTitle\n boundTopicId\n title\n titleSlug\n content\n translatedTitle\n translatedContent\n isPaidOnly\n difficulty\n likes\n dislikes\n isLiked\n similarQuestions\n contributors {\n username\n profileUrl\n avatarUrl\n __typename\n }\n langToValidPlayground\n topicTags {\n name\n slug\n translatedName\n __typename\n }\n companyTagStats\n codeSnippets {\n lang\n langSlug\n code\n __typename\n }\n stats\n hints\n solution {\n id\n canSeeDetail\n __typename\n }\n status\n sampleTestCase\n metaData\n judgerAvailable\n judgeType\n mysqlSchemas\n enableRunCode\n envInfo\n book {\n id\n bookName\n pressName\n source\n shortDescription\n fullDescription\n bookImgUrl\n pressImgUrl\n productUrl\n __typename\n }\n isSubscribed\n isDailyQuestion\n dailyRecordStatus\n editorType\n ugcQuestionId\n style\n exampleTestcases\n __typename\n }\n}\n"
45+ } )
46+ } ;
47+ return Axios ( config )
48+ }
49+
50+ //获取题目状态(仅状态)
51+ getQuestionStatus = async ( ) => {
52+ var config = {
53+ method : 'post' ,
54+ url : `${ this . host } graphql/` ,
55+ data : JSON . stringify ( {
56+ "operationName" : "allQuestionsStatuses" ,
57+ "variables" : { } ,
58+ "query" : "query allQuestionsStatuses {\n allQuestionsBeta {\n ...questionStatusFields\n __typename\n }\n}\n\nfragment questionStatusFields on QuestionNode {\n questionId\n status\n __typename\n}\n"
59+ } )
60+ } ;
61+ return Axios ( config )
62+ }
63+
64+ //获取对应提交ID的处理详情
65+ getSubumissionStatus = ( submissionID ) => {
66+ var config = {
67+ method : 'get' ,
68+ url : `${ this . host } submissions/detail/${ submissionID } /check/` ,
69+ } ;
70+ return Axios ( config )
71+ }
72+
73+ //获取用户状态
74+ getUserStatus = ( ) => {
75+ var config = {
76+ method : 'post' ,
77+ url : `${ this . host } graphql/` ,
78+ data : JSON . stringify ( {
79+ "query" : "\n query globalData {\n userStatus {\n isSignedIn\n isPremium\n username\n realName\n avatar\n userSlug\n isAdmin\n useTranslation\n premiumExpiredAt\n isTranslator\n isSuperuser\n isPhoneVerified\n isVerified\n }\n jobsMyCompany {\n nameSlug\n }\n commonNojPermissionTypes\n}\n " ,
80+ "variables" : { }
81+ } )
82+ } ;
83+ return Axios ( config )
84+ }
85+
86+ //获取题目提交后的ID ! 需要伪造Referer
87+ getSubmissionID = ( question_id , lang , typed_code , questionSlug ) => {
88+ // Electron 中伪造 referer 的方法示例:
89+
90+ // session.defaultSession.webRequest.onBeforeSendHeaders({ urls: [`${this.host}problems/*`] }, (details, callback) => {
91+ // details.requestHeaders['Referer'] = `${this.host}problems/${questionSlug}/submissions/`
92+ // callback({ cancel: false, requestHeaders: details.requestHeaders })
93+ // })
94+
95+ var config = {
96+ method : 'post' ,
97+ url : `${ this . host } problems/${ questionSlug } /submit/` ,
98+ data : JSON . stringify ( {
99+ "question_id" : question_id ,
100+ "lang" : lang ,
101+ "typed_code" : typed_code ,
102+ "test_mode" : false ,
103+ "test_judger" : "" ,
104+ "questionSlug" : questionSlug
105+ } )
106+ } ;
107+ return Axios ( config )
108+ }
109+ }
110+
111+ export default $Leetcode
0 commit comments