3 个不稳定版本
| 0.2.1 | 2019年9月15日 | 
|---|---|
| 0.2.0 | 2019年9月11日 | 
| 0.1.0 | 2019年9月5日 | 
#21 in #scraper
440KB
 3.5K  SLoC
ZJU-JWB 爬虫
服务
#[async_trait]
pub trait JWService {
    type Err;
    async fn login(&self, stu_id: &str, password: &str) -> Result<String, Self::Err>;
    async fn get_course_info(&self, code: &str) -> Result<CourseInfo, Self::Err>;
    async fn get_courses(
        &self,
        stu_id: &str,
        school_year: SchoolYear,
        semester: CourseSemester,
        cookie: &str,
    ) -> Result<Vec<Course>, Self::Err>;
    async fn get_exams(
        &self,
        stu_id: &str,
        school_year: SchoolYear,
        semester: ExamSemester,
        cookie: &str,
    ) -> Result<Vec<Exam>, Self::Err>;
    async fn get_scores(&self, stu_id: &str, cookie: &str) -> Result<Vec<Score>, Self::Err>;
    async fn get_major_scores(
        &self,
        stu_id: &str,
        cookie: &str,
    ) -> Result<Vec<MajorScore>, Self::Err>;
    async fn get_total_credit(&self, stu_id: &str, cookie: &str) -> Result<f32, Self::Err>;
}
JWService 为实现了 interfacer_http::HttpClient 的所有类型实现了。
您可以参考 src/test.rs 以了解所有用例。
客户端
您可以使用此crate的 client 功能,如下所示
zju-jw-scraper = { version = "0.2", features = ["client"] }
然后,您可以使用由 interfacer-http-hyper 提供的默认客户端
use zju_jw_scraper::{client::client, JWService};
#[tokio::test]
async fn test_login() -> Result<(), Box<dyn std::error::Error>> {
    let service = client("http://jwbinfosys.zju.edu.cn".parse()?);
    let cookie = service.login("319000000", "test").await?;
    assert!(!cookie.is_empty());
    Ok(())
}
然而,默认客户端只能处理HTTP请求,如果您想使用其他协议,如HTTPS,则需要其他 Connect。
例如,使用 connector
use hyper_tls::HttpsConnector;
use zju_jw_scraper::{client::client_on, JWService};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let service = client_on("https://jw.zjuqsc.com".parse()?, HttpsConnector::new()?);
    let cookie = service.login("319000000", "test").await?;
    assert!(!cookie.is_empty());
    Ok(())
}
测试
运行基本测试
cargo test
要完全测试此crate,请创建一个配置文件 test-settings.toml,并根据 test-settings.toml.sample 进行填充。然后运行测试
cargo test --all --all-features
作为替代,您可以使用以 TEST_ 为前缀的环境变量来配置测试。
TEST_stu_id=3190000000 cargo test --all --all-features
环境变量始终具有更高的优先级。
依赖项
~10–14MB
~266K SLoC