개인 자료란 (JE)

  서버 커뮤니티

한국 마인크래프트 포럼

마인크래프트 자료 및 커뮤니티 플랫폼

전체 회원수 121,956명 ( +129명 )

※ 장기간 미활동 회원 제외

Profile 라고솔로가말했습니다 한마포 개발자란 담당자

SaidBySolo 8b58f951b6404b78ae3ba92d55d431f7

Profile

커뮤니티new 개발자란new 개발자 강좌 일반 프로그래밍

파이썬을 이용해 자신의 학교급식을 가져오기!

2020.06.12 조회 수 1091 추천 수 0


2020 05 31 수정.


이제 동기도 지원합니다.

그니까 async를 안써도된다는거죠!

자세한것은 깃허브!


한달 전쯤 시작한 교육청의 neis api 래핑 프로젝트를 오늘 오전 12시쯤에 마무리를 지었습니다.

코드는 개판이지만 그래도 굴러간다는 거에 의의를 두어야죠.

그래도 제가 쓴 라이브러리를 사용해보니 매우 뿌듯하네요.

자 잡소리는 그만하고 일단 소개부터합시다.


깃허브 링크

2020년 4월 25일 날에 첫커밋 되어 시작한 오픈소스 프로젝트입니다.

처음 시작한 계기가 학교의 급식을 가져오는 디스코드 봇을 만들려고하였으나

교육청에서 워낙 요청값을 개판으로 줘서 다른사람들을 이런고통 겪으면 안된다!

라고 생각하여 시작했습니다.


VS CODE를 사용합니다.

자 먼저 일단 사용을 위해서는 설치를 해야합니다.

먼저 pip install neispy를 통해 라이브러리를 설치합니다.

38f4ce59439412fd9ccea99af0ec33bc.png정상적으로 설치가 완료됨 (pip업데이트 귀찮아요)

 저 같은 경우는 의존성 라이브러리인 aiohttp가 이미설치되어있어 neispy만 설치하면 되는상황이라 빠르게 설치가 완료되었네요

이제 코드를 작성하여봅시다.

ee93f739106739b5c0fced03cc19f2e8.png모듈을 임포트한후 비동기 함수만들어주고 클라이언트 클래스까지 가져온모습.

일단 모듈을 임포를 해줍시다.

그리고 해당 라이브러리는 비동기이기 때문에 비동기 함수 하나를 만들어주고 client클래스까지 가져와줍니다.

그래서client 클래스가 뭔데 씹덕들아!

그래서 설명을 해드립니다.

클라이언트 클래스란?

5500db439de11e3ef31ee7bd1a29a742.png와! 사랑해요! 깃허브!

보는것과 같이 필수인자를 합쳐주는 역할을 하는 클래스입니다. 이안에 여러 엔드포인트를 요청할수있는 함수들도있죠

원래같으면 api키를 넣어 주어야하지만 저는 기본적인 사용방법만 설명해드릴것이기 때문에 

저는 샘플키로 요청할것입니다.

그냥 안쓰면 지가알아서 샘플키로 요청한다 하니 걍 냅두고 코딩합니다.


eb5979a01a25e5ef362b747a04ab04fb.png일단 인천이라는 이름이 들어간 학교정보를 요청합니다.

그냥 급식을 뿅! 하고 가져올수있으면 얼마나 좋을까요

하지만 어림도없죠 일단 학교정보부터 가져오도록합시다.

급식 정보를 가져오기 위해서는 해당학교의 교육청번호와 학교고유번호를 가져와야합니다.

???:그걸 우리가 어케알아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

아.  선생님 진정하세요. 학교정보안에 포함되어있어요.

방금 설명했던 클라이언트 클래스 내부의 비동기함수인 schoolinfo의 함수를 이용해서 요청할건데요

비동기이기 때문에 await를 통해 실행시키도록한후 클라이언트 내부의 함수이기때문에 neis.schoolInfo 로 불러옵니다.

그후에 여기보면 신청 인자인 SCHUL_NM  에 학교명을 넣을수 있으니 넣습니다.

320f072ef95cccab2d754bdbe0abd003.png오 뭐야 벌써 학교정보를 가져온다고?

학교정보를 출력해서 알아보아야하기때문에 print를 이용해 schoolinfo를 출력하도록합시다 

다음은 비동기 함수이기 때문에 asyncio를 임포트해줍니다.

그 다음 비동기 함수의 이벤트를 가져오고

함수의 실행이 완료될때 까지  실행하도록합시다.


자 두근거리는 마음으로 실행하면?

7f13a2434563a28e1e2b5c43d6585411.png? tlqkf 저게 뭐시여?

일단 저희는 샘플키로 요청할것이기 때문에 위의 Traceback은 무시하고 드래그 표시한 저것이나 봅시다.

???:아니 저게뭔데;;; 왜저렇게 나옴;;

저렇게 출력된 이유는 클래스객체를 그대로 가져오셨기 때문입니다.

그러면 제대로 가져와봐야겠죠?

5a40c436f9f5fde06a7c74030d69dcb3.pngschoolinfo.data는 또 어디서 튀어나온거야;;;;;

???:저기있는 .data는 어디서 튀어나온거죠?

걱정마세요 다설명해드립니다.

저 schoolinfo.data의 정체는 저희가 학교정보를 요청한걸 돌려 받았을때 

