codeforces api 사용해보기

roon2020·2021년 2월 2일
0
post-thumbnail

codeforces에서 제공하는 api를 사용해서 유저가 어떤 문제를 얼마나 풀었는지 간단히 살펴보았습니다.

before you know

how to install requests module
requests 모듈 설명
REST api

python requests module

python requests 모듈을 사용하면 http 요청을 쉽게 할 수 있습니다.

codeforces api 설명은 codeforces 사이트의 api 탭에서 확인할 수 있습니다.
rest 형식으로 설계되어 있습니다.
코드포스 사이트에 나와있는 api에 대한 간단한 소개입니다.

  1. With Codeforces API you can get access to some of our data in machine-readable JSON format.
  2. To access the data you just send a HTTP-request to address https://codeforces.com/api/{methodName}
  3. only public data will be accessable via API

Script

아래 파이썬 스크립트에 handle을 넣으면 원하는 handle이 풀은 문제 정보를 얻을 수 있습니다.
총 몇 문제를 풀었는지 보여줍니다.
문제 난이도별로 몇 문제를 풀었는지를 보여줍니다.
어떤 언어로 몇 문제씩 풀었는지 보여줍니다.
레이팅이 없는 문제는 스킵했습니다.


import requests

#reference : https://codeforces.com/apiHelp/methods#user.status
URL='https://codeforces.com/api/'
method='user.status'
payload={'handle':'tourist'}        #give user's handle as payload
URI=URL+method
r=requests.get(URI,payload)
print(r.status_code)
response=r.json()

res=response['result']
solved=[]

for r in res:
    if r['verdict']=='OK':
        #print(r['problem'])
        if r['problem'].get('rating') is None:
            print("not rated problem : ",r['problem'])
            continue

        solved.append([r['problem']['index'],r['problem']['name'],r['problem']['rating'],r['programmingLanguage']])


#def rating(s):
#    return s[2]

#solved.sort(key=rating)

solved_per_rating={}
solved_per_language={}
solved_problem={}
count=0

for s in solved:
    if solved_problem.get(s[1]) is not None:
        continue
    count+=1
    if solved_per_rating.get(s[2]) is None:
        solved_per_rating[s[2]]=1
    else:
        solved_per_rating[s[2]]+=1

    if solved_per_language.get(s[3]) is None:
        solved_per_language[s[3]]=1
    else:
        solved_per_language[s[3]]+=1

print("solved problem count : ",count)
print("solved per problem rating : ",solved_per_rating)
print("solved per language : ",solved_per_language)

이런 식으로 보여줍니다. 스크립트를 수정해서 다른 원하는 정보를 얻을 수도 있겠습니다.

profile
keep in positive mindset. I've got this.

0개의 댓글