#semester #cli #json #major #command #null #rusaint

app rusaint-cli

CLI for fetching course schedules

4 releases (2 breaking)

0.3.0 Feb 3, 2025
0.2.0 Jan 31, 2025
0.1.1 Jan 28, 2025
0.1.0 Jan 26, 2025

#816 in Parser implementations

Download history 230/week @ 2025-01-25 146/week @ 2025-02-01 9/week @ 2025-02-08 2/week @ 2025-02-15

387 downloads per month

MIT license

30KB
455 lines

rusaint-cli란?

rusaint-cli는 cli 환경에서 rusaint를 사용하여 강의 정보를 가져와 json 파일로 만들어주는 Rust 바이너리입니다.

install rusaint-cli

rusaint-cli 설치를 위해 먼저 Rust 설치가 선행되어야 합니다.

아래 명령어를 터미널에 입력하여 rustup(러스트 버전 관리 툴)을 설치해줍니다.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

rustup의 설치가 완료되었다면 아래 명령어를 터미널에 입력해 rusaint-cli 바이너리를 설치해줍니다.

cargo install rusaint-cli

환경 변수 설정

유세인트에서 강의 정보를 가져오기 위해 유세인트 아이디(학번)와 비밀번호를 환경 변수로 설정해야 합니다.

rusaint-cli를 실행할 위치에 아래와 같은 형식의 .env 파일을 만들어줍니다.

SSO_ID={학번} // 20203123
SSO_PASSWORD={비밀번호} // 1q2w1q2w!

rusaint-cli commands

rusaint-cli 는 유세인트 강의시간표 분류에 대응하는 다양한 command가 존재합니다.

find-by-lecture (과목검색)

  • 검색어에 해당하는 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-by-lecture --year <YEAR> --semester <SEMESTER> --keyword <KEYWORD>

Examples

rusaint-cli find-by-lecture --year 2025 --semester 1 --keyword "대학글쓰기"
[
  {
    "syllabus": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.HAS_PLAN_PAPER_SALV_WD_CE.1",
    "category": "교필",
    "sub_category": null,
    "abeek_info": null,
    "field": null,
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "(외국인을위한)대학글쓰기",
    "division": null,
    "professor": "김지학",
    "department": "교양교육운영팀",
    "time_points": "2.0/2.0",
    "personeel": "0",
    "remaining_seats": "30",
    "schedule_room": "월 11:00-11:50 (전산관 19330-김지학)\n월 12:00-12:50 (전산관 19330-김지학)",
    "target": "전체학년 전체;순수외국인입학생 (대상외수강제한)"
  },
]

find-major (학부전공)

  • 학부전공별 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-major --year <YEAR> --semester <SEMESTER> --college <COLLEGE> --department <DEPARTMENT> --major <MAJOR>

Examples

  • 세부 전공이 있는 경우
rusaint-cli find-major --year 2025 --semester 1 --college "공과대학" --department "건축학부" --major "건축공학전공" 
  • 세부 전공이 없는 경우
rusaint-cli find-major --year 2025 --semester 1 --college "IT대학" --department "컴퓨터학부"
[
  {
    "syllabus": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.HAS_PLAN_PAPER_SALV_WD_CE.1",
    "category": "전선-컴퓨터",
    "sub_category": "복선-컴퓨터",
    "abeek_info": null,
    "field": null,
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "(공통)물리1및실험",
    "division": null,
    "professor": "김남미\n이재구",
    "department": "물리학과",
    "time_points": "4.0/3.0",
    "personeel": "0",
    "remaining_seats": "25",
    "schedule_room": "목 13:00-13:50 (숭덕경상관 02317-김남미)\n목 14:00-14:50 (숭덕경상관 02317-김남미)\n목 15:00-15:50 (조만식기념관 12123-이재구)\n목 16:00-16:50 (조만식기념관 12123-이재구)",
    "target": "전체학년 기계,화공,전기,건축학부,신소재,정통전,전자정보공학부-IT융합,전자정보공학부-전자공학,AI융합,물리,화학,의생명,소프트,컴퓨터"
  },
]

