분류 전체보기 (135)

728x90

lol 데이터를 이용해 미니 팀 프로젝트를 진행한다고 하셔서 하기에 앞서 내가 맡은 부분이 제대로 정보를 뽑을 수 있는 내용인지 대충이나마 확인하기 위해 혼자 대충 정보를 뽑아봤다.

확인만 한 것이기 때문에 완벽하게 끝낸 것이 아니라 사전 작업만 해둔 것이다.

 

1. 사전 준비

 1-1) import

import requests
import pandas as pd
from tqdm import tqdm
  • 확인용 테스트이기 때문에 따로 함수들을 빼두진 않았다.
  • 받아오기 위한 requests
  • 데이터프레임을 만들기 위한 pandas(알리어스를 이용해 pd로 바꿈)
  • 체크용 tqdm(간략화하여 사용하기 위해 from ~ import를 사용하여 import했다.)

 

 

 1-2) 정보 받아오기

api = '(본인의 api key)'
  • lol 데이터를 받아오기 위해서는 riot api key가 필요한데, 이건 Riot Developer Portal 사이트에서 로그인(riot 계정이 없다면 회원가입해야함) 후 요청하면 1~2일 내로 되는 것 허락해주는 것 같다.
 

Riot Developer Portal

About the Riot Games API With this site we hope to provide the League of Legends developer community with access to game data in a secure and reliable way. This is just part of our ongoing effort to respond to players' and developers' requests for data and

developer.riotgames.com

  • 나의 경우에는 다음 날 확인해보니 바로 허락해주면서 api key를 받을 수 있었다.

 

tiers = ['CHALLENGER','GRANDMASTER','MASTER','DIAMOND']
page = 1
top_tiers= []
top_nick_WL = []
  • tiers에는 정보를 상위 티어로만 가지고 올 것이라 티어 이름을 저장했다.
  • page는 가지고 올 정보의 페이지 수? 같은 것이라고 생각하고 있다. (정보의 양)
  • top_tiers, top_nick_WL은 각 각 모든 정보, 혹은 몇개의 정보를 담아두기 위해 만들어 두었다. (사실 이 부분은 모든 정보만 담아두고 따로 빼면 됐는데 당시에는 정보를 뽑는 것에 급급해 생각하지 못했다.)

 

for tier in tqdm(tiers):
    for p in range(page):
        print(tier)
        url = f'https://kr.api.riotgames.com/lol/league-exp/v4/entries/RANKED_SOLO_5x5/{tier}/I?page={p+1}&api_key={api}'
        req = requests.get(url).json()
        if req == '[]':
            print('pass')
            pass
        else:
            if len(req)>4:
                for i in range(len(req)):
                    top_tiers.append(req[i])
                    top_nick_WL.append([req[i]['tier'],req[i]['summonerName'],req[i]['wins'],req[i]['losses']])
  • url은 지금 상황에선 첫번째 for문에서 선언해도 되지만, 페이지 수가 달라질 경우를 대비하여 두번째 for문에서 위치하도록 했다.
  • 첫번째 for문은 미리 만들어둔 tiers에서 하나씩 꺼내도록 했고, 두번째 for문은 페이지 수 만큼 돌도록 했다.
  • 확인용으로 print를 이용하여 tier를 출력하도록 했다.
  • requests.get()을 통해 url에 저장한 링크에서 정보를 받아와 req에 저장했다. 뒤의 .json()을 통해 json으로 받아올 수 있었다.
  • 혹시라도 빈 값을 가져올 수도 있으니, 만약 req가 '[]'라면(비어있다면) pass를 출력하고 넘어가도록 했다.
  • 빈 값이 아니라면 다시 req의 사이즈가 4를 초과하는 경우만 걸렀다. (위의 if문으로 안 걸러지는건지 아닌지 이 if문이 없으면 에러가 났다. ㅠㅠ)
  • req의 사이즈만큼 for문을 돌려 미리 만들어둔 top_tiers, top_nick_WL에 각 각 담을 정보를 꺼내어 담았다.

 

 1-3) 데이터 프레임으로 만들기

all_df = pd.DataFrame(top_tiers)
tnw_df = pd.DataFrame(top_nick_WL, columns=['tier','summonerName','win','loss'])
  • top_tiers, top_nick_WL에 담아둔 데이터를 각 각 데이터 프레임으로 만들어 준다.
더보기
혹시 몰라서 데이터 일부는 모자이크 처리를 해두었다.
혹시 몰라서 데이터 일부는 모자이크 처리를 해두었다.
  • 만든 데이터 프레임은 이런 식으로 나온다.

 

 1-4) 컬럼 추가 후 값 입력

tnw_df['suNameLen'] = tnw_df['summonerName'].str.len()
tnw_df = tnw_df[['tier','summonerName','suNameLen','win','loss']]
  • 컬럼을 추가하면서 컬럼의 값을 입력해줬다.
  • tnw_df['summonerName'].str.len()은 summonerName 컬럼 값의 문자열 길이를 나타낸다.
더보기
혹시 몰라서 데이터 일부는 모자이크 처리를 해두었다.
  • 결과는 이렇게 나온다.

 

정보들이 제대로 뽑히는 것을 확인 했으니 사전 작업은 끝났다!

 


 

728x90

'프로그래밍 > +a' 카테고리의 다른 글

미니 팀 프로젝트 중간 과정 (파이썬)  (1) 2024.01.03
slPro 3차 일지  (0) 2024.01.01
slPro 2차 일지  (0) 2023.12.28
slPro 1차 일지  (1) 2023.12.27
Java_주말 복습: 문제 다시 풀어보기  (0) 2023.10.01
728x90

 

내가 이것들을 써먹을 수 있을진 모르겠지만 언젠가를 위해 저장용으로 작성한다..!
나중에 천천히 추가할 예정

