파이썬 json및 urllib 파싱관련해서 질문드립니다. (리그오브레전드 api 사용)

조회수 1396회
import urllib.request
import json


def get_encryptedID(input_name):
    apikey = "api키값입니다."
    encode_name = input_name.replace(" ", "%20")
    urls = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/' + encode_name + '?api_key=' + apikey

    if(urllib.request.urlopen(urls).getcode() == 200):
        urls_data = urllib.request.urlopen(urls)                    # url을 열어온 정보
        dict_data = data_process(urls_data)                                     #url정보 -> dict
        return dict_data['id'], dict_data['name']
    else:
        return -1, -1

def print_info(dict_data):
    print(dict_data['tier'], dict_data['rank'])
    print("승 :", dict_data['wins'], "패 :", dict_data['losses'], "승률 :", round(dict_data['wins']/(dict_data['wins']+dict_data['losses'])*100, 2), "%" )

def print_unrank():
    print("Unrank")

def data_process(f):
    jsonString = f.read().decode("utf-8")
    if(len(jsonString) < 10):
        return False
    #print("jsonstring : ", jsonString)

    if(type(json.loads(jsonString)) == list):
        data = json.loads(jsonString)[0]
    elif(type(json.loads(jsonString)) == dict):
        data = json.loads(jsonString)
    #print(data)
    return data

def get_summoner_data(encryptedID):
    apikey = "api키값입니다."
    urls = 'https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/' + encryptedID + '?api_key=' + apikey
    urls_data = urllib.request.urlopen(urls)                    # url을 열어온 정보
    dict_data = data_process(urls_data)                     # url정보 -> dict
    if(dict_data == False):
        print_unrank()
    else:
        print_info(dict_data)

def run():
    summoner_name = str(input())
    encryptedID, summoner_name = get_encryptedID(summoner_name)
    if(encryptedID == -1):
        print("Data not found - summoner not found")
    print(summoner_name)
    get_summoner_data(encryptedID)

run()

리그오브 레전드 api(https://developer.riotgames.com/)를 이용해서 간단한 전적 검색을 해보려고 하는데요...

제가 json이나 urllib를 잘 몰라서... 복잡하게나마 만들어 봤는데요...

닉네임을 검색해서 전적 및 티어를 나타내는 코드인데 닉네임이 존재하지 않는 경우 api 자체에서 response코드를 404로 보내주는데 그거를 어떻게 예외 처리를 하는지를 모르겠어서 질문드립니다.

. . .

def get_encryptedID(input_name):
    apikey = "api키값입니다."
    encode_name = input_name.replace(" ", "%20")
    urls = 'https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/' + encode_name + '?api_key=' + apikey

    if(urllib.request.urlopen(urls).getcode() == 200):
        urls_data = urllib.request.urlopen(urls)                    # url을 열어온 정보
        dict_data = data_process(urls_data)                                     #url정보 -> dict
        return dict_data['id'], dict_data['name']
    else:
        return -1, -1

여기서 urllib.request.urlopen(urls).getcode() == 200 이게 404가 되면 그냥 오류가 떠서 if문 자체에서 오류로 막히게 되는데... 해결방법을 잘 모르겠습니다..

그리고 추가로 하나더 질문하자면 닉네임을 한글로 검색하면 아스키 코드 변환 오류가 뜨는데 어떻게 해결 해야 할까요

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)