diff --git a/hsc/__init__.py b/hsc/__init__.py index 287696aa..59728e39 100644 --- a/hsc/__init__.py +++ b/hsc/__init__.py @@ -1 +1 @@ -from .crawler import Crawler +from .crawler import Crawler \ No newline at end of file diff --git a/hsc/__main__.py b/hsc/__main__.py new file mode 100644 index 00000000..cb023657 --- /dev/null +++ b/hsc/__main__.py @@ -0,0 +1,4 @@ +from hsc.crawler import main + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/hsc/crawler.py b/hsc/crawler.py index a07f6f6d..369fb7bd 100755 --- a/hsc/crawler.py +++ b/hsc/crawler.py @@ -9,6 +9,7 @@ class Crawler: base_url = 'https://www.hackerrank.com/' + user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0' login_url = base_url + 'auth/login' submissions_url = base_url + 'rest/contests/master/submissions/?offset={}&limit={}' challenge_url = base_url + 'rest/contests/master/challenges/{}/submissions/{}' @@ -40,11 +41,13 @@ def __init__(self): self.options = {} def login(self, username, password): - resp = self.session.get(self.login_url, auth=(username, password)) - self.cookies = self.session.cookies.get_dict() - self.headers = resp.request.headers - self.get_number_of_submissions() - return self.total_submissions != 0 + resp = self.session.post(self.login_url, auth=(username, password), headers={'user-agent': self.user_agent}) + data = resp.json() + if data['status']: + self.cookies = self.session.cookies.get_dict() + self.headers = resp.request.headers + self.get_number_of_submissions() + return data['status'] def parse_script(self): p = configargparse.ArgParser(default_config_files=['./user.yaml']) @@ -128,7 +131,7 @@ def update_readmes(self, domain_name, subdomain_name, domain_url, subdomain_url, subdomain_readme_path, domain_readme_path, root_readme_path) problem_url = self.problem_url.format(challenge_slug) - + file_path_relative_to_subdomain = './' + file_name_with_extension file_path_relative_to_domain = '{}/{}'.format(subdomain_name, file_name_with_extension) file_path_relative_to_root = '{}/{}/{}'.format(domain_name, subdomain_name, file_name_with_extension) @@ -173,7 +176,7 @@ def get_submissions(self, submissions): data = resp.json()['model'] code = data['code'] track = data['track'] - + # Default should be empty file_extension = '' file_name = challenge_slug @@ -189,7 +192,7 @@ def get_submissions(self, submissions): subdomain_name = track['name'].strip().replace(' ', '') domain_slug = track['track_slug'] subdomain_slug = track['slug'] - + domain_url = self.domain_url.format(domain_slug) subdomain_url = self.subdomain_url.format(domain_slug, subdomain_slug) @@ -206,7 +209,7 @@ def get_submissions(self, submissions): if self.make_language_folder: file_path = os.path.join(self.base_folder_name, domain_name, subdomain_name, language, file_name_with_extension) self.store_submission(file_path, code) - + self.update_readmes(domain_name, subdomain_name, domain_url, subdomain_url, challenge_name, challenge_slug, language, file_name_with_extension) diff --git a/setup.py b/setup.py index c144e9a4..08834d4c 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name='hsc', - version='1.2.1', + version='1.2.2', author='Nullifiers', author_email='nullifiersorg@gmail.com', description='Hackerrank Solution Crawler', @@ -21,7 +21,7 @@ ], entry_points={ 'console_scripts': [ - 'hsc=hsc.crawler:main', + 'hsc=hsc.__main__:main', ], }, install_requires=['progress', 'requests', 'configargparse']