find-required-elective (교양필수)

  • 교양필수 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-required-elective --year <YEAR> --semester <SEMESTER> --course-name <COURSE_NAME>

Examples

rusaint-cli find-required-elective --year 2025 --semester 1 --course-name "대학한국어1"
[
  {
    "syllabus": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.HAS_PLAN_PAPER_SALV_WD_CE.1",
    "category": "교필",
    "sub_category": null,
    "abeek_info": null,
    "field": null,
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "대학한국어1",
    "division": null,
    "professor": "김수은",
    "department": "교양교육운영팀",
    "time_points": "6.0/6.0",
    "personeel": "0",
    "remaining_seats": "0",
    "schedule_room": "월 목 09:00-10:15 (진리관 11115-김수은)\n월 목 10:30-11:45 (진리관 11115-김수은)",
    "target": "전체학년 ;순수외국인입학생 (대상외수강제한)(대상외수강제한)"
  },
]

find-optional-elective (교양선택)

  • 교양선택 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-optional-elective --year <YEAR> --semester <SEMESTER> --course-name <COURSE_NAME>

Examples

rusaint-cli find-optional-elective --year 2025 --semester 1 --course-name "[‘23이후]과학·기술" 
[
  {
    "syllabus": null,
    "category": "교선",
    "sub_category": null,
    "abeek_info": null,
    "field": "[‘23이후]과학·기술\n['20,'21~'22]창의/융합,균형교양-자연과학·공학·기술\n['19]균형교양-자연/공학(자연/과학/기술)\n['16-'18]기초역량(과학정보기술-정보기술)\n['15이전]정보와기술(융합-자연)",
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "4차산업혁명시대의정보보안",
    "division": null,
    "professor": "장의진",
    "department": "SW교육팀",
    "time_points": "3.0/3.0",
    "personeel": "0",
    "remaining_seats": "50",
    "schedule_room": "화 09:00-10:15 (벤처중소기업센터 10309 (이도영강의실)-장의진)",
    "target": "IT융합전공 ,컴퓨터 ,소프트 ,AI융합학부 ,글로벌미디어 ,정보보호(계약), 교류학과"
  },
]

find-chapel (채플)

  • 채플 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-chapel --year <YEAR> --semester <SEMESTER> --chapel-name <CHAPEL_NAME>

Examples

rusaint-cli find-chapel --year 2025 --semester 1 --chapel-name "비전채플"
[
  {
    "syllabus": null,
    "category": "채플",
    "sub_category": null,
    "abeek_info": null,
    "field": null,
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "비전채플",
    "division": null,
    "professor": "김회권",
    "department": "학원선교팀",
    "time_points": "1.0/0.5",
    "personeel": "0",
    "remaining_seats": "980",
    "schedule_room": "화 16:30-17:20 (한경직기념관 08110-김회권)",
    "target": "1학년 내국인학생 전체 수강제한 // 전체학년 수강 신청일: 2학년 이상 전체 단과대학 학생(1학년 외국인유학생 포함) 수강신청 가능"
  },
]

find-education (교직)

  • 교직 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-education --year <YEAR> --semester <SEMESTER>

Examples

rusaint-cli find-education --year 2025 --semester 1
[
  {
    "syllabus": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.HAS_PLAN_PAPER_SALV_WD_CE.1",
    "category": "교직",
    "sub_category": null,
    "abeek_info": null,
    "field": "교직이론영역",
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "교육과정",
    "division": null,
    "professor": "조호제",
    "department": "교직팀",
    "time_points": "2.0/2.0",
    "personeel": "0",
    "remaining_seats": "40",
    "schedule_room": "금 16:00-16:50 (진리관 11407-조호제)\n금 17:00-17:50 (진리관 11407-조호제)",
    "target": "순수외국인입학생 제한"
  },
]

find-connected-major (연계전공)

  • 연계전공 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-connected-major --year <YEAR> --semester <SEMESTER> --major-name <MAJOR_NAME>

Examples

