KartRider.py

시작하기 전에

이 라이브러리는 카트라이더의 OpenAPI를 파이썬으로 래핑한 라이브러리입니다. 사용하기 위해선 KartRider OpenAPI 의 API Key가 필요합니다. OpenAPI docs 도 참고해 보세요.

라이브러리의 모든 날짜는 UTC 기준입니다.

파라미터로 입력되는 날짜(startTime, endTime 등)의 포맷은 〈%Y-%m-%d %H:%M:%S〉 입니다.
예시 : 2020-01-01 13:03:33

설치하기

> pip install KartRider
import KartRider
KartRider.download_meta(DOWNLOAD_DIR)
# OR downmeta_ifnotexist(DOWNLOAD_DIR)
KartRider.set_metadatapath(DOWNLOAD_DIR)

위와 같이 메타데이터를 다운로드 받고 경로를 설정합니다.

메타데이터는 업데이트가 필요합니다. donwload_meta 함수를 며칠 주기로 호출하세요.

api = KartRider.Api(API_KEY)

API KEY는 공개적으로 저장하지 마세요.

튜토리얼

특정 아이디의 최근 10 매치 불러오기

import KartRider

KartRider.set_metadatapath(META_PATH)
api = KartRider.Api(API_KEY)

nickname = '닉네임'

matches = api.user(nickname).getMatches(limit=10)

games = matches
for gametype, match in games.items():

    for game in match:
        print('게임 : {}, 캐릭터 : {}, 카트 : {}, 맵 : {}, 순위 : {}, 날짜 : {}'
            .format(gametype,game.player.character, game.player.kart,
                    game.track, game.player.matchrank, game.starttime))

가장 최근 매치의 상세 정보 불러오기

import KartRider

KartRider.set_metadatapath(META_PATH)
api = KartRider.Api(API_KEY)

allmatches = api.getAllMatches(limit=1)

game = list(allmatches.mergevalues())[0]

print('게임 : {}, 채널 이름 : {}, 트랙 이름 : {}'
    .format(game.matchtype, game.channelname, game.track))

if game.isteamgame:
    i = 0
    for players in game.teams:
        print('{}팀 :'.format(i))
        for player in players:
            print('닉네임 : {}, 캐릭터 : {}, 카트 : {}, 순위 : {}, 리타이어 여부 : {}'
                .format(player.charactername, player.character, player.kart,
                        player.matchrank, player.matchretired))
        i += 1

else:
    for player in game.players:
            print('닉네임 : {}, 캐릭터 : {}, 카트 : {}, 순위 : {}, 리타이어 여부 : {}'
                .format(player.charactername, player.character, player.kart,
                        player.matchrank, player.matchretired))

레퍼런스

_images/uml.png

라이브러리의 uml 입니다.

Api 클래스

class KartRider.apiwrapper.Api(accesstoken)

기반 클래스: object

카트라이더 OpenAPI Wrapper 클래스입니다.

매개변수

accesstoken (str) – 사용자의 API KEY 문자열

getAllMatches(start_date='', end_date='', offset=0, limit=10, match_types='')

모든 유저의 매치 데이터를 받아옵니다.

매개변수
  • start_date (Union[datetime, str]) – 조회 시작 날짜(UTC)

  • end_date (Union[datetime, str]) – 조회 끝 날짜(UTC)

  • offset (int) – 조회 오프셋

  • limit (int) – 조회 수 (최대 500건)

  • match_types (Union[List[str], str]) – 매치 타입 이름이나 ID (리스트 또는 단일 문자열)

예외
반환값

모든 매치 정보 클래스

반환 형식

AllMatches

getUserMatches(id, start_date='', end_date='', offset=0, limit=10, match_types='')

유저의 매치 데이터를 받아옵니다. Api.user(…).getMatches(…) 로도 사용할 수도 있습니다.

매개변수
  • id (Union[str, User]) – 유저의 accessid 혹은 User 클래스

  • start_date (Union[datetime, str]) – 조회 시작 날짜(UTC)

  • end_date (Union[datetime, str]) – 조회 끝 날짜(UTC)

  • offset (int) – 조회 오프셋

  • limit (int) – 조회 수 (최대 500건)

  • match_types (Union[List[str], str]) – 매치 타입 이름이나 ID (리스트 또는 단일 문자열)

예외
반환 형식

MatchResponse

user(nickname=None, accessid=None)

유저의 닉네임과 ID 클래스를 생성합니다.

사용법:

