[−][src]Crate zju_jw_scraper
ZJU-JWB scraper
service
#[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>; }
The JWService
is implemented for all types which implements interfacer_http::HttpClient
.
You can refer to src/test.rs
for all use cases.
client
You can use this crate with client
feature, like this:
zju-jw-scraper = { version = "0.2", features = ["client"] }
Then, you can use default client provided by 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(()) }
However, the default client can only handle requests on HTTP, if you want to use other protocol like HTTPS, you need other Connect
.
As the example 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(()) }
test
Run basic tests:
cargo test
To test this crate fully, create a config file test-settings.toml
, and fill it referring to test-settings.toml.sample
. Then run tests:
cargo test --all --all-features
As an alternative, you can configure tests using environment variables with prefix TEST_
.
TEST_stu_id=3190000000 cargo test --all --all-features
Environment variables always have higher priority.
Modules
helper |
Structs
Course | |
CourseIdentifier | match string like: (2017-2018-1)-74188010-0089096-1 |
CourseInfo | |
Exam | |
ExamTime | match string like: 2019年01月13日(08:00-10:00) |
MajorScore | |
ObjectMovedPage | |
SchoolYear | SchoolYear(2017) for "2017-2018" |
Score |
Enums
CourseSemester | semester options for querying courses. |
ExamSemester | semester options for querying exams. |
Traits
JWService |