SCH Eclass에 새 강의 자료가 올라오면 자동으로 감지·다운로드하고 Discord로 알림을 보내는 백그라운드 CLI 툴
| 항목 | 내용 |
|---|---|
| 대상 | eclass.sch.ac.kr (LearningX 기반) |
| 형태 | CLI (스케줄러 / 즉시 실행) |
| 본인 담당 | 단독 개발 (인증 · 크롤러 · 다운로더 · Discord 알림) |
| 관련 저장소 | 웹 버전: ClassFileAuto_Web |
flowchart LR
Cron[30분 주기 스케줄러] --> Login
Login[SSO 로그인<br/>세션 유지] --> List
List[수강 강의 + 파일 목록] --> Diff
Diff{이력 비교<br/>신규 파일?}
Diff -->|있음| Down[다운로드]
Diff -->|없음| Skip[스킵]
Down --> Save[downloads/학기/강의/]
Down --> Hook[Discord 알림]
Save --> History[(이력 JSON)]
- 로그인 및 세션 자동 유지 (만료 시 재로그인)
- 수강 중인 전체 강의의 첨부파일 자동 감지
- 신규 파일만 선별 다운로드 (중복 스킵)
- Discord Webhook 알림 (성공/실패)
- 30분 주기 자동 실행 (설정 변경 가능)
pip install -r requirements.txt.env.example을 복사하여 .env로 만든 후 실제 값을 입력하세요.
cp .env.example .env.env 파일 설정:
ECLASS_ID=학번
ECLASS_PW=비밀번호
ECLASS_BASE_URL=https://eclass.sch.ac.kr
DOWNLOAD_BASE_DIR=./downloads
CHECK_INTERVAL_MINUTES=30
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
LOG_LEVEL=INFO
DOWNLOAD_VIDEO=false- Discord 서버에서 알림 받을 채널로 이동
- 채널 설정 → 연동 → 웹후크 → 새 웹후크
- 이름 입력 후 "웹후크 URL 복사"
.env의DISCORD_WEBHOOK_URL에 붙여넣기
Discord Webhook이 없어도 다운로드는 정상 동작합니다.
스케줄러 모드 (백그라운드 주기 실행):
python main.py즉시 1회 실행:
python main.py --run-noweclass-downloader/
├── main.py # 엔트리포인트
├── eclass/
│ ├── auth.py # 로그인/세션 관리
│ ├── crawler.py # 강의 목록 및 파일 크롤링
│ └── downloader.py # 파일 다운로드
├── notifier/
│ └── discord.py # Discord 알림
├── utils/
│ ├── history.py # 다운로드 이력 관리
│ └── sanitize.py # 파일명 정규화
├── data/ # 다운로드 이력 JSON (자동 생성)
├── logs/ # 에러 로그 (자동 생성)
├── downloads/ # 저장 폴더 (자동 생성)
├── .env # 환경변수 (Git 제외)
├── .env.example # 환경변수 템플릿
└── requirements.txt
다운로드 파일은 downloads/{학기}/{강의명}/{파일명} 구조로 저장됩니다.
- 교내망 환경 필요: 학교 외부에서는 VPN 또는 교내 Wi-Fi 사용 권장
- 서버 부하 주의: 요청 사이 1~3초 랜덤 딜레이가 자동 적용됩니다. 최소 실행 주기는 15분 이상 권장
- Eclass HTML 구조: 크롤링 코드의 CSS 셀렉터는 실제 Eclass 구조 분석 후 수정이 필요합니다 (
# TODO주석 참고) .env파일은 절대 Git에 커밋하지 마세요