13 个版本 (5 个重大更改)

0.6.1 2024 年 8 月 20 日
0.6.0 2024 年 6 月 16 日
0.5.1 2024 年 6 月 12 日
0.4.1 2024 年 6 月 2 日
0.1.3 2023 年 10 月 29 日

#1544网页编程

每月 46 次下载

MIT 许可证

465KB
11K SLoC

快速、简便且可靠的淑园大学 u-saint 客户端

GitHub Badge crates.io docs.rs License


rusaint 是一个基于 Rust 的非官方 u-saint 客户端,可以准确、快速、方便地在各种环境中解析和操作淑园大学 u-saint。

通过实现基于 u-saint 的基础 SAP Web Dynpro 的 Lightspeed 库的最小功能,可以安全地操作和解析 u-saint 内部元素。

  • 无 JS 运行时 — 无需 JS 运行时,自行处理请求和响应,因此可以在所有支持 HTTPS 请求的环境中运行。
  • 快速速度 — 使用编译成本地环境的 Rust,一旦请求完成即可立即执行,从而快速操作和解析 u-saint。
  • 跨平台支持 — 通过 UniFFI 支持 Kotlin、Swift、Python(预计)以及 Node.js 用的 WASM Wrapper(预计),便于在多种平台下使用。
  • 简单的功能定义 — 通过 rusaint 提供的 API,可以轻松定义对 rusaint 不支持的 u-saint 应用程序的解析和支持。

示例

use rusaint::application::course_grades::{CourseGradesApplication, model::CourseType, model::SemesterGrade};
use rusaint::application::USaintClientBuilder;
use rusaint::webdynpro::element::Element;
use rusaint::RusaintError;
use std::sync::Arc;
use rusaint::USaintSession;
use futures::executor::block_on;

// 성적 정보를 출력하는 애플리케이션
fn main() {
    block_on(print_grades());
    /* SemesterGrade { year: 2022, semester: "2 학기", attempted_credits: 17.5, earned_credits: 17.5, pf_earned_credits: 0.5, grade_points_avarage: 4.5, grade_points_sum: 100.0, arithmetic_mean: 100.0, semester_rank: (1, 99), general_rank: (1, 99), academic_probation: false, consult: false, flunked: false }
     */
}

async fn print_grades() -> Result<(), RusaintError> {
    // USaintSession::with_token(id: &str, token: &str) 을 이용하여 비밀번호 없이 SSO 토큰으로 로그인 할 수 있음
    let session = Arc::new(USaintSession::with_password("20211561", "password").await?);
    let mut app = USaintClientBuilder::new().session(session).build_into::<CourseGradesApplication>().await?;
    let grades: Vec<SemesterGrade> = app.semesters(CourseType::Bachelor).await?;
    for grade in grades {
        println!("{:?}", grade);
    }
    Ok(())
}

依赖项

~18–32MB
~600K SLoC