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