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