From 606093b1f175b23ebc49426af8eaf2d9aad88f9f Mon Sep 17 00:00:00 2001 From: Mylloon Date: Fri, 13 Jan 2023 18:43:04 +0100 Subject: [PATCH] add marks --- Cargo.lock | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 2 +- src/marks.rs | 40 +++++++++++++++++------- 3 files changed, 115 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c62e353..86a8891 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,6 +93,33 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd" +dependencies = [ + "cookie", + "idna 0.2.3", + "log", + "publicsuffix", + "serde", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -473,6 +500,17 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "idna" version = "0.3.0" @@ -925,6 +963,22 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +dependencies = [ + "idna 0.3.0", + "psl-types", +] + [[package]] name = "quote" version = "1.0.23" @@ -1052,6 +1106,8 @@ checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" dependencies = [ "base64", "bytes", + "cookie", + "cookie_store", "encoding_rs", "futures-core", "futures-util", @@ -1068,6 +1124,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "proc-macro-hack", "serde", "serde_json", "serde_urlencoded", @@ -1392,6 +1449,33 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +dependencies = [ + "itoa 1.0.5", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -1537,7 +1621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", - "idna", + "idna 0.3.0", "percent-encoding", ] diff --git a/Cargo.toml b/Cargo.toml index 18025a7..58a5258 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ publish = false directories = "4.0.1" toml = "0.5.10" serde = { version = "1.0.152", features = ["derive"] } -reqwest = "0.11" +reqwest = { version = "0.11", features = ["cookies"] } tokio = { version = ">=1.23.1", features = ["full"] } scraper = "0.14" clap = { version = "4.0.32", features = ["derive"] } diff --git a/src/marks.rs b/src/marks.rs index 06b6ef1..c28a6bb 100644 --- a/src/marks.rs +++ b/src/marks.rs @@ -3,25 +3,31 @@ use std::io::Write; pub async fn get_marks(username: String, password: String, user_agent: &str) { // Login - let document = login(username, password, user_agent) - .await - .expect("Can't login"); - - let mut w = std::fs::File::create("temp.html").unwrap(); - write!(&mut w, "{}", document.html()).unwrap(); + let client = login(username, password, user_agent).await.unwrap(); // Marks - // https://scolarite-etudiant.univ-paris8.fr/mondossierweb/#!notesView + let document = load_marks(&client).await.unwrap(); + + // DEBUG - Output to temp.html + let mut f = std::fs::OpenOptions::new() + .write(true) + .open("./temp.html") + .unwrap(); + f.write_all(document.html().as_bytes()).unwrap(); + f.flush().unwrap(); } async fn login( username: String, password: String, user_agent: &str, -) -> Result> { +) -> Result> { let login_url = "https://cas.univ-paris8.fr/cas/login"; - let client = reqwest::Client::builder().user_agent(user_agent).build()?; + let client = reqwest::Client::builder() + .cookie_store(true) + .user_agent(user_agent) + .build()?; let login_page = Html::parse_document(&client.get(login_url).send().await?.text().await?); @@ -54,7 +60,8 @@ async fn login( ("execution", execution), ]; - let html = client + // Login + client .post(login_url) .form(¶ms) .send() @@ -62,7 +69,18 @@ async fn login( .text() .await?; - let document = Html::parse_document(&html); + Ok(client) +} + +async fn load_marks(client: &reqwest::Client) -> Result> { + let html = client + .get("https://scolarite-etudiant.univ-paris8.fr/mondossierweb/#!notesView") + .send() + .await?; + + println!("{:#?}", html); + + let document = Html::parse_document(&html.text().await?); Ok(document) }