forked from itsjwala/hackerrank-scrapper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
hr_scrapper.py
74 lines (59 loc) · 2.42 KB
/
hr_scrapper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import os
from util import get_file_extension
from urls_service import UrlService
from models import get_code_result_model
from constants import BASE_DIR
class HR_Scrapper:
PREFIX = "__"
urlService = UrlService.instance()
def __init__(self) -> None:
return
def get_track(self, track) -> None:
tracks = self.urlService.get_track_request(track)
models = tracks.json()['models']
for i in models:
chal_slug = i.get('slug')
sub_domain = i.get('track').get('slug')
if chal_slug is None:
raise Exception("Chal_slug:"+str(chal_slug))
sub_domain_string = "Domain: "+sub_domain
print(track+ " "+sub_domain_string + chal_slug.rjust(70 - len(sub_domain_string)))
sub_id = self.get_submissions(chal_slug)
code = False
if sub_id:
result= self.get_code(chal_slug, sub_id)
code = result['code']
lang = result['language']
if code:
ext = get_file_extension(track, lang)
self.create_code_file(track, sub_domain, chal_slug, code, ext)
def create_code_file(self, track, sub_domain, filename, code, ext ) -> None:
dir = os.path.join(BASE_DIR,self.PREFIX+track,sub_domain)
file_path = os.path.join(dir,filename+ext)
if not os.path.exists(dir): #os.path.isdir(dir):
os.makedirs(dir)
if not os.path.isfile(file_path):
print(code, file=open(file_path, 'w'))
else:
print(code, file=open(file_path, 'w'))
def get_submissions(self, chal_slug) -> None:
submissions = self.urlService.get_submissions_request(chal_slug)
if submissions is None:
raise Exception("Submissions: "+str(submissions))
models = submissions.json()['models']
if len(models) > 0:
sub_id = models[0]['id']
return sub_id
else:
return False
def get_code(self, chal_slug, sub_id) -> get_code_result_model:
code_res = self.urlService.get_particular_submission(chal_slug, sub_id)
if code_res is None:
raise Exception("Code_res: "+code_res)
model = code_res.json()['model']
code = model['code']
language = model['language']
result = dict()
result['code'] = code
result['language'] = language
return result