rusaint-cli find-connected-major --year 2025 --semester 1 --major-name "융합창업연계" 
[
  {
    "syllabus": null,
    "category": "교선",
    "sub_category": "연계2-융합창업",
    "abeek_info": null,
    "field": "[‘23이후]자기개발·진로탐색\n['20,'21~'22]공동체/리더십,숭실품성-인성과리더십\n['19]숭실품성-인성과리더십\n['16-'18]숭실품성(리더십-리더십이론및실천)\n['15이전]인성과리더쉽(핵심-창의)",
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "실전SNS마케팅과실무",
    "division": null,
    "professor": "오현석",
    "department": "창업교육·지원팀",
    "time_points": "3.0/3.0",
    "personeel": "0",
    "remaining_seats": "50",
    "schedule_room": "금 15:00-16:15 (조만식기념관 12406-오현석)\n금 16:30-17:45 (조만식기념관 12406-오현석)",
    "target": "전체"
  },
]

find-united-major (융합전공)

  • 융합전공 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-united-major --year <YEAR> --semester <SEMESTER> --major-name <MAJOR_NAME>

Examples

rusaint-cli find-united-major --year 2025 --semester 1 --major-name "빅데이터융합"
[
  {
    "syllabus": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.HAS_PLAN_PAPER_SALV_WD_CE.1",
    "category": "전필-소프트",
    "sub_category": "복선-소프트/융선-빅데이터융합",
    "abeek_info": "공학주제-소프트공인증/인필-소프트공인증",
    "field": null,
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "데이터베이스",
    "division": null,
    "professor": "이상호",
    "department": "소프트웨어학부",
    "time_points": "3.0/3.0",
    "personeel": "0",
    "remaining_seats": "50",
    "schedule_room": "월 수 09:00-10:15 (정보과학관 21303-이상호)",
    "target": "3학년 소프트"
  },
]

find-recognized-other-major (타전공인정과목)

  • 타전공인정과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-recognized-other-major --year <YEAR> --semester <SEMESTER> --college <COLLEGE> --department <DEPARTMENT> --major <MAJOR>

Examples

  • 세부 전공이 있는 경우
rusaint-cli find-recognized-other-major --year 2025 --semester 1 --college "공과대학" --department "건축학부" --major "건축공학전공"
  • 세부 전공이 없는 경우
rusaint-cli find-recognized-other-major --year 2025 --semester 1 --college "IT대학" --department "컴퓨터학부"
[
  {
    "syllabus": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.HAS_PLAN_PAPER_SALV_WD_CE.1",
    "category": "전선-컴퓨터",
    "sub_category": null,
    "abeek_info": null,
    "field": null,
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "디지털공학",
    "division": null,
    "professor": "차형태",
    "department": "전자정보공학부 전자공학전공",
    "time_points": "3.0/3.0",
    "personeel": "0",
    "remaining_seats": "40",
    "schedule_room": "화 13:30-14:45 (형남공학관 05104 (김낙경강의실)-차형태)\n목 13:30-14:45 (형남공학관 05104 (김낙경강의실)-차형태)",
    "target": "2학년 전자공학전공(IT융합 수강제한)"
  },
]

find-cyber (숭실사이버대)

  • 숭실사이버대 과목 정보를 가져와 json 파일로 추출합니다.

Usage

rusaint-cli find-cyber --year <YEAR> --semester <SEMESTER>

Examples

rusaint-cli find-cyber --year 2025 --semester 1
[
  {
    "syllabus": null,
    "category": "교선",
    "sub_category": null,
    "abeek_info": null,
    "field": "숭실사이버대과목\n[‘23이후]자기개발·진로탐색\n['20,'21~'22]공동체/리더십,숭실품성-인성과리더십\n['19]숭실품성-인성과리더십\n['16-'18]균형교양(사회과학-문화및문명)\n['15이전]생활과건강(실용-생활)",
    "code": "SALV_WD_TABLE.ID_DE0D9128A4327646C94670E2A892C99C:VIEW_TABLE.SE_SHORT_SALV_WD_CE.1",
    "name": "식품과건강(숭실사이버대)",
    "division": null,
    "professor": "",
    "department": "학사팀",
    "time_points": "3.0/3.0",
    "personeel": "0",
    "remaining_seats": "200",
    "schedule_room": "",
    "target": "전체"
  },
]

Dependencies

~15–30MB
~551K SLoC