add marks

This commit is contained in:
Mylloon 2023-01-13 18:43:04 +01:00
parent cb228930d9
commit 606093b1f1
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 115 additions and 13 deletions

86
Cargo.lock generated
View file

@ -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",
]

View file

@ -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"] }

View file

@ -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<Html, Box<dyn std::error::Error>> {
) -> Result<reqwest::Client, Box<dyn std::error::Error>> {
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(&params)
.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<Html, Box<dyn std::error::Error>> {
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)
}