|
9 | 9 | "strconv"
|
10 | 10 | "strings"
|
11 | 11 | "sync"
|
| 12 | + "time" |
12 | 13 | )
|
13 | 14 |
|
14 | 15 | import (
|
@@ -157,43 +158,67 @@ func (c *Collector) submissionForOneLang(sbl []leetcode_cli.Submission) map[stri
|
157 | 158 | return langSubmissionMap
|
158 | 159 | }
|
159 | 160 |
|
160 |
| -func (c *Collector) fetchAllSubmissions() error { |
161 |
| - for slug := range c.personInfo.AcProblems { |
162 |
| - sbs, e := c.ltClit.QuerySubmissionsByQuestion(slug) |
163 |
| - if e != nil { |
164 |
| - fmt.Println("QuerySubmissionsByQuestion:", e) |
165 |
| - return e |
| 161 | +// 一个题目的所有提交 |
| 162 | +func (c *Collector) fetchOneSubmissions(slug string) error { |
| 163 | + sbs, e := c.ltClit.QuerySubmissionsByQuestion(slug) |
| 164 | + if e != nil { |
| 165 | + fmt.Println("QuerySubmissionsByQuestion:", e) |
| 166 | + return e |
| 167 | + } |
| 168 | + |
| 169 | + langSubmissionMap := c.submissionForOneLang(sbs.SubmissionList.Submissions) |
| 170 | + for _, sb := range langSubmissionMap { |
| 171 | + id, e2 := strconv.ParseInt(sb.ID, 10, 64) |
| 172 | + if e2 != nil { |
| 173 | + panic(e2) |
| 174 | + } |
| 175 | + // 这里判断是否需要更新提交 |
| 176 | + if !c.personInfo.SubmissionsNeedUpdate(slug, sb.Lang, sb.Timestamp) { |
| 177 | + continue |
166 | 178 | }
|
167 | 179 |
|
168 |
| - langSubmissionMap := c.submissionForOneLang(sbs.SubmissionList.Submissions) |
169 |
| - for _, sb := range langSubmissionMap { |
170 |
| - id, e2 := strconv.ParseInt(sb.ID, 10, 64) |
171 |
| - if e2 != nil { |
172 |
| - panic(e2) |
173 |
| - } |
174 |
| - // 这里判断是否需要更新提交 |
175 |
| - if !c.personInfo.SubmissionsNeedUpdate(slug, sb.Lang, sb.Timestamp) { |
176 |
| - continue |
| 180 | + // 获取提交的代码 |
| 181 | + if err := tryNTimes(3, func(i int) error { |
| 182 | + sbDetail, e3 := c.ltClit.QuerySubmissionDetail(id) |
| 183 | + if e3 != nil { |
| 184 | + fmt.Printf("%+v \n", sbs) |
| 185 | + fmt.Printf("%+v \n", sb) |
| 186 | + fmt.Println(id, "QuerySubmissionDetail error:", e3) |
| 187 | + time.Sleep(time.Second * time.Duration(5)) |
| 188 | + return e3 |
177 | 189 | }
|
| 190 | + titleSlug := sbDetail.SubmissionDetail.Question.TitleSlug |
| 191 | + c.personInfo.SetAcSubmissions(titleSlug, sbDetail.SubmissionDetail) |
| 192 | + return nil |
| 193 | + }); err != nil { |
| 194 | + // delete this titleSlug |
| 195 | + c.personInfo.DeleteAcSetAcSubmission(slug) |
| 196 | + return err |
| 197 | + } |
| 198 | + } |
| 199 | + return nil |
| 200 | +} |
178 | 201 |
|
179 |
| - // 获取提交的代码 |
180 |
| - if err := tryNTimes(3, func(i int) error { |
181 |
| - sbDetail, e3 := c.ltClit.QuerySubmissionDetail(id) |
182 |
| - if e3 != nil { |
183 |
| - fmt.Printf("%+v \n", sbs) |
184 |
| - fmt.Printf("%+v \n", sb) |
185 |
| - fmt.Println(id, "QuerySubmissionDetail error:", e3) |
186 |
| - // panic(e3) |
187 |
| - return e3 |
188 |
| - } |
189 |
| - titleSlug := sbDetail.SubmissionDetail.Question.TitleSlug |
190 |
| - c.personInfo.SetAcSubmissions(titleSlug, sbDetail.SubmissionDetail) |
191 |
| - return nil |
192 |
| - }); err != nil { |
193 |
| - // delete this titleSlug |
194 |
| - c.personInfo.DeleteAcSetAcSubmission(slug) |
195 |
| - return err |
| 202 | +func (c *Collector) fetchAllSubmissions() error { |
| 203 | + cnt := 0 |
| 204 | + for slug := range c.personInfo.AcProblems { |
| 205 | + cnt++ |
| 206 | + if cnt > 10 { |
| 207 | + // 限速 |
| 208 | + time.Sleep(time.Millisecond * time.Duration(100)) |
| 209 | + cnt = 0 |
| 210 | + } |
| 211 | + |
| 212 | + if err := tryNTimes(4, func(i int) error { |
| 213 | + e := c.fetchOneSubmissions(slug) |
| 214 | + if e != nil { |
| 215 | + time.Sleep(time.Duration(15) * time.Second) |
| 216 | + c.ltClit.ReLogin() |
| 217 | + return e |
196 | 218 | }
|
| 219 | + return nil |
| 220 | + }); err != nil { |
| 221 | + panic(err) |
197 | 222 | }
|
198 | 223 | }
|
199 | 224 | return nil
|
@@ -283,14 +308,12 @@ func (c *Collector) LoadInfo() error {
|
283 | 308 |
|
284 | 309 | func (c *Collector) FetchFromLeetCode() error {
|
285 | 310 | // 所有的AC
|
286 |
| - err := c.fetchAllProblems() |
287 |
| - if err != nil { |
| 311 | + if err := c.fetchAllProblems(); err != nil { |
288 | 312 | return err
|
289 | 313 | }
|
290 | 314 |
|
291 | 315 | // 所有的AC的提交
|
292 |
| - err = c.fetchAllSubmissions() |
293 |
| - if err != nil { |
| 316 | + if err := c.fetchAllSubmissions(); err != nil { |
294 | 317 | return c.dumpInfo()
|
295 | 318 | }
|
296 | 319 | return c.dumpInfo()
|
|
0 commit comments