add http error detection
This commit is contained in:
parent
806f210c0f
commit
63f5b6dc34
4 changed files with 33 additions and 14 deletions
|
@ -59,12 +59,13 @@ pub async fn info() -> HashMap<usize, Vec<(DateTime<Utc>, i64)>> {
|
||||||
|
|
||||||
/// Get info webpage
|
/// Get info webpage
|
||||||
async fn get_webpage() -> Result<Html, Box<dyn std::error::Error>> {
|
async fn get_webpage() -> Result<Html, Box<dyn std::error::Error>> {
|
||||||
/* let html = reqwest::get("https://informatique.up8.edu/licence-iv/edt").await?.text().await?;
|
let url = "https://informatique.up8.edu/licence-iv/edt";
|
||||||
|
let html = reqwest::get(url).await?.text().await?;
|
||||||
|
|
||||||
Ok(Html::parse_document(&html)) */
|
// Panic on error
|
||||||
|
crate::utils::check_errors(&html, url);
|
||||||
|
|
||||||
let html = include_str!("../target/debug2.html");
|
Ok(Html::parse_document(&html))
|
||||||
Ok(Html::parse_document(html))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Turn a french date to an english one
|
/// Turn a french date to an english one
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
mod ics;
|
mod ics;
|
||||||
mod info;
|
mod info;
|
||||||
mod timetable;
|
mod timetable;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
println!("Fetch the timetable...");
|
||||||
let timetable = timetable::timetable(3, 1, None).await;
|
let timetable = timetable::timetable(3, 1, None).await;
|
||||||
|
|
||||||
|
println!("Fetch informations about the year...");
|
||||||
let info = info::info().await;
|
let info = info::info().await;
|
||||||
|
|
||||||
|
println!("Build the ICS file...");
|
||||||
let builded_timetable = timetable::build(timetable, info);
|
let builded_timetable = timetable::build(timetable, info);
|
||||||
|
|
||||||
ics::export(builded_timetable, "target/debug.ics");
|
ics::export(builded_timetable, "target/debug.ics");
|
||||||
|
|
|
@ -111,7 +111,7 @@ async fn get_webpage(
|
||||||
semester: i8,
|
semester: i8,
|
||||||
letter: Option<char>,
|
letter: Option<char>,
|
||||||
) -> Result<Html, Box<dyn std::error::Error>> {
|
) -> Result<Html, Box<dyn std::error::Error>> {
|
||||||
/* let url = {
|
let url = {
|
||||||
let panic_semester_message = "Unknown semester.";
|
let panic_semester_message = "Unknown semester.";
|
||||||
let panic_letter_message = "Unknown letter.";
|
let panic_letter_message = "Unknown letter.";
|
||||||
|
|
||||||
|
@ -153,14 +153,13 @@ async fn get_webpage(
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get raw html
|
// Get raw html
|
||||||
let html = reqwest::get(url).await?.text().await?;
|
let html = reqwest::get(&url).await?.text().await?;
|
||||||
|
|
||||||
|
// Panic on error
|
||||||
|
crate::utils::check_errors(&html, &url);
|
||||||
|
|
||||||
// Parse document
|
// Parse document
|
||||||
let document = Html::parse_document(&html); */
|
let document = Html::parse_document(&html);
|
||||||
|
|
||||||
println!("Fetch 'L{}{} (s{})'", year, letter.unwrap_or(' '), semester);
|
|
||||||
let html = include_str!("../target/debug.html");
|
|
||||||
let document = Html::parse_document(html);
|
|
||||||
|
|
||||||
Ok(document)
|
Ok(document)
|
||||||
}
|
}
|
||||||
|
@ -242,8 +241,8 @@ pub fn build(timetable: T, dates: D) -> Vec<models::Course> {
|
||||||
let mut semester = Vec::new();
|
let mut semester = Vec::new();
|
||||||
|
|
||||||
// Start date of the back-to-school week
|
// Start date of the back-to-school week
|
||||||
let break_data = dates.get(&timetable.1 .0).unwrap();
|
let datetimes = dates.get(&timetable.1 .0).unwrap();
|
||||||
let before_break = break_data.get(0).unwrap();
|
let before_break = datetimes.get(0).unwrap();
|
||||||
let mut date = before_break.0;
|
let mut date = before_break.0;
|
||||||
let mut rep = before_break.1;
|
let mut rep = before_break.1;
|
||||||
// For each weeks
|
// For each weeks
|
||||||
|
@ -273,7 +272,7 @@ pub fn build(timetable: T, dates: D) -> Vec<models::Course> {
|
||||||
// From friday to monday
|
// From friday to monday
|
||||||
date += Duration::days(2);
|
date += Duration::days(2);
|
||||||
}
|
}
|
||||||
let after_break = break_data.get(1).unwrap();
|
let after_break = datetimes.get(1).unwrap();
|
||||||
date = after_break.0;
|
date = after_break.0;
|
||||||
rep = after_break.1;
|
rep = after_break.1;
|
||||||
}
|
}
|
||||||
|
|
15
src/utils.rs
Normal file
15
src/utils.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/// Panic if an error happened
|
||||||
|
pub fn check_errors(html: &String, loc: &str) {
|
||||||
|
match html {
|
||||||
|
t if t.contains(&err_code(429)) => panic!(
|
||||||
|
"URL: {} • HTTP 429: Slow down - Rate limited (too many access attempts detected)",
|
||||||
|
loc
|
||||||
|
),
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create String error code
|
||||||
|
fn err_code(code: i32) -> String {
|
||||||
|
format!("HTTP Code : {}", code)
|
||||||
|
}
|
Reference in a new issue