Skip to content

Commit 4285460

Browse files
committed
Creating an automatic updater part.1
1 parent 0e1e8e2 commit 4285460

File tree

4 files changed

+462
-57
lines changed

4 files changed

+462
-57
lines changed

functions.py

+68-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from datetime import datetime
22
from datetime import timezone
3+
import requests
4+
import time
5+
import re
36

47
def ordinal(n: int) -> str:
58
"""
@@ -13,4 +16,68 @@ def translate_date(a_date):
1316

1417
dayOrdinal = ordinal(date1.day)
1518

16-
return date1.strftime(f'%A, {dayOrdinal.strip()} %B %Y')
19+
return date1.strftime(f'%A, {dayOrdinal.strip()} %B %Y')
20+
21+
def make_api_call(url):
22+
try:
23+
24+
# Issue a Request
25+
response = requests.get(url)
26+
27+
# Fetch a Response
28+
return response.json()
29+
30+
except:
31+
32+
return None
33+
34+
def get_pages(User):
35+
36+
codewars_user = "https://www.codewars.com/api/v1/users/{}/code-challenges/completed?page=0".format(User)
37+
38+
response_json = make_api_call(codewars_user)
39+
40+
# Return Number of Completed Challenge Pages
41+
return int(response_json['totalPages'])
42+
43+
def get_user_info(username,platform):
44+
challenge_data = {}
45+
user_data = {}
46+
47+
match platform:
48+
49+
case "Codewars":
50+
51+
Pages = get_pages(User=username)
52+
# Completed = response_json['totalItems']
53+
54+
for x in range(Pages):
55+
current_page = "https://www.codewars.com/api/v1/users/{}/code-challenges/completed?page={}".format(username,x)
56+
57+
response_json = make_api_call(current_page)
58+
59+
for challenge in response_json['data']:
60+
challenge_data[str(challenge['id']).strip()] = {'Name': str(challenge['name']).strip(), 'Completed at': translate_date(challenge['completedAt'].strip()), 'Additional Info': {}}
61+
62+
for each in challenge_data:
63+
64+
challenge_info = "https://www.codewars.com/api/v1/code-challenges/{}".format(each)
65+
66+
time.sleep(2)
67+
68+
parsed_info = make_api_call(challenge_info)
69+
70+
challenge_data[each]['Additional Info'] = {'url': str(parsed_info['url'] + '/python').strip(), 'rank': str(re.sub(' ','-',parsed_info['rank']['name']).strip()), 'tags' : parsed_info['tags']}
71+
72+
user_data[username] = { 'Total Completed' : int(response_json['totalItems']), 'Statistics' : { "1-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "1-kyu"]),
73+
"2-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "2-kyu"]),
74+
"3-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "3-kyu"]),
75+
"4-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "4-kyu"]),
76+
"5-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "5-kyu"]),
77+
"6-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "6-kyu"]),
78+
"7-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "7-kyu"]),
79+
"8-kyu" : len([k for k,v in challenge_data.items() if v['Additional Info']['rank'] == "8-kyu"])
80+
},'Challenges' : challenge_data }
81+
82+
return user_data
83+

0 commit comments

Comments
 (0)