1
1
#!/usr/bin/env python
2
2
# encoding: utf-8
3
+ import re
4
+ import sys
5
+ import os
3
6
import requests
4
7
from lxml import etree
5
8
from StringIO import StringIO
6
- import re , sys , os
7
9
from ConfigParser import ConfigParser
8
10
9
11
reload (sys )
13
15
"\u002D " :'-' ,'\u003B ' :';' , '\u003D ' :'=' ,"\u003C " :'<' , "\u003E " :'>' }
14
16
BASE_URL = "https://leetcode.com"
15
17
16
- def getConfig ():
18
+ def get_config ():
17
19
config = ConfigParser ()
18
20
config .read ('config.ini' )
19
21
usr = config .get ('info' , 'user' )
@@ -28,7 +30,7 @@ def getConfig():
28
30
return usr , passwd , mode
29
31
30
32
def login ():
31
- usr , passwd , mode = getConfig ()
33
+ usr , passwd , mode = get_config ()
32
34
login_url = "https://leetcode.com/accounts/login/"
33
35
s = requests .session ()
34
36
resp = s .get (login_url )
@@ -55,12 +57,12 @@ def login():
55
57
56
58
return s , req .text
57
59
58
- def extractQuestion (html ):
60
+ def extract_question (html ):
59
61
parser = etree .HTMLParser ()
60
62
tree = etree .parse (StringIO (html .encode ('utf-8' )), parser )
61
63
trNodes = tree .findall (".//tr" )
62
- allProblems = []
63
- solvedProblems = []
64
+ all_problems = []
65
+ solved_problems = []
64
66
for ele in trNodes :
65
67
if len (ele ) != 5 :
66
68
continue
@@ -73,12 +75,12 @@ def extractQuestion(html):
73
75
ac_rate = ele [3 ].text
74
76
level = ele [4 ].text
75
77
76
- allProblems .append (Problem (status , id ,
78
+ all_problems .append (Problem (status , id ,
77
79
href , title , ac_rate , level ))
78
80
if status != "None" :
79
- solvedProblems .append (Problem (status , id ,
81
+ solved_problems .append (Problem (status , id ,
80
82
href , title , ac_rate , level ))
81
- return allProblems , solvedProblems
83
+ return all_problems , solved_problems
82
84
83
85
def getSubmissionResults (problem , session ):
84
86
link = BASE_URL + problem .href + "submissions"
@@ -137,7 +139,7 @@ def addTable2Report(problem, file, tableHTML):
137
139
138
140
139
141
140
- def getCode (session , link ):
142
+ def get_code (session , link ):
141
143
resp = session .get (link )
142
144
scriptNodes = findAllElements (resp , 'script' )
143
145
if not scriptNodes :
@@ -150,7 +152,7 @@ def getCode(session, link):
150
152
if result :
151
153
return result .group (1 ), result .group (2 )
152
154
153
- def formatCode (code , char_map ):
155
+ def format_code (code , char_map ):
154
156
code = code .replace ('\u000D \u000A ' , '\n ' )
155
157
for key in char_map :
156
158
if key in code :
@@ -166,7 +168,7 @@ def writeCode2file(lang, code, id, title, no, location):
166
168
fh .write (code )
167
169
fh .close ()
168
170
169
- def makeDir (dirName ):
171
+ def make_dir (dirName ):
170
172
if not os .path .exists (os .path .join (os .getcwd (),dirName )):
171
173
os .makedirs (os .path .join (os .getcwd (), dirName ))
172
174
@@ -188,16 +190,16 @@ def __init__(self, status, id, href, title, ac_rate, level):
188
190
def main ():
189
191
session , html = login ()
190
192
createReport ()
191
- makeDir ('solutions' )
192
- allProblems , solvedProblems = extractQuestion (html )
193
- for problem in solvedProblems :
193
+ make_dir ('solutions' )
194
+ all_problems , solved_problems = extract_question (html )
195
+ for problem in solved_problems :
194
196
codeLinks , table_nodes = getSubmissionResults (problem , session )
195
197
addTable2Report (problem , 'report.html' , getResultTable (table_nodes ))
196
198
count = 0
197
199
for link in codeLinks :
198
200
count += 1
199
- lang , code = getCode (session , BASE_URL + link )
200
- code = formatCode (code , char_map )
201
+ lang , code = get_code (session , BASE_URL + link )
202
+ code = format_code (code , char_map )
201
203
writeCode2file (lang , code , problem .id , problem .title , count , 'solutions' )
202
204
print "Done with problem " + problem .title
203
205
print
0 commit comments