저희가 사용하기쉽도록  원하는 값만 가져오도록 하기위해 모델클래스를 거치는데

거치고난 데이터를 불러오기위해 .data를 붙인것 입니다.

자 한번 실행해볼까요?

0e0490cb6956a72907c8b03a33b91c06.png뭐야... 인천이라고 들어간게 저거 하나밖에 없다고?

오 매우 어썸하게 출력되었네요

하지만 눈치가 빠르신분들은 아시겠죠

???:아니 인천이라고 들어간 학교가 저거 하나가 끝임?

그래서 모든 결과값를 출력하기 위해서는 schoolInfo함수에 rawdata를 True로 넣어주시면됩니다.

bb76358e8ce3ff45b931f2a876f891e8.png허미 저게 뭐시여

네 하지만 이게 모두 출력된게 아닙니다. 샘플키로 요청하였기 때문에 결과값을 가져오는게 한정되있습니다.

실제로 사용할때는 api키를 받아서 사용하셔야합니다.

자 근데 여기서 교육청코드와 학교코드를 어케 가져올지 생각만해도 막막합니다.

근데  이걸 직접 dict로 뭐하고 변환하고... 하면 이걸 쓸 의미가 없죠

그래서.

bba1361a94a051f4845285403fd75a39.png띠용 옆에다가 또 뭘붙인겨

자 아까 전에 말씀드렸다 싶이 저희가 사용하기 편하기위해 모델을 거친다고 얘기했습니다.

여기에 출력인자를 보면 저희가 가져와야할것은 ATPT_OFCDC_SC_CODE 인 시도교육청코드, SD_SCHUL_CODE 인 표준학교코드를  가져와야합니다.

방금 .data처럼 원하는 출력인자를 옆에다가 붙여주시기만 하면 가져와집니다.

저는 앞글자만 따서 변수를 생성했습니다.

아 그리고 rawdata값을 뺏습니다. 

schoolInfo함수에서 rawdata의 기본값은 False입니다.

저희가 이상황에서 필요한건 맨앞정보만 필요하기 때문이죠

만약 안빼시면 리스트로 출력되고 모델쪽에서 변환이 안되기때문에 때문에 오류가 날것입니다.

자 출력 ㄱㄱㄱ

3ef39ff413fdfeb41788428a362c6dee.png오 ㅁㅊ 이게되네

깔끔 하게 가져왔습니다.

자 이제 이걸 이용해서 급식정보를 가져올거에요

a1ccfce612c08311e2614e792df7f75c.png아 이젠 대충 뭔지 암 ㅇㅇ

일단 저는 학교이름을 특정하기 쉽도록 바꿨습니다.

이곳을 참고하시고 신청인자와 출력값을 봅시다.

만약 처음부터 차근차근 따라오시고 자세히보신분이시라면 위의 링크를 보시면 이해가 가실것이라 믿습니다.

만약 가져올 날짜를 지정을 안하면 현재날짜로 급식정보를 요청하는데

시국이 시국인지라 예전 정보를 요청할것입니다.

실행 ㄱㄱㄱㄱ

5865fbc1b8ad61c1a43991d2cf60e1a5.png<br/>? 이게뭐임?

오오오오 성공적으로 가져와졌어요

하지만 <br/> 이게뭐죠?

제가 맨위에서 말했던거처럼 교육청이 값을 매우 그지같이줍니다.

줄바꿈을 저런 형식으로 주더라고요

.replace를 통해 바꿔서 출력해봅시다.

ac052ed3b19292d8bc0b9fbf9794fb30.png이제 실행만 하면된다!

replace('바꿀문자열', '새문자열')은 문자열 안의 문자열을 다른 문자열로 바꿉니다.

문자열 자체는 바꾸지않고 바뀐결과만 출력합니다.

<br/>가 줄바꿈인거같으니 \n으로 바꾸고

이제 두근거리는 실행시간!

c174755b48a6d382a338ff2d499597dd.png오 미쳤다 미쳤어

이렇게 기본적인 사용법에 대해서 설명드렸습니다.

이외에 시간표,학사일정등 이곳에 있는 모든 엔드포인트를 래핑했으니 관심있으시면 사용해보세요!


이렇게 제 프로젝트의 간단한설명과 파이썬으로 간단하게 급식정보를 가져와봤습니다.

만약 유용하고 마음에 드신다면 깃허브 스타  남겨주시는거 잊지 말아주세요!

긴글 읽어주셔서 감사합니다!


p.s:이슈와 PR은 언제든지 환영!


3개의 댓글

honk7608
2020.10.08

저는 설치중에 에러나던데요;;

필요하시면 로그 드리겠습니다

전꽃비'
2020.09.12

어캐 했노 감사합니다

 

마크러버
2020.06.13

와 감사합니당

컨텐츠
https://www.koreaminecraft.net/files/thumbnails/337/871/002/262x150.crop.jpg?20211014221722

플러그인

달고나 뽑기 in Minecraft 7

BlueRing1017

2021-10-14

5

https://www.koreaminecraft.net/files/thumbnails/848/870/002/262x150.crop.jpg?20211014131239

답안지

한마탐 4주차 / 정오표 + 해설 1

베개냥이

2021-10-14

1

https://www.koreaminecraft.net/files/thumbnails/421/866/002/262x150.crop.jpg?20211011194131

애니메이터

오징어 게임을 하는 나 6

삼영덕

2021-10-11

5