코드 최적화

자훈·2023년 9월 5일
0

개인프로젝트

목록 보기
4/10
import requests
import sqlite3

# 라이엇 API 키 설정 (개발자 포털에서 발급받은 키를 사용해야 합니다)
api_key = 'RGAPI-b219ef65-e867-46dc-9520-f7d8a5c5e7d6'

# 소환사명 입력 받기
summoner_name = input("전적을 검색할 소환사 이름을 입력하세요: ")

# SQLite 데이터베이스에 연결
conn = sqlite3.connect("lol.db")
cursor = conn.cursor() #커서 생성 

# 'summoners' 테이블 생성 (이미 존재한다면 생성하지 않습니다)
cursor.execute('''
    CREATE TABLE IF NOT EXISTS summoners (
        id TEXT PRIMARY KEY,
        puuid TEXT,
        name TEXT,
        profile_icon_id INTEGER,
        summoner_level INTEGER,
        queue_type TEXT,
        tier TEXT,
        rank TEXT,
        league_points INTEGER,
        wins INTEGER,
        losses INTEGER
    )
''')

# 라이엇 API를 통해 소환사 정보 가져오기
def get_summoner_info(summoner_name):
    base_url = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/'
    url = f'{base_url}{summoner_name}?api_key={api_key}'
    
    response = requests.get(url)
    
    if response.status_code == 200:
        summoner_info = response.json()
        return summoner_info
    else:
        print('소환사 정보를 가져오는데 실패했습니다.')
        return None

# 라이엇 API를 통해 소환사 랭크 정보 가져오기
def get_summoner_rank(summoner_id):
    base_url = f'https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/{summoner_id}?api_key={api_key}'
    
    response = requests.get(base_url)
    
    if response.status_code == 200:
        summoner_rank = response.json()
        return summoner_rank
    else:
        print('소환사 랭크 정보를 가져오는데 실패했습니다.')
        return None

#수정 시작점 
def save_summoner_info():
    print(f'소환사 이름: {summoner_info["name"]}')
    print(f'소환사 레벨: {summoner_info["summonerLevel"]}')

    summoner_id = summoner_info['id']
    summoner_puuid = summoner_info['puuid']  # puuid 추출
    summoner_name = summoner_info["name"]
    summoner_icon = summoner_info["profileIconId"]
    summoner_level = summoner_info["summonerLevel"]
    
    cursor.execute('SELECT * FROM summoners WHERE id=?', (summoner_id,))
    exsining_data = cursor.fetchone()

    if exsining_data:
        return summoner_id 
    else: 
        cursor.execute('''
            INSERT INTO summoners(
                id,
                puuid,
                name,
                profile_icon_id,
                summoner_level
            ) VALUES(?, ?, ?, ?, ?)
        ''', (summoner_id, summoner_puuid, summoner_name, summoner_icon, summoner_level))
    print("입력하신 소환사님의 정보를 검색중입니다...")
    return summoner_id

def save_summoner_rank():
    summoner_rank = get_summoner_rank(summoner_id)
    for entry in summoner_rank:
        queue_type = entry["queueType"]
        tier = entry["tier"]
        rank = entry["rank"]
        league_points = entry["leaguePoints"]
        wins = entry["wins"]
        losses = entry["losses"]
        #DB정보 확인 
    cursor.execute('SELECT * FROM summoners WHERE id=?', (summoner_id,))
    existing_data = cursor.fetchone()

    if existing_data:
        # 이미 존재하는 경우 정보 업데이트
        cursor.execute('''
            UPDATE summoners
            SET queue_type=?, tier=?, rank=?, league_points=?, wins=?, losses=?
            WHERE id=?
            ''', (queue_type, tier, rank, league_points, wins, losses, summoner_id))
        print(f'{queue_type} 랭크 정보가 업데이트되었습니다.')
    else:
        # 존재하지 않는 경우 정보 저장
        cursor.execute('''
            INSERT INTO summoners (                       
                queue_type
                tier, 
                rank, 
                league_points, 
                wins, 
                losses
                ) VALUES (?, ?, ?, ?, ?, ?, ?)
        ''', (summoner_info["profileIconId"], queue_type, tier, rank, league_points, wins, losses))
        print(f'{queue_type} 랭크 정보가 저장되었습니다.')
        # 데이터베이스 변경 사항을 저장
    conn.commit()

summoner_info = get_summoner_info(summoner_name)

# 소환사 정보가 정상적으로 얻어졌을 때만 아래 코드 실행
if summoner_info:
    summoner_id = save_summoner_info() # 소환사 정보 저장 및 ID 얻기
    if summoner_id:
        save_summoner_rank() # 랭크 정보 저장
    conn.close() # 데이터베이스 연결 종료
else:
    print('입력하신 소환사 정보를 찾을 수 없습니다.')

0개의 댓글