
Riot Games에서 제공하는 다양한 데이터를 포함하는 리소스 저장소

/Users/ihyejin/Downloads/dragontail-14.13.1/14.13.1/data/ko_KR
challenges.json: 도전과제 관련 데이터
champion: 챔피언과 관련된 다양한 JSON 파일
champion.json: 각 챔피언에 대한 기본 정보
championFull.json: 각 챔피언 상세 정보
item-modifiers.json: 아이템 수정자에 대한 정보
item.json: 게임 내 아이템에 대한 정보
language.json: 게임의 언어 설정과 관련된 정보
map.json: 게임 내 맵에 대한 정보
mission-assets.json: 미션과 관련된 정보
profileicon.json: 게임 내 프로필 아이콘 정보
runesReforged.json: 룬 시스템 정보
spellbuffs.json: 스펠 버프와 관련된 정보
sticker.json: 게임 내 스티커에 대한 정보
summoner.json: 소환사와 관련된 정보
tft-arena.json: TFT(전략적 팀 전투) 아레나 정보
tft-augments.json: TFT 증강 정보
tft-champion.json: TFT 챔피언 정보
tft-hero-augments.json: TFT 영웅 증강 정보
tft-item.json: TFT 아이템 정보
tft-queues.json: TFT 대기열 정보
tft-regalia.json: TFT 휘장 정보
tft-region-portals.json: TFT 지역 포탈 정보
tft-tactician.json: TFT 전술가 정보
tft-trait.json: TFT 특성 정보
1.새로운 앱 생성
python manage.py startapp model_champion
2.settings.py
INSTALLED_APPS = [
'riot_app',
'model_champion',
]
from django.db import models
# Champion 기본 정보
class Champion(models.Model):
key = models.CharField(max_length=100)
id = models.CharField(max_length=100, primary_key=True)
name = models.CharField(max_length=100)
title = models.CharField(max_length=100)
lore = models.TextField()
blurb = models.TextField()
allytips = models.TextField()
enemytips = models.TextField()
tags = models.CharField(max_length=100)
partype = models.CharField(max_length=100)
# Champion 이미지
class ChampionImage(models.Model):
champion = models.OneToOneField(Champion, on_delete=models.CASCADE)
full = models.CharField(max_length=100)
sprite = models.CharField(max_length=100)
group = models.CharField(max_length=100)
x = models.IntegerField()
y = models.IntegerField()
W = models.IntegerField()
h = models.IntegerField()
# Champion 스킨
class ChampionSkin(models.Model):
champion = models.ForeignKey(Champion, on_delete=models.CASCADE)
id = models.CharField(max_length=100, primary_key=True)
num = models.IntegerField()
name = models.CharField(max_length=100)
chromas = models.BooleanField()
# Champion 수치 정보
class ChampionInfo(models.Model):
champion = models.OneToOneField(Champion, on_delete=models.CASCADE)
attack = models.IntegerField()
defense = models.IntegerField()
magic = models.IntegerField()
difficulty = models.IntegerField()
# Champion 스탯
class ChampionStat(models.Model):
champion = models.OneToOneField(Champion, on_delete=models.CASCADE)
hp = models.FloatField()
hpperlevel = models.FloatField()
mp = models.FloatField()
mpperlevel = models.FloatField()
movespeed = models.FloatField()
armor = models.FloatField()
armorperlevel = models.FloatField()
spellblock = models.FloatField()
spellblockperlevel = models.FloatField()
attackrange = models.FloatField()
hpregen = models.FloatField()
hpregenperlevel = models.FloatField()
mpregen = models.FloatField()
mpregenperlevel = models.FloatField()
crit = models.FloatField()
critperlevel = models.FloatField()
attackdamage = models.FloatField()
attackdamageperlevel = models.FloatField()
attackspeedperlevel = models.FloatField()
attackspeed = models.FloatField()
# Champion 스킬
class ChampionSpell(models.Model):
champion = models.ForeignKey(Champion, on_delete=models.CASCADE)
id = models.CharField(max_length=100, primary_key=True)
name = models.CharField(max_length=100)
description = models.TextField()
tooltip = models.TextField()
maxrank = models.IntegerField()
cooldown = models.TextField()
cooldownBurn = models.CharField(max_length=100)
cost = models.TextField()
costBurn = models.CharField(max_length=100)
costType = models.CharField(max_length=100)
range = models.TextField()
resource = models.CharField(max_length=100, blank=True)
# Champion 스킬 이미지
class SpellImage(models.Model):
spell = models.OneToOneField(ChampionSpell, on_delete=models.CASCADE)
full = models.CharField(max_length=100)
sprite = models.CharField(max_length=100)
group = models.CharField(max_length=100)
x = models.IntegerField()
y = models.IntegerField()
W = models.IntegerField()
h = models.IntegerField()
# Champion 패시브
class ChampionPassive(models.Model):
champion = models.OneToOneField(Champion, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
description = models.TextField()
# Champion 패시브 이미지
class PassiveImage(models.Model):
passive = models.OneToOneField(ChampionPassive, on_delete=models.CASCADE)
full = models.CharField(max_length=100)
sprite = models.CharField(max_length=100)
group = models.CharField(max_length=100)
x = models.IntegerField()
y = models.IntegerField()
W = models.IntegerField()
h = models.IntegerField()
python manage.py makemigrations model_champion
python manage.py migrate
import os
import json
from django.core.management.base import BaseCommand
from typing import Dict
from django.conf import settings
from model_champion.models import Champion, ChampionImage, ChampionInfo, ChampionPassive, ChampionSkin, ChampionSpell, ChampionStat, PassiveImage, SpellImage
def intListToStr(arr):
return ",".join(map(str, arr))
# 챔피언 데이터 데이터베이스에 저장
def putChampions(json_file_path):
with open(json_file_path, encoding='UTF-8') as f:
data: Dict = json.load(f)['data']
Champion.objects.all().delete()
for key, value in data.items():
allytips = ",".join(value['allytips'])
enemytips = ",".join(value['enemytips'])
tags = ",".join(value['tags'])
champion = Champion.objects.create(
key=value['key'],
id=value['id'],
name=value['name'],
title=value['title'],
lore=value['lore'],
blurb=value['blurb'],
allytips=allytips,
enemytips=enemytips,
tags=tags,
partype=value['partype']
)
ChampionImage.objects.create(
champion=champion,
full=value['image']['full'],
sprite=value['image']['sprite'],
group=value['image']['group'],
x=value['image']['x'],
y=value['image']['y'],
W=value['image']['w'],
h=value['image']['h'],
)
skinBulkList = [
ChampionSkin(
champion=champion,
id=skin['id'],
num=skin['num'],
name=skin['name'],
chromas=skin['chromas']
) for skin in value['skins']
]
ChampionSkin.objects.bulk_create(skinBulkList)
ChampionInfo.objects.create(
champion=champion,
attack=value['info']['attack'],
defense=value['info']['defense'],
magic=value['info']['magic'],
difficulty=value['info']['difficulty']
)
ChampionStat.objects.create(
champion=champion,
hp=value['stats']['hp'],
hpperlevel=value['stats']['hpperlevel'],
mp=value['stats']['mp'],
mpperlevel=value['stats']['mpperlevel'],
movespeed=value['stats']['movespeed'],
armor=value['stats']['armor'],
armorperlevel=value['stats']['armorperlevel'],
spellblock=value['stats']['spellblock'],
spellblockperlevel=value['stats']['spellblockperlevel'],
attackrange=value['stats']['attackrange'],
hpregen=value['stats']['hpregen'],
hpregenperlevel=value['stats']['hpregenperlevel'],
mpregen=value['stats']['mpregen'],
mpregenperlevel=value['stats']['mpregenperlevel'],
crit=value['stats']['crit'],
critperlevel=value['stats']['critperlevel'],
attackdamage=value['stats']['attackdamage'],
attackdamageperlevel=value['stats']['attackdamageperlevel'],
attackspeedperlevel=value['stats']['attackspeedperlevel'],
attackspeed=value['stats']['attackspeed'],
)
for spell in value['spells']:
championSpell = ChampionSpell.objects.create(
champion=champion,
id=spell['id'],
name=spell['name'],
description=spell['description'],
tooltip=spell.get('tooltip', ''),
maxrank=spell['maxrank'],
cooldown=intListToStr(spell['cooldown']),
cooldownBurn=spell['cooldownBurn'],
cost=intListToStr(spell['cost']),
costBurn=spell['costBurn'],
costType=spell['costType'],
range=intListToStr(spell['range']),
resource=spell.get('resource', '')
)
SpellImage.objects.create(
spell=championSpell,
full=spell['image']['full'],
sprite=spell['image']['sprite'],
group=spell['image']['group'],
x=spell['image']['x'],
y=spell['image']['y'],
W=spell['image']['w'],
h=spell['image']['h'],
)
championPassive = ChampionPassive.objects.create(
champion=champion,
name=value['passive']['name'],
description=value['passive']['description']
)
PassiveImage.objects.create(
passive=championPassive,
full=value['passive']['image']['full'],
sprite=value['passive']['image'].get('sprite', ''), # 기본 값으로 빈 문자열 설정
group=value['passive']['image']['group'],
x=value['passive']['image']['x'],
y=value['passive']['image']['y'],
W=value['passive']['image']['w'],
h=value['passive']['image']['h'],
)
return "챔피언 데이터베이스 업데이트 완료"
class Command(BaseCommand):
help = 'Load champion data into the database'
def add_arguments(self, parser):
parser.add_argument('json_file_path', type=str, help='Path to the JSON file')
def handle(self, *args, **kwargs):
json_file_path = kwargs['json_file_path']
message = putChampions(json_file_path)
self.stdout.write(self.style.SUCCESS(message))
python manage.py load_champions dragontail/14.13.1/data/ko_KR/championFull.json


