You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
from datetime import datetime
|
|
import json
|
|
import crawers
|
|
|
|
|
|
def get_crawer(ojname: str):
|
|
if not hasattr(get_crawer, "list"):
|
|
get_crawer.list = {
|
|
"vjudge": crawers.vjudge_crawer
|
|
}
|
|
return get_crawer.list[ojname]
|
|
|
|
|
|
def load_users():
|
|
with open("users.json") as f:
|
|
users_raw = json.load(f)
|
|
return users_raw['users']
|
|
|
|
|
|
def save_users(users):
|
|
with open("result.json", "w") as f:
|
|
json.dump({"version": int(datetime.now().timestamp() * 1000), "users": users}, f)
|
|
|
|
|
|
def merge_result(results: list):
|
|
solved = {}
|
|
for result in results:
|
|
for oj in result:
|
|
if oj not in solved:
|
|
solved[oj] = set()
|
|
solved[oj] = solved[oj].union(result[oj])
|
|
ret = {}
|
|
for oj in solved:
|
|
ret[oj.lower()] = list(solved[oj])
|
|
return ret
|
|
|
|
|
|
def __main__():
|
|
users = load_users()
|
|
for user in users:
|
|
print(user['uid'], user['name'], ':')
|
|
user['result'] = merge_result([get_crawer(rec['oj'])(rec['id']) for rec in user['ids']])
|
|
save_users(users)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
__main__()
|