보통 무료지만 유료가 있을 수 있다.

 

 

아이콘

 

Font Awesome

 

Font Awesome

The internet's icon library + toolkit. Used by millions of designers, devs, & content creators. Open-source. Always free. Always awesome.

fontawesome.com

 

 

 


 

얼럿(alert) 창

 

sweetalert

 

SweetAlert2

SweetAlert2 - a beautiful, responsive, customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes

sweetalert2.github.io

 

Dark Theme

  • 샘플도 있고, 테마 변경도 해볼 수 있다.

 

 


 

테마 / 템플릿

 

 

TEMPLATED - Free HTML and CSS Website Templates

Free HTML5 and CSS3 website templates. Our beautiful site templates are fully responsive and can be used for commercial purposes. Download now!

templated.co

 

  • 회원가입 필요없음!

 

 

 

Free HTML Website Templates - Freebiesbug

A curated selection of the best 119 free HTML website templates. Landing pages, portfolios, e-commerce, and much more.

freebiesbug.com

 

  • 회원가입 필요없음!

 

 

웹쟁이

 

웹쟁이 | 모든 웹 작품과 리소스가 한 곳에

웹쟁이 | 모든 웹 작품과 리소스가 한 곳에

www.webjangi.com

 

  • 다운받으려면 로그인 필요!

 

 


728x90

'프로그래밍 > +++++' 카테고리의 다른 글

단축키  (1) 2023.09.14
수업 시작 전 프로그램  (0) 2023.09.14
728x90

 오늘은 로그인까지만 시도했다.


1차 일지 - [ 설정 ], [ 회원가입 ]


23/12/29) 수정!

 

1. 로그인

로그인 창

 1-1) body

더보기

login.jsp

<div>
	<form id="loginfrm" method="post" action="/member/login">
		<div class="frm_item">아이디
			<input type="text" name="mId" class="input" placeholder="아이디를 입력하세요" maxlength="20" autocapitalize="off">
		</div>
		<div class="frm_item">비밀번호
			<input type="password" name="mPw" class="input" placeholder="비밀번호를 입력하세요" maxlength="20" autocapitalize="off">
		</div>
		<br>
		<button type="button" onclick="location.href='/'">메인화면</button>
		<button type="button" onclick="location.href='/member/joinfrm'">회원가입하러가기</button>
		<button type="submit" class="btn btn-3 btn-3e" id="loginSubBtn" style="text-align: center;">login!</button>
	</form>
</div>
  • div 아이디나 클래스명 지어주는 것을 잊어먹었다..
  • 버튼을 통해 메인화면으로, 혹은 회원가입하러 갈 수 있도록 해놨다.

 

 1-2) js

더보기

login.jsp

<script type="text/javascript">
	let m = "${msgFl}"
	if(m!=""){
		alert(m);
	}
</script>
  • 로그인에 실패하면 문구를 띄울 수 있도록 js를 추가했다.

 

 1-3) controller

더보기

MemberController

@GetMapping("/member/loginfrm")
public String login() {
	log.info("==> GetMapping - loginfrm 요청 <==");
	return "login";
}
@PostMapping("/member/login")
public String logrin(MemberDto mDto, RedirectAttributes ra, HttpSession session, Model model) {
	boolean result = mSer.login(mDto);
	if(result) {
		ra.addFlashAttribute("msgFl","로그인 성공!");
		session.setAttribute("loginId",mDto.getMId());
		return "redirect:/";
	}
	ra.addFlashAttribute("msgFl","로그인 실패");
	return "redirect:/member/loginfrm";
}
  • MemberService를 통해 login 메소드를 실행하고 성공여부를 boolean으로 받아와, if문을 돌린다.

 

 1-4) service

더보기

MemberService

public boolean login(MemberDto mDto) {
	log.info("===> mSer login 요청 <===");
	BCryptPasswordEncoder pwEn = new BCryptPasswordEncoder();
	String mPw = mDao.login(mDto.getMId());
	if(pwEn.matches(mDto.getMPw(), mPw)) {
		return true;
	}
	return false;
}
  • 인코딩했던 비밀번호를 디코딩할 수 없지만 비교할 수는 있다고 해서 다시 BCryptPasswordEncoder을 통해 입력받은 비밀번호와 아이디를 통해 검색해온 인코딩된 비밀번호가 같은지 비교하여 true, 아니면 false를 리턴해준다.

 

 1-5) dao

더보기
String login(String mId);
  • MemberDao

 

<select id="login" parameterType="String" resultType="String">
	select mPw from member where mId=#{mId}
</select>
  • MemberDao의 xml 파일 (mappers)

 

 

2. 결과

더보기
  • 로그인 실패 시

동기통신을 하며 얼럿창을 띄운다. (근데 이거 비동기로 확인하고 보내는 것도 나쁘지 않을듯..하다..아무것도 없는 화면에 저 얼럿창만 덜렁 나와있으니 뭔가..별로다ㅠㅠ)

 


 

틀리거나 헷갈렸던 점 메모

  • session에 아이디를 저장하는 방법을 실패한 것 같다..나중에 다시 해보기!
  • controller에서 Model을 안 받아와서 실패했었다. 넣어주니 잘 저장해옴..

 


 

728x90

'프로그래밍 > +a' 카테고리의 다른 글

slPro 3차 일지  (0) 2024.01.01
미니 팀 프로젝트 사전 준비 (파이썬)  (2) 2024.01.01
slPro 1차 일지  (1) 2023.12.27
Java_주말 복습: 문제 다시 풀어보기  (0) 2023.10.01
Java_주말 복습: 문제 다시 풀어보기  (0) 2023.10.01
1 2 3 4 5 6 7 8 ··· 45