2020 공개SW 개발자 대회 조직위원장 특별상 수상 작품
동기와 비동기 전부 지원합니다. 문제 발생시 이슈 넣어주세요!
api키는 이곳에서 받으실 수 있습니다.
open Neis api의 모든 엔드포인트가 래핑되어 있습니다.
pip install neispy
pip install --upgrade neispy
from neispy import Neispy
from asyncio.events import get_event_loop
name = "인천석천초등학교"
async def main():
# 필수 인자가 들어가는 곳입니다. API키, JSON, XML 등의 받을 방식 등등..
# 아무런 값이 없으니 샘플 키로 요청합니다.
async with Neispy() as neis:
# 학교 이름으로 학교 정보를 요청하고 교육청 코드와 학교 코드로 가져옵니다.
scinfo = await neis.schoolInfo(SCHUL_NM=name)
AE = scinfo[0].ATPT_OFCDC_SC_CODE # 교육청 코드
SE = scinfo[0].SD_SCHUL_CODE # 학교 코드
# 학교 코드와 교육청 코드로 2022년 5월 23일의 급식 정보 요청
scmeal = await neis.mealServiceDietInfo(AE, SE, MLSV_YMD="20220523")
meal = scmeal[0].DDISH_NM.replace("<br/>", "\n") # 줄바꿈으로 만든 뒤 출력
# 학교 코드와 교육청 코드로 2022년 6월 1일날 학사일정 요청
scschedule = await neis.SchoolSchedule(AE, SE, AA_YMD=20220601)
schedule = scschedule[0].EVENT_NM # 학사일정명 가져옴
# 학교 코드와 교육청 코드로 초등학교의 2022년 5월 23일의 시간표 가져옴
sctimetable = await neis.elsTimetable(AE, SE, 2022, 1, 20220523, "1", "1")
timetable = [i.ITRT_CNTNT for i in sctimetable] # 리스트로 만듦
academyinfo = await neis.acaInsTiInfo(AE) # 교육청 코드로 학원 및 교습소 정보 요청
academy = academyinfo[0].ACA_NM # 학교 이름 출력
scclass = await neis.classInfo(
AE, SE, GRADE="1"
) # 학교 코드와 교육청 코드로 1학년의 모든 반 정보 요청
class_info = [i.CLASS_NM for i in scclass] # 리스트로 만듦
hiscinfo = await neis.schoolInfo(SCHUL_NM="인천기계") # 다른 정보를 위해 공고로 가져옴
hAE = hiscinfo[0].ATPT_OFCDC_SC_CODE # 교육청 코드
hSE = hiscinfo[0].SD_SCHUL_CODE # 학교 코드
scmajorinfo = await neis.schoolMajorinfo(hAE, hSE) # 학과 정보 요청
majorinfo = [m.DDDEP_NM for m in scmajorinfo] # 리스트로 만듦
scAflcoinfo = await neis.schulAflcoinfo(hAE, hSE) # 학교 계열 정보 요청
Aflco = [a.ORD_SC_NM for a in scAflcoinfo]
sctiClrm = await neis.tiClrminfo(hAE, hSE) # 시간표 강의실 정보 요청
tiClem = [t.CLRM_NM for t in sctiClrm]
get_event_loop().run_until_complete(main())
# 출력값
# E10
# 7341025
# 보리밥c
# 감자국c (5.6.9.13.)
# 순대볶음c (5.6.10.13.)
# 고구마돈가스c (1.2.5.6.10.12.13.)
# 배추김치 (9.13.)
# 참외
# 지방선거일
# A+수학교습소
# ['1', '2', '3', '4', '1']
# ['국어', '수학', '즐거운생활', '즐거운생활', '봉사활동']
# ['공동실습소', '건축과', '건축디자인과', '금속과', '기계공작과']
# ['공동실습소', '공업계', '공업계']
# ['건축1-1', '건축1-2', '도시1-1', '도시1-2', '메카1-1']
from neispy import Neispy
name = "인천석천초등학교"
def main():
# 필수 인자가 들어가는 곳입니다. API키, JSON ,XML 등의 받을 방식 등등..
# 아무런 값이 없으니 샘플 키로 요청합니다.
neis = Neispy.sync()
# 학교 이름으로 학교 정보를 요청하고 교육청 코드 와 학교 코드로 가져옵니다.
scinfo = neis.schoolInfo(SCHUL_NM="인천동방초등학교")
AE = scinfo[0].ATPT_OFCDC_SC_CODE # 교육청 코드
SE = scinfo[0].SD_SCHUL_CODE # 학교 코드
# 학교 코드와 교육청 코드로 2022년 5월 23일의 급식 정보 요청
scmeal = neis.mealServiceDietInfo(AE, SE, MLSV_YMD="20220523")
meal = scmeal[0].DDISH_NM.replace("<br/>", "\n") # 줄바꿈으로 만든 뒤 출력
# 학교 코드와 교육청 코드로 2022년 6월 1일날 학사일정 요청
scschedule = neis.SchoolSchedule(AE, SE, AA_YMD=20220601)
schedule = scschedule[0].EVENT_NM # 학사일정명 가져옴
# 학교 코드와 교육청 코드로 초등학교의 2022년 5월 23일의 시간표가져옴
sctimetable = neis.elsTimetable(AE, SE, 2022, 1, 20220523, "1", "1")
timetable = [i.ITRT_CNTNT for i in sctimetable] # 리스트로 만듦
academyinfo = neis.acaInsTiInfo(AE) # 교육청 코드로 학원및 교습소 정보 요청
academy = academyinfo[0].ACA_NM # 학교이름 출력
scclass = neis.classInfo(AE, SE, GRADE="1") # 학교 코드와 교육청 코드로 1학년의 모든 반 정보 요청
class_info = [i.CLASS_NM for i in scclass] # 리스트로 만듦
hiscinfo = neis.schoolInfo(SCHUL_NM="인천기계") # 다른 정보를 위해 공고로 가져옴
hAE = hiscinfo[0].ATPT_OFCDC_SC_CODE # 교육청 코드
hSE = hiscinfo[0].SD_SCHUL_CODE # 학교 코드
scmajorinfo = neis.schoolMajorinfo(hAE, hSE) # 학과 정보 요청
majorinfo = [m.DDDEP_NM for m in scmajorinfo] # 리스트로 만듦
scAflcoinfo = neis.schulAflcoinfo(hAE, hSE) # 학교 계열 정보 요청
Aflco = [a.ORD_SC_NM for a in scAflcoinfo]
sctiClrm = neis.tiClrminfo(hAE, hSE) # 시간표 강의실 정보 요청
tiClem = [t.CLRM_NM for t in sctiClrm]
print(AE)
print(SE)
print(meal)
print(schedule)
print(academy)
print(class_info)
print(timetable)
print(majorinfo)
print(Aflco)
print(tiClem)
main()
# 출력값
# E10
# 7341025
# 보리밥c
# 감자국c (5.6.9.13.)
# 순대볶음c (5.6.10.13.)
# 고구마돈가스c (1.2.5.6.10.12.13.)
# 배추김치 (9.13.)
# 참외
# 지방선거일
# A+수학교습소
# ['1', '2', '3', '4', '1']
# ['국어', '수학', '즐거운생활', '즐거운생활', '봉사활동']
# ['공동실습소', '건축과', '건축디자인과', '금속과', '기계공작과']
# ['공동실습소', '공업계', '공업계']
# ['건축1-1', '건축1-2', '도시1-1', '도시1-2', '메카1-1']
변수명 | 타입 | 변수 설명 | 설명 |
---|---|---|---|
KEY | STRING(필수) | 인증키 | 기본값 : sample key |
Type | STRING(필수) | 호출 문서(xml, json) | 기본값 : json |
pIndex | INTEGER(필수) | 페이지 위치 | 기본값 : 1(sample key는 1 고정) |
pSize | INTEGER(필수) | 페이지 당 신청 숫자 | 기본값 : 100(sample key는 5 고정) |
시간표 같은 부분은 초, 중, 고, 특수인 것을 제외하고는 모두 같습니다.
Attribute도 데이터셋을 참고해 주시기 바랍니다.
- 클래스명 변경
Client
->Neispy
. - 이제
ClientSession
을 요청마다 생성하지 않습니다. now()
함수가 더 이상 적용되지 않도록 변경되었습니다.async with
구문을 지원하도록 변경되었습니다.- 기존 모델에서 SimpleNamespace로 변경되었습니다.
- 동기로 사용할시 클래스메소드
.sync()
의 반환값인SyncNeispy
를 사용해야 하도록 변경되었습니다. - 타입힌트가 좀 더 정확히 적용되었습니다.
- 사용하지 않는 모듈을 제거한 후 재배포했습니다.
- #43(#42번 이슈) PR을 적용했습니다.
- #41 PR을 적용했습니다.
- #40(#39번 이슈) PR을 적용했습니다.
-
#28(#17번 이슈) #31(#30번 이슈) #34(#33번 이슈) #36 PR을 적용했습니다.
-
동기 비동기 클라이언트를 나누지 않고 사용할수있습니다.
-
모델의 많은 변화가 있습니다. 예제를 참고해주세요.
- neispy는 이제 UTC+9:00를 기준으로 가져옵니다.
-
#25번 이슈를 적용했습니다.
-
APIKeyNotFound예외를 force인자를 통해 무시할 수 있습니다.
-
시간표에 빠져있던 강의실명 파라미터를 추가했습니다.
- #22번(#21번 이슈), #23번 PR을 적용했습니다.
- #20번 PR을 적용했습니다.
-
Fixed #15
-
시간표에 빠져있던 인자들을 추가했습니다.
- 날짜 형식이 20200101과 같은 형식으로 안나오는 문제를 해결했습니다.
- 동기 요청이 가능합니다.
- 모든 엔드포인트를 커버합니다.
-
모델을 적용했습니다.
-
반 정보 엔드포인트를 커버할 수 있습니다.
-
모든 정보가 필요할 때 rawdata를 이용하여 리스트로 가져올 수 있습니다.
-
Model 메커니즘을 변경했습니다.
-
docstring을 추가했습니다.
- 초, 중, 고 시간표 엔드포인트를 커버할 수 있습니다.
- Model 메커니즘을 변경하였습니다.
- Model 클래스에서 sort_meal 함수의 이름이 달라 생긴 문제를 수정했습니다.
- 코드 퀄리티가 향상되었습니다.
- 코드 퀄리티가 향상되었습니다.
- 코드 다시 쓰기 분기를 합병했습니다.
- 학원교습소 정보를 추가했습니다.
- 예외 처리를 추가했습니다.
- 코드를 최적화했습니다.
- 초등학생 시간표를 추가했습니다.
- #1번 이슈의 버그를 수정했습니다.
- 샘플 키로 요청하도록 변경했습니다.
- 학사 일정을 추가했습니다.
- 학교 정보, 급식 일정 모든 인자 값을 받을 수 있습니다.
- 사용하지 않는 모듈을 제거하고, 사용하기 쉽도록 함수 이름을 변경했습니다.
- 첫 배포가 시작되었습니다.