Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 라이엇
- python
- git
- 그리디알고리즘
- 프로그래머스
- Riot
- 장고
- 백준
- 내일배움캠프
- 스파르타내일배움캠프TIL
- 탐욕알고리즘
- sort
- 코딩테스트
- java
- 스파르타내일배움캠프
- greedy
- github
- 롤
- programmers
- SQL
- 알고리즘
- 자바
- 코딩테스트준비
- Django
- 파이썬
- 그리디
- lol
- API
- drf
- 리그오브레전드
Archives
- Today
- Total
Lina's Toolbox
[RIOT API] 4. 유저네임으로 소환사 리그정보(랭크,티어 등) 조회하기 (league-v4) 본문
스파르타 내일 배움 캠프 AI 웹개발 과정/python
[RIOT API] 4. 유저네임으로 소환사 리그정보(랭크,티어 등) 조회하기 (league-v4)
Woolina 2024. 10. 12. 06:47
SummonerID로 소환사의 리그 관련 정보 불러오기
https://developer.riotgames.com/apis#league-v4/GET_getLeagueEntriesForSummoner
/lol/league/v4/entries/by-summoner/{encryptedSummonerId} 을 이용해보겠다.
Return Value
이 전 포스팅까지 썼던 api에 비해, 리턴 밸류가 많은 편인 걸 볼 수 있다.
- queueType
솔로랭크인지, 자유 랭크인지 등의 랭크 타입을 나타낸다. - hotSteak
해당 유저가 최근에 연승 중일 경우 True - veteran
이 값은 소환사가 얼마나 많은 게임을 플레이했는지.
일반적으로 많은 게임을 플레이한 소환사는 더 높은 경험치를 가진 것으로 간주되고 True - inactive
소환사가 일정 기간 동안 게임에 접속하지 않았음을 의미. 해당 소환사가 현재 비활성 상태이면 True - freshBlood
신규 유저일 경우 True
인코딩된 summonerId를 패러미터에 입력하고 EXCUTE REQUEST를 누르면
[
{
"leagueId": "ce5149f6-59b4-47ae-80b1-dfdfaf590",
"queueType": "RANKED_SOLO_5x5",
"tier": "GOLD",
"rank": "IV",
"summonerId": "xGPNo8_SJPROdfsgEtidf_HjaajwqAFAv6VAzrCgMNL0q3rlSQ",
"leaguePoints": 40,
"wins": 10,
"losses": 8,
"veteran": false,
"inactive": false,
"freshBlood": false,
"hotStreak": false
},
{
"leagueId": "ce5149f6-59b4-47ae-80b1-dfdfsdf590",
"queueType": "RANKED_FLEX_SR",
"tier": "SILVER",
"rank": "III",
"summonerId": "xGPNo8_SJPROZavhFDFogjxD7TRDp_HjaajwqAFAv6VAzrCgMNL0q3rlSQ",
"leaguePoints": 48,
"wins": 3,
"losses": 3,
"veteran": false,
"inactive": false,
"freshBlood": false,
"hotStreak": false
}
]
이런 식으로 호출된다. 처음엔 왜 두개가 나오나 했는데,
솔로랭크 하나, 자유랭크 하나 이렇게 두개가 나왔던 것!
파이썬 코드
def get_user_league(api_key, summoner_id):
"""소환사 ID로부터 유저의 리그 정보를 조회합니다."""
url_league = f"https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/{summoner_id}?api_key={api_key}"
try:
response = requests.get(url_league, timeout=10)
response.raise_for_status() # HTTPError가 발생하면 예외 발생
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error fetching league info: {e}")
return None
전체 파이썬 코드
import sys
import os
import requests
from urllib.parse import quote
# 현재 파일의 경로를 기준으로 상위 디렉토리(프로젝트 루트)를 PYTHONPATH에 추가
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..")
from 앱이름.settings import RIOT_API_KEY
# API 키 설정
api_key = RIOT_API_KEY
# 유저네임과 태그로 유저 존재 여부 확인 후 프로필과 리그 정보를 얻는 함수
def get_user_info(api_key, riot_id, tag_line):
encoded_riot_id = quote(riot_id)
encoded_tag_line = quote(tag_line)
# 아시아 서버 URL 설정 (유저 존재 여부 확인)
url_puuid = f"https://asia.api.riotgames.com/riot/account/v1/accounts/by-riot-id/{encoded_riot_id}/{encoded_tag_line}?api_key={api_key}"
try:
# 유저 PUUID 조회
response_puuid = requests.get(url_puuid, timeout=10)
if response_puuid.status_code == 404:
return {"error": "해당 유저는 존재하지 않습니다."}
if response_puuid.status_code != 200:
return {"error": f"Error: Status Code {response_puuid.status_code}"}
# 유저가 존재하는 경우 PUUID를 얻음
data_puuid = response_puuid.json()
puuid = data_puuid['puuid']
# 한국 서버 프로필 정보 조회
url_profile = f"https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-puuid/{puuid}?api_key={api_key}"
response_profile = requests.get(url_profile, timeout=10)
if response_profile.status_code != 200:
return {"error": f"Error: Status Code {response_profile.status_code}"}
data_profile = response_profile.json()
summoner_id = data_profile['id'] # 리그 정보 조회를 위한 소환사 ID
# profileIconId를 기반으로 프로필 아이콘 URL 생성
profile_icon_link = f"https://raw.communitydragon.org/latest/game/assets/ux/summonericons/profileicon{data_profile['profileIconId']}.png"
# 한국 서버 리그 정보 조회
url_league = f"https://kr.api.riotgames.com/lol/league/v4/entries/by-summoner/{summoner_id}?api_key={api_key}"
response_league = requests.get(url_league, timeout=10)
if response_league.status_code != 200:
return {"error": f"Error: Status Code {response_league.status_code}"}
data_league = response_league.json()
# 리턴할 정보 구성
user_info = {
"profileIconId": data_profile['profileIconId'],
"profileIconLink": profile_icon_link, # 프로필 아이콘 URL 추가
"summonerLevel": data_profile['summonerLevel'],
"revisionDate": data_profile['revisionDate'],
"league": []
}
# 리그 정보에서 'RANKED_SOLO_5x5' 큐 타입만 필터링하여 추가
for entry in data_league:
if entry['queueType'] == 'RANKED_SOLO_5x5':
league_info = {
"tier": entry['tier'],
"rank": entry['rank'],
"leaguePoints": entry['leaguePoints'],
"wins": entry['wins'],
"losses": entry['losses'],
"veteran": entry['veteran'],
"inactive": entry['inactive'],
"freshBlood": entry['freshBlood'],
"hotStreak": entry['hotStreak']
}
user_info["league"].append(league_info)
return user_info
except requests.exceptions.Timeout:
return {"error": "Request timed out"}
except requests.exceptions.RequestException as e:
return {"error": f"Request failed: {e}"}
유저네임과 태그를 가지고 리그정보까지 구하는 함수이다.
나는 솔로 랭크 관련한 정보만 가져오고 싶어서 if entry['queueType'] == 'RANKED_SOLO_5x5': 를 해줬다!