1+ // https://codetop.cc/api/questions/?page=${N}&search=&ordering=-frequency
2+
3+ let genUrl = ( N ) => {
4+ return `https://codetop.cc/api/questions/?page=${ N } &search=&ordering=-frequency`
5+ }
6+
7+ let pageRange = { min : 1 , max : 50 }
8+
9+ let fetchPage = ( N ) => {
10+ let url = genUrl ( N )
11+ console . log ( `Fetching ${ url } ...` ) ;
12+ return fetch ( url ) . then ( r => r . json ( ) )
13+ }
14+
15+ let fetchAllPages = ( range ) => {
16+ let queryPeriod = 1000
17+ let promises = [ ]
18+ for ( let i = range . min ; i <= range . max ; i ++ ) {
19+ promises . push ( fetchPage ( i ) )
20+ }
21+ return Promise . all ( promises )
22+ }
23+
24+ let fetchAllQuestions = ( ) => {
25+ return fetchAllPages ( pageRange ) . then ( pages => {
26+ let questions = [ ]
27+ for ( let page of pages ) {
28+ console . log ( "Page: " , page ) ;
29+ questions = questions . concat ( page . list )
30+ }
31+ return questions
32+ } )
33+ }
34+
35+ /**
36+ * Response format:
37+ * {
38+ * count,
39+ * list {
40+ * id,
41+ * value,
42+ * leetcode? {
43+ * id,
44+ * title
45+ * }
46+ * }
47+ * }
48+ */
49+
50+ // Generate a list of {leet_id, value, title}
51+ let genList = ( questions ) => {
52+ let list = [ ]
53+ for ( let q of questions ) {
54+ let leetcode = q . leetcode
55+ if ( leetcode ) {
56+ let id = leetcode . id
57+ let title = leetcode . title
58+ let value = q . value
59+ list . push ( { id, value, title} )
60+ }
61+ }
62+ return list
63+ }
64+
65+ // Sort the list by value
66+ let sortList = ( list ) => {
67+ return list . sort ( ( a , b ) => {
68+ return b . value - a . value
69+ } )
70+ }
71+
72+ // Print to console
73+ let printList = ( list ) => {
74+ let out = ""
75+ for ( let { id, value, title} of list ) {
76+ out += `${ id } ,${ value } ,${ title } \n`
77+ }
78+ console . log ( out )
79+ }
80+
81+ // Main
82+ fetchAllQuestions ( ) . then ( questions => {
83+ let list = genList ( questions )
84+ let sortedList = sortList ( list )
85+ printList ( sortedList )
86+ } )
0 commit comments