Skip to content

Commit 8f53e98

Browse files
committed
update
1 parent 81879d5 commit 8f53e98

File tree

9 files changed

+110
-61
lines changed

9 files changed

+110
-61
lines changed

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

Lines 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

Lines 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

Lines 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

Lines 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

Lines 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

Lines 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)