Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8f53e98

Browse filesBrowse files
committed
update
1 parent 81879d5 commit 8f53e98
Copy full SHA for 8f53e98

File tree

Expand file treeCollapse file tree

9 files changed

+110
-61
lines changed
Filter options
Expand file treeCollapse file tree

9 files changed

+110
-61
lines changed

‎cmd/main.go renamed to ‎cmd/collect_all.go

Copy file name to clipboardExpand all lines: cmd/collect_all.go
+9-8Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package main
22

3-
import "github.com/realzhangm/leetcode_collector/collector"
3+
import (
4+
"github.com/realzhangm/leetcode_collector/collector"
5+
)
46

57
// 实现简单的功能
68
// 将 Leetcode 上的提交的代码,同步到本地,并生产一个 Markdown 汇总文件。
7-
89
func extractOneMarkDown() {
910
c := collector.NewCollector(collector.GetConfig())
10-
if err := c.LoadInfo(); err != nil{
11+
if err := c.LoadInfo(); err != nil {
1112
panic(err)
1213
}
1314

@@ -16,15 +17,15 @@ func extractOneMarkDown() {
1617
panic(err)
1718
}
1819

19-
err = c.ExtractOneMarkDown()
20-
if err != nil {
21-
panic(err)
22-
}
20+
//err = c.ExtractOneMarkDown()
21+
//if err != nil {
22+
// panic(err)
23+
//}
2324
}
2425

2526
func json2Md() {
2627
c := collector.NewCollector(collector.GetConfig())
27-
if err := c.LoadInfo(); err != nil{
28+
if err := c.LoadInfo(); err != nil {
2829
panic(err)
2930
}
3031
c.Json2MD()

‎collector/collector.go

Copy file name to clipboardExpand all lines: collector/collector.go
+28-18Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"github.com/pkg/errors"
8-
"github.com/realzhangm/leetcode_collector/collector/leetcode_cli"
9-
"github.com/realzhangm/leetcode_collector/collector/model"
10-
"github.com/realzhangm/leetcode_collector/collector/util"
11-
"golang.org/x/sync/errgroup"
127
"os"
138
"path"
149
"strconv"
1510
"strings"
1611
"sync"
1712
)
1813

14+
import (
15+
"github.com/pkg/errors"
16+
"github.com/realzhangm/leetcode_collector/collector/leetcode_cli"
17+
"github.com/realzhangm/leetcode_collector/collector/model"
18+
"github.com/realzhangm/leetcode_collector/collector/util"
19+
"golang.org/x/sync/errgroup"
20+
)
21+
1922
var (
2023
ErrCollector = errors.New("collect error")
2124
ErrExtractor = errors.Wrap(ErrCollector, "extracting error")
@@ -96,6 +99,7 @@ func (c *Collector) fetchAllProblems() error {
9699
return errors.Wrap(ErrCollector, err.Error())
97100
}
98101

102+
// 所有的问题
99103
err, allProblems := c.ltClit.GetAllProblems()
100104
if err != nil {
101105
return errors.Wrap(ErrCollector, err.Error())
@@ -119,6 +123,7 @@ func (c *Collector) fetchAllProblems() error {
119123
}
120124

121125
// Get question detail
126+
// 所有 AC 的详细
122127
err = c.fetchAcProblemsDetail()
123128
if err != nil {
124129
return err
@@ -154,27 +159,31 @@ func (c *Collector) submissionForOneLang(sbl []leetcode_cli.Submission) map[stri
154159

155160
func (c *Collector) fetchAllSubmissions() error {
156161
for slug := range c.personInfo.AcProblems {
157-
e, sbs := c.ltClit.QuerySubmissionsByQuestion(slug)
162+
sbs, e := c.ltClit.QuerySubmissionsByQuestion(slug)
158163
if e != nil {
159-
fmt.Println(e)
164+
fmt.Println("QuerySubmissionsByQuestion:", e)
160165
return e
161166
}
162167

163168
langSubmissionMap := c.submissionForOneLang(sbs.SubmissionList.Submissions)
164169
for _, sb := range langSubmissionMap {
165170
id, e2 := strconv.ParseInt(sb.ID, 10, 64)
166171
if e2 != nil {
167-
fmt.Println(e2)
168-
return e2
172+
panic(e2)
169173
}
174+
// 这里判断是否需要更新提交
170175
if !c.personInfo.SubmissionsNeedUpdate(slug, sb.Lang, sb.Timestamp) {
171176
continue
172177
}
173178

179+
// 获取提交的代码
174180
if err := tryNTimes(3, func(i int) error {
175-
e3, sbDetail := c.ltClit.QuerySubmissionDetail(id)
181+
sbDetail, e3 := c.ltClit.QuerySubmissionDetail(id)
176182
if e3 != nil {
177-
fmt.Println(i, "error:", e3)
183+
fmt.Printf("%+v \n", sbs)
184+
fmt.Printf("%+v \n", sb)
185+
fmt.Println(id, "QuerySubmissionDetail error:", e3)
186+
// panic(e3)
178187
return e3
179188
}
180189
titleSlug := sbDetail.SubmissionDetail.Question.TitleSlug
@@ -191,7 +200,7 @@ func (c *Collector) fetchAllSubmissions() error {
191200
}
192201

193202
// 存在服务拒绝
194-
func (c *Collector) fetchAllSubmissions2() error {
203+
func (c *Collector) fetchAllSubmissionsXX() error {
195204
g, ctx := errgroup.WithContext(context.TODO())
196205

197206
slugChan := make(chan string)
@@ -212,7 +221,7 @@ func (c *Collector) fetchAllSubmissions2() error {
212221
g.Go(func() error {
213222
defer close(submissionsChan)
214223
for slug := range slugChan {
215-
ee, sbs := c.ltClit.QuerySubmissionsByQuestion(slug)
224+
sbs, ee := c.ltClit.QuerySubmissionsByQuestion(slug)
216225
if ee != nil {
217226
fmt.Println(ee)
218227
return ee
@@ -244,7 +253,7 @@ func (c *Collector) fetchAllSubmissions2() error {
244253
fmt.Println(ee)
245254
return ee
246255
}
247-
ee, sbDetail := c.ltClit.QuerySubmissionDetail(id)
256+
sbDetail, ee := c.ltClit.QuerySubmissionDetail(id)
248257
if ee != nil {
249258
fmt.Println(ee)
250259
return ee
@@ -273,11 +282,13 @@ func (c *Collector) LoadInfo() error {
273282
}
274283

275284
func (c *Collector) FetchFromLeetCode() error {
285+
// 所有的AC
276286
err := c.fetchAllProblems()
277287
if err != nil {
278288
return err
279289
}
280290

291+
// 所有的AC的提交
281292
err = c.fetchAllSubmissions()
282293
if err != nil {
283294
return c.dumpInfo()
@@ -303,9 +314,9 @@ func (c *Collector) loadInfo() error {
303314
if err != nil {
304315
return err
305316
}
306-
fmt.Println(len(c.personInfo.AcProblems),
307-
len(c.personInfo.AcProblemsDetail),
308-
len(c.personInfo.AcSubmissions))
317+
fmt.Println("AC :", len(c.personInfo.AcProblems))
318+
fmt.Println("AC detail :", len(c.personInfo.AcProblemsDetail))
319+
fmt.Println("AC Submissions :", len(c.personInfo.AcSubmissions))
309320
return nil
310321
}
311322

@@ -334,7 +345,6 @@ func (c *Collector) ExtractOneMarkDown() error {
334345
}
335346

336347
fmt.Println("len(c.personInfo.AcProblemsDetail)=", len(c.personInfo.AcProblemsDetail))
337-
338348
return nil
339349
}
340350

‎collector/config.go

Copy file name to clipboardExpand all lines: collector/config.go
+5-4Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package collector
33
import (
44
"bufio"
55
"fmt"
6-
"github.com/pkg/errors"
7-
"io/ioutil"
86
"os"
97
"path"
108
"strings"
9+
)
1110

11+
import (
1212
"github.com/howeyc/gopass"
1313
"github.com/jinzhu/configor"
14+
"github.com/pkg/errors"
1415
"github.com/realzhangm/leetcode_collector/collector/leetcode_cli"
1516
)
1617

@@ -65,7 +66,7 @@ func LoadConfig() {
6566
}
6667

6768
func loadPass() error {
68-
buf, err := ioutil.ReadFile(".password")
69+
buf, err := os.ReadFile(".password")
6970
if err != nil {
7071
return err
7172
}
@@ -80,7 +81,7 @@ func loadPass() error {
8081

8182
func savePass() {
8283
str := fmt.Sprintf("%s %s", config.ltClientConf.UserName, config.ltClientConf.PassWord)
83-
err := ioutil.WriteFile(".password", []byte(str), os.ModePerm)
84+
err := os.WriteFile(".password", []byte(str), os.ModePerm)
8485
if err != nil {
8586
panic(err)
8687
}

‎collector/leetcode_cli/client.go

Copy file name to clipboardExpand all lines: collector/leetcode_cli/client.go
+28-18Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import (
1313
"os"
1414
"sync"
1515
"time"
16+
)
1617

18+
import (
1719
"github.com/machinebox/graphql"
1820
"github.com/pkg/errors"
1921
"github.com/realzhangm/leetcode_collector/collector/bufferpool"
@@ -177,8 +179,8 @@ func (c *Client) isLogin() bool {
177179
return c.loginFlag
178180
}
179181

180-
func (c *Client) setLoginFlag() {
181-
c.loginFlag = true
182+
func (c *Client) setLoginFlag(isLogIn bool) {
183+
c.loginFlag = isLogIn
182184
}
183185

184186
type LogInParam struct {
@@ -194,6 +196,10 @@ func (l LogInParam) postFormBuffer() *bytes.Buffer {
194196
}
195197

196198
func (c *Client) Login(ctx context.Context) error {
199+
return c.login(ctx)
200+
}
201+
202+
func (c *Client) login(ctx context.Context) error {
197203
loginUrl := Url + LoginPath
198204
logInParam := LogInParam{
199205
Login: c.conf.UserName,
@@ -221,7 +227,7 @@ func (c *Client) Login(ctx context.Context) error {
221227
msg := fmt.Sprintf("http status not OK, %d", response.StatusCode)
222228
return errors.Wrap(ErrorClientLogin, msg)
223229
}
224-
c.setLoginFlag()
230+
c.setLoginFlag(true)
225231
return nil
226232
}
227233

@@ -324,13 +330,13 @@ func (c *Client) QueryQuestionDetail(questionSlug string) (error, *QuestionDetai
324330
}
325331

326332
// QuerySubmissionsByQuestion get all the submission for each question
327-
func (c *Client) QuerySubmissionsByQuestion(questionSlug string) (error, *SubmissionsByQuestionResponse) {
333+
func (c *Client) QuerySubmissionsByQuestion(questionSlug string) (*SubmissionsByQuestionResponse, error) {
328334
if len(questionSlug) == 0 {
329-
return errors.Wrap(ErrorClientGraphQl, "questionSlug is zero length"), nil
335+
return nil, errors.Wrap(ErrorClientGraphQl, "questionSlug is zero length")
330336
}
331337

332338
if !c.isLogin() {
333-
return errors.Wrap(ErrorClientGraphQl, "not login"), nil
339+
return nil, errors.Wrap(ErrorClientGraphQl, "not login")
334340
}
335341

336342
httpCli := c.getHttpClintFromPool()
@@ -351,28 +357,29 @@ func (c *Client) QuerySubmissionsByQuestion(questionSlug string) (error, *Submis
351357
var responseData map[string]interface{}
352358
err := graphqlCli.Run(context.TODO(), req, &responseData)
353359
if err != nil {
354-
return errors.Wrap(ErrorClientGraphQl, err.Error()), nil
360+
return nil, errors.Wrap(ErrorClientGraphQl, err.Error())
355361
}
356-
saber := &SubmissionsByQuestionResponse{}
362+
357363
buff := bufferpool.GetBuffer()
358364
defer bufferpool.PutBuffer(buff)
359365
enc := json.NewEncoder(buff)
360366
err = enc.Encode(responseData)
361367
if err != nil {
362-
return errors.Wrap(ErrorClientGraphQl, err.Error()), nil
368+
return nil, errors.Wrap(ErrorClientGraphQl, err.Error())
363369
}
364370
dec := json.NewDecoder(buff)
371+
saber := &SubmissionsByQuestionResponse{}
365372
err = dec.Decode(saber)
366373
if err != nil {
367-
return errors.Wrap(ErrorClientGraphQl, err.Error()), nil
374+
return nil, errors.Wrap(ErrorClientGraphQl, err.Error())
368375
}
369-
return nil, saber
376+
return saber, nil
370377
}
371378

372379
// QuerySubmissionDetail get very submssion detail
373-
func (c *Client) QuerySubmissionDetail(id int64) (error, *SubmissionDetailResponse) {
380+
func (c *Client) QuerySubmissionDetail(id int64) (*SubmissionDetailResponse, error) {
374381
if !c.isLogin() {
375-
return errors.Wrap(ErrorSubmissionDetail, "not login"), nil
382+
return nil, errors.Wrap(ErrorSubmissionDetail, "not login")
376383
}
377384

378385
// don't need to change http client ?
@@ -394,7 +401,7 @@ func (c *Client) QuerySubmissionDetail(id int64) (error, *SubmissionDetailRespon
394401
var responseData map[string]interface{}
395402
err := graphqlCli.Run(context.TODO(), req, &responseData)
396403
if err != nil {
397-
return errors.Wrap(ErrorSubmissionDetail, err.Error()), nil
404+
return nil, errors.Wrap(ErrorSubmissionDetail, err.Error())
398405
}
399406

400407
r := &SubmissionDetailResponse{}
@@ -403,16 +410,19 @@ func (c *Client) QuerySubmissionDetail(id int64) (error, *SubmissionDetailRespon
403410
enc := json.NewEncoder(buff)
404411
err = enc.Encode(responseData)
405412
if err != nil {
406-
return errors.Wrap(ErrorSubmissionDetail, err.Error()), nil
413+
return nil, errors.Wrap(ErrorSubmissionDetail, err.Error())
407414
}
408415
dec := json.NewDecoder(buff)
409416
err = dec.Decode(r)
410417
if err != nil {
411-
return errors.Wrap(ErrorSubmissionDetail, err.Error()), nil
418+
return nil, errors.Wrap(ErrorSubmissionDetail, err.Error())
412419
}
413420

414421
if r.SubmissionDetail == nil {
415-
return errors.Wrap(ErrorSubmissionDetail, "body SubmissionDetail is null"), nil
422+
fmt.Println("%%%%%%", buff.String())
423+
c.setLoginFlag(false)
424+
c.login(context.TODO())
425+
return nil, errors.Wrap(ErrorSubmissionDetail, "body SubmissionDetail is null")
416426
}
417-
return nil, r
427+
return r, nil
418428
}

‎collector/model/2md.go

Copy file name to clipboardExpand all lines: collector/model/2md.go
+11-1Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import (
88
"strings"
99
"text/template"
1010
"time"
11+
)
1112

13+
import (
1214
"github.com/realzhangm/leetcode_collector/collector/bufferpool"
1315
"github.com/realzhangm/leetcode_collector/collector/leetcode_cli"
1416
)
@@ -169,7 +171,7 @@ func updateTime() string {
169171
return time.Now().Format("2006年1月2日 15:04:05")
170172
}
171173

172-
func (p *PersonInfoNode) Json2Md(outputDir string) error {
174+
func (p *PersonInfoNode) json2MD1(outputDir string) error {
173175
tmpl, err := template.New("all").Funcs(template.FuncMap{
174176
"Time": updateTime,
175177
"Summary": (*p).summaryTable,
@@ -190,3 +192,11 @@ func (p *PersonInfoNode) Json2Md(outputDir string) error {
190192
}
191193
return nil
192194
}
195+
196+
func (p *PersonInfoNode) Json2Md(outputDir string) error {
197+
err := p.json2MD1(outputDir)
198+
if err != nil {
199+
return err
200+
}
201+
return nil
202+
}

‎collector/model/model.go

Copy file name to clipboardExpand all lines: collector/model/model.go
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ package model
22

33
import (
44
"fmt"
5-
"github.com/realzhangm/leetcode_collector/collector/leetcode_cli"
65
"strconv"
76
"strings"
87
"sync"
98
)
109

10+
import (
11+
"github.com/realzhangm/leetcode_collector/collector/leetcode_cli"
12+
)
13+
1114
type InfoNode struct {
1215
UserName string `json:"user_name"`
1316
NumSolved int `json:"num_solved"`

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.