99
1010class Crawler :
1111 base_url = 'https://www.hackerrank.com/'
12+ user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0'
1213 login_url = base_url + 'auth/login'
1314 submissions_url = base_url + 'rest/contests/master/submissions/?offset={}&limit={}'
1415 challenge_url = base_url + 'rest/contests/master/challenges/{}/submissions/{}'
@@ -40,11 +41,13 @@ def __init__(self):
4041 self .options = {}
4142
4243 def login (self , username , password ):
43- resp = self .session .get (self .login_url , auth = (username , password ))
44- self .cookies = self .session .cookies .get_dict ()
45- self .headers = resp .request .headers
46- self .get_number_of_submissions ()
47- return self .total_submissions != 0
44+ resp = self .session .post (self .login_url , auth = (username , password ), headers = {'user-agent' : self .user_agent })
45+ data = resp .json ()
46+ if data ['status' ]:
47+ self .cookies = self .session .cookies .get_dict ()
48+ self .headers = resp .request .headers
49+ self .get_number_of_submissions ()
50+ return data ['status' ]
4851
4952 def parse_script (self ):
5053 p = configargparse .ArgParser (default_config_files = ['./user.yaml' ])
@@ -128,7 +131,7 @@ def update_readmes(self, domain_name, subdomain_name, domain_url, subdomain_url,
128131 subdomain_readme_path , domain_readme_path , root_readme_path )
129132
130133 problem_url = self .problem_url .format (challenge_slug )
131-
134+
132135 file_path_relative_to_subdomain = './' + file_name_with_extension
133136 file_path_relative_to_domain = '{}/{}' .format (subdomain_name , file_name_with_extension )
134137 file_path_relative_to_root = '{}/{}/{}' .format (domain_name , subdomain_name , file_name_with_extension )
@@ -173,7 +176,7 @@ def get_submissions(self, submissions):
173176 data = resp .json ()['model' ]
174177 code = data ['code' ]
175178 track = data ['track' ]
176-
179+
177180 # Default should be empty
178181 file_extension = ''
179182 file_name = challenge_slug
@@ -189,7 +192,7 @@ def get_submissions(self, submissions):
189192 subdomain_name = track ['name' ].strip ().replace (' ' , '' )
190193 domain_slug = track ['track_slug' ]
191194 subdomain_slug = track ['slug' ]
192-
195+
193196 domain_url = self .domain_url .format (domain_slug )
194197 subdomain_url = self .subdomain_url .format (domain_slug , subdomain_slug )
195198
@@ -206,7 +209,7 @@ def get_submissions(self, submissions):
206209 if self .make_language_folder :
207210 file_path = os .path .join (self .base_folder_name , domain_name , subdomain_name , language , file_name_with_extension )
208211 self .store_submission (file_path , code )
209-
212+
210213 self .update_readmes (domain_name , subdomain_name , domain_url , subdomain_url ,
211214 challenge_name , challenge_slug , language , file_name_with_extension )
212215
0 commit comments