Skip to content
Snippets Groups Projects
Select Git revision
  • 91a2200952e239a6997720dacce6b19dec4d51da
  • master default
2 results

main.c

Blame
  • Forked from HyukSang Kwon / 1801_OS_assignment4
    Source project has a limited visibility.
    sw.py 1.67 KiB
    import requests
    import json
    from time import sleep
    import csv
    
    
    Ajou_student = []   # 아주대학교 학생들 리스트
    pages = 3           # 받아올 페이지의 제한
    group_id = 328      # 아주대학교의 group_id 입니다.
    
    for page in range(pages):   
        url = "https://solved.ac/api/v3/ranking/in_organization?organizationId={group_id}"
        page_url = f"{url}&page={page+1}"
        cnt = requests.get(page_url)
        Tmp_Ajou_student = json.loads(cnt.content.decode("utf-8")).get("items")
        Ajou_student.extend([user.get("handle").strip() for user in Tmp_Ajou_student])
    
    
    def solved_problem(user_handle):    # 유저 아이디를 입력하면 유저가 푼 문제 목록을 return 하는 함수
        url = f"https://solved.ac/api/v3/search/problem?query=s%40{user_handle}"
        cnt = json.loads(requests.get(url).content.decode("utf-8"))
        pages = (cnt.get("count") - 1) // 50 + 1
        pid = []
        for page in range(pages):
            sleep(1)                    # API 호출 횟수를 조절하기 위한 sleep 함수
            page_url = f"{url}&page={page+1}"
            cnt = json.loads(requests.get(page_url).content.decode("utf-8"))
            problem_ = cnt.get("items")
            for p in problem_:
                pid.append(p.get("problemId"))
            print(f"[{user_handle}] {page}/{pages}")
        return pid
    
    limit = 15
    pid = {}
    for user in Ajou_student[:limit]:
        user_problem = solved_problem(user)
        for problem in user_problem:
            pid[problem] = pid.get(problem, 0) + 1  # pid에 problem이 있다면 +1하고, 없다면 1을 채워줍니다.
    
    with open(f"top{limit}_user_problem.csv", "w") as file:
        writer = csv.writer(file)
        for k, v in pid.items():
            writer.writerow([k, v])