>>> api = KartRider.Api(API_KEY)
>>> api.user(nickname) # nickname 으로 User 클래스 생성
>>> api.user(accessid) # accessid 로 User 클래스 생성
>>> api.user(nickname, accessid)
# nickname 과 accessid 일치 여부 확인 후 User 클래스 생성
매개변수
  • nickname (Optional[str]) – 검색할 닉네임

  • accessid (Optional[str]) – 검색할 accessid

예외
  • ValueError – nickname 과 accessid 모두 입력하지 않음

  • ValueError – nickname 과 ID가 일치하지 않음

  • InvalidToken – 잘못된 Token이나 파라미터 입력

  • ForbiddenToken – 허용되지 않은 AccessToken 사용

  • NotFound – 존재하지 않는 리소스

  • TooManyRequest – AccessToken의 요청 허용량 초과

  • UnknownStatusCode – 알 수 없는 오류

반환 형식

User

exception KartRider.apiwrapper.ForbiddenToken

기반 클래스: Exception

허용되지 않은 API key를 사용했을때(응답코드 403) 발생하는 오류입니다.

exception KartRider.apiwrapper.InvalidToken

기반 클래스: Exception

잘못된 파라미터 입력(응답코드 400)을 할때 발생하는 오류입니다.

exception KartRider.apiwrapper.NotFound

기반 클래스: Exception

리소스가 존재하지 않을때(응답코드 404) 발생하는 오류입니다.

exception KartRider.apiwrapper.TooManyRequest

기반 클래스: Exception

API Key 의 요청 허용량을 초과했을때(응답코드 429) 발생하는 오류입니다.

exception KartRider.apiwrapper.UnknownStatusCode

기반 클래스: Exception

OpenAPI나 모듈의 버그로 인하여 발생하는 오류입니다.

매치 데이터

class KartRider.match.AllMatches(api, **kwargs)

기반 클래스: KartRider.basedata._BaseData, KartRider.basedata.MergeAbleDict

전체 매치의 데이터를 담고 있는 클래스입니다.

매치 타입 ID 또는 이름(메타데이터 경로가 지정됐을때)을 키로, MatchDetail 의 리스트를 값으로 가지는 dict와 같습니다.

사용법:
>>> mr = api.user('닉네임').getMatches()
>>> mi = mr['아이템 팀전']
>>> mi[0].character
노네임
class KartRider.match.MatchDetail(api, matchid)

기반 클래스: KartRider.basedata._BaseData

매치의 상세 정보를 담고 있는 클래스입니다.

사용법:
>>> all = api.getAllMatches()
>>> teammatch = all['스피드 팀전']
>>> detail = teammatch[0]
>>> detail.matchType
스피드 팀전

참고

matchTypeId를 제외한 나머지 속성들은 호출할때 최초 1번 api를 사용합니다.

isTeamGame 이 True 일시 teams를, false 일시 players 를 멤버로 갖습니다.

channelname

채널 명(str)

endtime

게임 종료 시간(datetime)

gamespeed

게임 스피드 모드(int)

isteamgame

팀 게임 여부(bool)

matchid

매치 ID(str)

matchresult

매치 결과(str)

property matchtype

매치 종류 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

matchtypeid

매치 종류 ID(str)

players

참여 플레이어 정보 (list(Player))

playtime

게임 진행 시간(int)

starttime

게임 시작 시간(datetime)

teams

팀 정보 (list(KartRider.match.Team))

property track

트랙 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

trackid

트랙 ID(str)

class KartRider.match.MatchInfo(api, **kwargs)

기반 클래스: KartRider.basedata._BaseData

매치 정보를 담고 있는 클래스입니다.

사용법:
>>> mr = api.user('닉네임').getMatches()
>>> mi = mr['아이템 팀전'][0] # 검색된 매치 중 아이템 팀전의 0번째 매치 정보
>>> mi.character
황금망토 배찌
accountno

계정 고유 식별자(str)

channelname

채널 이름(str)

property character

캐릭터 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

characterid

캐릭터 ID(str)

detail

매치 상세 정보 (MatchDetail)

endtime

게임 종료 시간(UTC)(datetime)

property matchtype

매치 종류 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

matchtypeid

매치 종류 ID(str)

player

참여 유저 정보 (Player)

playercount

참여 유저 수(int)

starttime

게임 시작 시간(UTC)(datetime)

teamid

팀 ID(str)

property track

트랙 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

trackid

트랙 ID(str)

class KartRider.match.MatchResponse(api, nickname, matcheslist)

기반 클래스: KartRider.basedata._BaseData, KartRider.basedata.MergeAbleDict

매치 응답 정보를 담고 있는 클래스입니다.

