22import json
33import requests
44import getpass
5+ import configargparse
56from progress .bar import ChargingBar
67
78
@@ -105,6 +106,7 @@ class Crawler:
105106 def __init__ (self ):
106107 self .session = requests .Session ()
107108 self .total_submissions = 0
109+ self .options = {}
108110
109111 def login (self , username , password ):
110112 resp = self .session .get (self .login_url , auth = (username , password ))
@@ -113,9 +115,19 @@ def login(self, username, password):
113115 self .get_number_of_submissions ()
114116 return self .total_submissions != 0
115117
118+ def parse_script (self ):
119+ p = configargparse .ArgParser (default_config_files = ['./user.yaml' ])
120+ p .add ('-c' , '--config' , is_config_file = True , help = 'config file path' )
121+ p .add ('-l' , '--limit' , help = 'limit to no. of solutions to be crawled' )
122+ p .add ('-o' , '--offset' , help = 'crawl solutions starting from this number' )
123+ p .add ('-u' , '--username' , help = 'hackerrank account username' )
124+ p .add ('-p' , '--password' , help = 'hackerrank account password' )
125+
126+ self .options = p .parse_args ()
127+
116128 def authenticate (self ):
117- username = input ('Hackerrank Username: ' )
118- password = getpass .getpass ('Hackerrank Password: ' )
129+ username = self . options . username or input ('Hackerrank Username: ' )
130+ password = self . options . password or getpass .getpass ('Hackerrank Password: ' )
119131 return self .login (username , password )
120132
121133 def get_number_of_submissions (self ):
@@ -223,15 +235,16 @@ def get_submissions(self, submissions):
223235 print ('All Solutions Crawled' )
224236
225237def main ():
226- offset = 0
227- limit = 10 # you should change this
228238
229239 crawler = Crawler ()
230-
231- while (not crawler .authenticate ()):
232- print ('Auth was unsuccessful' )
233-
234- limit = input ('Enter limit needed to crawl: ' )
240+ crawler .parse_script ()
241+ if not crawler .authenticate ():
242+ print ('Auth was unsuccessful. Exiting the program' )
243+ exit (1 )
244+
245+ limit = crawler .options .limit or crawler .total_submissions
246+ offset = crawler .options .offset or 0
247+ print ('Start crawling {} solutions starting from {}' .format (limit , offset ))
235248 all_submissions_url = crawler .get_all_submissions_url (offset , limit )
236249
237250 resp = crawler .session .get (all_submissions_url , headers = crawler .headers )
0 commit comments