add marks
This commit is contained in:
parent
cb228930d9
commit
606093b1f1
3 changed files with 115 additions and 13 deletions
86
Cargo.lock
generated
86
Cargo.lock
generated
|
@ -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",
|
||||
]
|
||||
|
||||
|
|
|
@ -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"] }
|
||||
|
|
40
src/marks.rs
40
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<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(¶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<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)
|
||||
}
|
||||
|
|
Reference in a new issue