매치 타입 ID 또는 이름(메타데이터 경로가 지정됐을때)을 키로, MatchInfo 의 리스트를 값으로 가지는 dict와 같습니다.

사용법:
>>> mr = api.user('닉네임').getMatches()
>>> mr['아이템 팀전'][0].playerCount # 검색된 매치 중 아이템 팀전의 0번째 매치 정보의 플레이어 카운트
6
nickname

매치 정보를 호출한 유저의 닉네임

class KartRider.match.Player(api, **kwargs)

기반 클래스: KartRider.basedata._BaseData

매치 플레이어의 정보를 담고 있는 클래스입니다.

사용법:
>>> all = api.getAllMatches()
>>> teamgame = all['스피드 팀전']
>>> detail = teamgame[0]
>>> player = detail.teams[0][1]
>>> player.kart
루루 X
accountno

유저 ID(str)

property character

캐릭터 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

characterid

캐릭터 ID(str)

charactername

유저 닉네임(str)

flyingPetid

플라잉펫 ID(str)

property flyingpet

플라잉펫 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

property kart

카트 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

kartid

카트 ID(str)

license

구 라이선스(str)

matchrank

순위, 리타이어는 -1

matchretired

리타이어 여부

matchtime

매치 진행 시간(int)

matchwin

매치 승리 여부

partsengine

카트바디의 엔진 파츠 (9 엔진 이하)(str)

partshandle

카트바디의 핸들 파츠 (9 엔진 이하)(str)

partskit

카트바디의 킷 파츠 (9 엔진 이하)(str)

partswheel

카트바디의 휠 파츠 (9 엔진 이하)(str)

property pet

펫 이름

예외

FileNotFoundError – 메타데이터 경로가 설정되지 않았을때

반환 형식

str

petid

펫 ID(str)

rankinggrade2

리뉴얼 라이선스(str)

class KartRider.match.Team(api, teamid, players)

기반 클래스: typing.List, list

Player 의 List입니다.

teamid

팀 ID(str)

class KartRider.basedata.MergeAbleDict(*args, **kwargs)

기반 클래스: dict, typing.Mapping

mergevalues()

dict의 리스트 밸류들을 순회하는 제너레이터입니다.

게임타입을 key로, 게임 정보의 리스트를 value 로 가지는 dict에서 게임타입을 무시하고 게임 정보의 리스트를 합쳐 순회합니다.

Yield

KartRider.match.MatchDetail 또는 KartRider.match.MatchInfo

반환 형식

Iterator[T]

유저 데이터

class KartRider.user.User(api=None, name=None, accessid=None)

기반 클래스: KartRider.basedata._BaseData

사용자 정보 클래스입니다.

>>> User(api, name)
# 닉네임과 api로 User 클래스를 만듭니다.
>>> User(api, accessid)
# Accessid로 User 클래스를 만듭니다.
>>> User(name, accessid)
# 유효성 검사를 하지 않습니다.
name과 accessid가 확실하게 일치할때만 사용하세요.
아니라면 대신 Api.user(nickname) 혹은 Api.user(accessid)를 사용하세요.

참고

api가 None 이고 name, accessid 중 하나만 입력했다면 나머지 하나를 호출할때 ValueError가 던져집니다. api가 None 이 아니라면 나머지 하나를 호출할때 api를 사용합니다.

예외

ValueError – name 과 accessid 모두 입력하지 않음

매개변수
  • api (KartRider.apiwrapper.Api) – Api 클래스

  • name (Optional[str]) – 카트라이더 닉네임 문자열

  • accessid (Optional[str]) – 카트라이더 내부 유저 id 문자열(계정 id가 아님)

property accessid

플레이어 고유 ID

예외

ValueError – api가 None인데 호출함

반환 형식

str

getMatches(start_date='', end_date='', offset=0, limit=10, match_types='')

유저의 매치 데이터를 받아옵니다.

매개변수
  • start_date (Union[datetime, str]) – 조회 시작 날짜(UTC)

  • end_date (Union[datetime, str]) – 조회 끝 날짜(UTC)

  • offset (int) – 조회 오프셋

  • limit (int) – 조회 수 (최대 500건)

  • match_types (Union[List[str], str]) – 매치 타입 이름이나 ID (리스트 또는 단일 문자열)

예외
반환 형식

MatchResponse

property name

플레이어 닉네임

예외

ValueError – api가 None인데 호출함

반환 형식

str

메타 데이터

KartRider.metadata.download_meta(file_dir)

메타데이터를 다운로드 합니다.

