Skip to content

Commit aae69db

Browse files
committed
get question list
1 parent c2d7733 commit aae69db

File tree

4 files changed

+163
-0
lines changed

4 files changed

+163
-0
lines changed

src/client.d.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,39 @@ export interface QuestionOfTodayResponse {
119119
}
120120
}
121121

122+
interface QuestionListEntry {
123+
difficulty: string;
124+
id: number;
125+
paidOnly: boolean;
126+
questionFrontendId: string;
127+
status: string;
128+
title: string;
129+
titleSlug: string;
130+
topicTags: Array<{
131+
name: string;
132+
slug: string;
133+
__typename: string;
134+
}>;
135+
frequency: any;
136+
isInMyFavorites: boolean
137+
acRate: number;
138+
contestPoint: any;
139+
__typename: string;
140+
}
141+
142+
export interface QuestionListV2Response {
143+
data: {
144+
problemsetQuestionListV2: {
145+
questions: QuestionListEntry[];
146+
totalLength: number;
147+
finishedLength: number;
148+
hasMore: boolean;
149+
}
150+
}
151+
}
152+
122153
export class LeetcodeClient {
123154
GetQuestionOfToday(): Promise<QuestionOfTodayResponse>;
124155
GetQuestionDetail(titleSlug: string): Promise<QuestionDetailResponse>;
156+
GetQuestionList(skip: number, limit?: number): Promise<QuestionListV2Response>;
125157
}

src/client.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
BASE_URL,
33
QUERY_questionDetail,
44
QUERY_questionOfTodayV2,
5+
QUERY_problemsetQuestionListV2,
56
} from "./constants.js";
67

78
/**
@@ -54,4 +55,100 @@ export class LeetcodeClient {
5455
}
5556
});
5657
}
58+
59+
async GetQuestionList(skip, limit = 100) {
60+
return this.graphql({
61+
query: QUERY_problemsetQuestionListV2,
62+
variables: {
63+
skip,
64+
limit,
65+
categorySlug: "all-code-essentials",
66+
filters: {
67+
filterCombineType: "ALL",
68+
statusFilter: {
69+
questionStatuses: [],
70+
operator: "IS",
71+
},
72+
difficultyFilter: {
73+
difficulties: [],
74+
operator: "IS",
75+
},
76+
languageFilter: {
77+
languageSlugs: [],
78+
operator: "IS",
79+
},
80+
topicFilter: {
81+
topicSlugs: [],
82+
operator: "IS",
83+
},
84+
acceptanceFilter: {},
85+
frequencyFilter: {},
86+
frontendIdFilter: {},
87+
lastSubmittedFilter: {},
88+
publishedFilter: {},
89+
companyFilter: {
90+
companySlugs: [],
91+
operator: "IS",
92+
},
93+
positionFilter: {
94+
positionSlugs: [],
95+
operator: "IS",
96+
},
97+
contestPointFilter: {
98+
contestPoints: [],
99+
operator: "IS",
100+
},
101+
premiumFilter: {
102+
premiumStatus: [],
103+
operator: "IS",
104+
},
105+
},
106+
searchKeyword: "",
107+
sortBy: {
108+
sortField: "CUSTOM",
109+
sortOrder: "ASCENDING",
110+
},
111+
filtersV2: {
112+
filterCombineType: "ALL",
113+
statusFilter: {
114+
questionStatuses: [],
115+
operator: "IS",
116+
},
117+
difficultyFilter: {
118+
difficulties: [],
119+
operator: "IS",
120+
},
121+
languageFilter: {
122+
languageSlugs: [],
123+
operator: "IS",
124+
},
125+
topicFilter: {
126+
topicSlugs: [],
127+
operator: "IS",
128+
},
129+
acceptanceFilter: {},
130+
frequencyFilter: {},
131+
frontendIdFilter: {},
132+
lastSubmittedFilter: {},
133+
publishedFilter: {},
134+
companyFilter: {
135+
companySlugs: [],
136+
operator: "IS",
137+
},
138+
positionFilter: {
139+
positionSlugs: [],
140+
operator: "IS",
141+
},
142+
contestPointFilter: {
143+
contestPoints: [],
144+
operator: "IS",
145+
},
146+
premiumFilter: {
147+
premiumStatus: [],
148+
operator: "IS",
149+
},
150+
},
151+
},
152+
});
153+
}
57154
}

src/constants.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ const load_query = (filename) => readFileSync(new URL(`./queries/${filename}.gra
66

77
export const QUERY_questionOfTodayV2 = load_query("questionOfTodayV2");
88
export const QUERY_questionDetail = load_query("questionDetail");
9+
export const QUERY_problemsetQuestionListV2 = load_query("problemsetQuestionListV2");
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
query problemsetQuestionListV2($filters: QuestionFilterInput, $limit: Int, $searchKeyword: String, $skip: Int, $sortBy: QuestionSortByInput, $categorySlug: String) {
2+
problemsetQuestionListV2(
3+
filters: $filters
4+
limit: $limit
5+
searchKeyword: $searchKeyword
6+
skip: $skip
7+
sortBy: $sortBy
8+
categorySlug: $categorySlug
9+
) {
10+
questions {
11+
id
12+
titleSlug
13+
title
14+
translatedTitle
15+
questionFrontendId
16+
paidOnly
17+
difficulty
18+
topicTags {
19+
name
20+
slug
21+
nameTranslated
22+
}
23+
status
24+
isInMyFavorites
25+
frequency
26+
acRate
27+
contestPoint
28+
}
29+
totalLength
30+
finishedLength
31+
hasMore
32+
}
33+
}

0 commit comments

Comments
 (0)