매개변수

file_dir (str) – 메타데이터가 들어갈 폳더 경로

KartRider.metadata.downmeta_ifnotexist(file_dir)

메타데이터 폴더가 없으면 메타데이터를 다운로드 합니다.

매개변수

file_dir (str) – 메타데이터가 들어가거나 있는 폴더

반환값

다운로드 했으면 True, 하지 않았으면 False 를 반환합니다.

반환 형식

bool

KartRider.metadata.getcharacterid(name)

캐릭터 이름을 받아 ID를 반환합니다.

매개변수

name (str) – 캐릭터 이름

반환값

캐릭터 ID

반환 형식

str

KartRider.metadata.getcharactername(id)

캐릭터 ID를 받아 이름을 반환합니다.

매개변수

id (str) – 캐릭터 ID

반환값

캐릭터 이름

반환 형식

str

KartRider.metadata.getcharactersdict()

캐릭터 id를 키로, 이름을 값으로 하는 딕셔너리를 가져옵니다.

반환 형식

dict

KartRider.metadata.getflyingpetid(name)

플라잉펫 이름을 받아 ID를 반환합니다.

매개변수

name (str) – 플라잉펫 이름

반환값

플라잉펫 ID

반환 형식

str

KartRider.metadata.getflyingpetname(id)

플라잉펫 ID를 받아 이름을 반환합니다.

매개변수

id (str) – 플라잉펫 ID

반환값

플라잉펫 이름

반환 형식

str

KartRider.metadata.getflyingpetsdict()

플라잉펫 id를 키로, 이름을 값으로 하는 딕셔너리를 가져옵니다.

반환 형식

dict

KartRider.metadata.getgametypeid(name)

게임 타입 이름을 받아 ID를 반환합니다.

매개변수

name (str) – 게임 타입 이름

반환값

게임 타입 ID

반환 형식

str

KartRider.metadata.getgametypename(id)

게임 타입 ID를 받아 이름을 반환합니다.

매개변수

id (str) – 게임 타입 ID

반환값

게임 타입 이름

반환 형식

str

KartRider.metadata.getgametypesdict()

게임 유형 id를 키로, 이름을 값으로 하는 딕셔너리를 가져옵니다.

반환 형식

dict

KartRider.metadata.getimagepath(name, typename)

메타데이터 이미지의 경로를 가져옵니다.

매개변수
  • name (str) – 가져올 메타데이터의 이름 또는 Id

  • typename (str) – 가져올 메타데이터 종류(kart, character, track)

반환값

메타데이터의 이미지 경로

반환 형식

str

KartRider.metadata.getkartid(name)

카트 이름을 받아 ID를 반환합니다.

매개변수

name (str) – 카트 이름

반환값

카트 ID

반환 형식

str

KartRider.metadata.getkartname(id)

카트 ID를 받아 이름을 반환합니다.

매개변수

id (str) – 카트 ID

반환값

카트 이름

반환 형식

str

KartRider.metadata.getkartsdict()

카트 id를 키로, 이름을 값으로 하는 딕셔너리를 가져옵니다.

반환 형식

dict

KartRider.metadata.getpetid(name)

펫 이름을 받아 ID를 반환합니다.

매개변수

name (str) – 펫 이름

반환값

펫 ID

반환 형식

str

KartRider.metadata.getpetname(id)

펫 ID를 받아 이름을 반환합니다.

매개변수

id (str) – 펫 ID

반환값

펫 이름

반환 형식

str

KartRider.metadata.getpetsdict()

펫 id를 키로, 이름을 값으로 하는 딕셔너리를 가져옵니다.

반환 형식

dict

KartRider.metadata.gettrackid(name)

트랙 이름을 받아 ID를 반환합니다.

매개변수

name (str) – 트랙 이름

반환값

트랙 ID

반환 형식

str

KartRider.metadata.gettrackname(id)

트랙 ID를 받아 이름을 반환합니다.

매개변수

id (str) – 트랙 ID

반환값

트랙 이름

반환 형식

str

KartRider.metadata.gettracksdict()

트랙 id를 키로, 이름을 값으로 하는 딕셔너리를 가져옵니다.

반환 형식

dict

KartRider.metadata.set_metadatapath(path)

메타데이터의 경로를 설정합니다.

메타데이터 경로를 설정하지 않으면 여러 정보(카트, 트랙이름, 펫이름 등)의 실제 이름 확인이 불가능합니다.

매개변수

path (str) – 메타데이터 폴더 경로 문자열

예외

FileNotFoundError – 폴더가 존재하지 않을때