add parameters for url and rss file
This commit is contained in:
parent
2e4851ae1c
commit
1db0031f4c
7
Cargo.lock
generated
7
Cargo.lock
generated
@ -524,6 +524,7 @@ name = "lfs_scraper"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clokwerk",
|
"clokwerk",
|
||||||
|
"pico-args",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"rss",
|
"rss",
|
||||||
"time",
|
"time",
|
||||||
@ -687,6 +688,12 @@ version = "2.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
|
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pico-args"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.9"
|
version = "0.2.9"
|
||||||
|
@ -10,3 +10,4 @@ reqwest = { version = "0.11.13", features = ["blocking"] }
|
|||||||
rss = "2"
|
rss = "2"
|
||||||
time = "0.3"
|
time = "0.3"
|
||||||
clokwerk = "0.4"
|
clokwerk = "0.4"
|
||||||
|
pico-args = "0.5"
|
||||||
|
39
src/main.rs
39
src/main.rs
@ -14,19 +14,40 @@ struct RemainingPlace {
|
|||||||
free: usize,
|
free: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
// const URL: &str = "https://www.lfs.sachsen.de/restplatzboerse-5152.html";
|
struct Args {
|
||||||
const URL: &str = "http://127.0.0.1:8080/tip.html";
|
url: String,
|
||||||
|
rss_file: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_args() -> Result<Args, pico_args::Error> {
|
||||||
|
let mut pargs = pico_args::Arguments::from_env();
|
||||||
|
|
||||||
|
let args = Args {
|
||||||
|
url: pargs.value_from_str("--url")?,
|
||||||
|
rss_file: pargs.value_from_str("--rss-file")?,
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(args)
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
let args = match parse_args() {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("Error: {err}");
|
||||||
|
std::process::exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let last_places: Arc<Mutex<Vec<RemainingPlace>>> = Arc::new(Mutex::new(Vec::new()));
|
let last_places: Arc<Mutex<Vec<RemainingPlace>>> = Arc::new(Mutex::new(Vec::new()));
|
||||||
let mut scheduler = Scheduler::new();
|
let mut scheduler = Scheduler::new();
|
||||||
|
|
||||||
scheduler
|
scheduler
|
||||||
.every(1.minutes())
|
.every(1.minutes())
|
||||||
.run(move || match get_current_places() {
|
.run(move || match get_current_places(&args.url) {
|
||||||
Ok(places) => {
|
Ok(places) => {
|
||||||
if should_feed_be_updated(&places, &last_places) {
|
if should_feed_be_updated(&places, &last_places) {
|
||||||
update_rss_file(places);
|
update_rss_file(places, &args.url, &args.rss_file);
|
||||||
println!("Updated feed.");
|
println!("Updated feed.");
|
||||||
} else {
|
} else {
|
||||||
println!("No update.");
|
println!("No update.");
|
||||||
@ -43,8 +64,8 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_current_places() -> Result<Vec<RemainingPlace>, reqwest::Error> {
|
fn get_current_places(url: &str) -> Result<Vec<RemainingPlace>, reqwest::Error> {
|
||||||
let body = reqwest::blocking::get(URL)?.text()?;
|
let body = reqwest::blocking::get(url)?.text()?;
|
||||||
|
|
||||||
let start = body.find("<tbody").unwrap();
|
let start = body.find("<tbody").unwrap();
|
||||||
let end = body.find("</tbody>").unwrap();
|
let end = body.find("</tbody>").unwrap();
|
||||||
@ -74,10 +95,10 @@ fn get_current_places() -> Result<Vec<RemainingPlace>, reqwest::Error> {
|
|||||||
Ok(places)
|
Ok(places)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_rss_file(places: Vec<RemainingPlace>) {
|
fn update_rss_file(places: Vec<RemainingPlace>, url: &str, rss_file: &str) {
|
||||||
let mut channel = ChannelBuilder::default()
|
let mut channel = ChannelBuilder::default()
|
||||||
.title(String::from("LFS Restplatzbörse"))
|
.title(String::from("LFS Restplatzbörse"))
|
||||||
.link(URL.to_string())
|
.link(url.to_string())
|
||||||
.description(String::from(
|
.description(String::from(
|
||||||
"Ein RSS Feed der Restplatzbörse der Landesfeuerwehrschule Sachsen. Nicht offiziell.",
|
"Ein RSS Feed der Restplatzbörse der Landesfeuerwehrschule Sachsen. Nicht offiziell.",
|
||||||
))
|
))
|
||||||
@ -103,7 +124,7 @@ fn update_rss_file(places: Vec<RemainingPlace>) {
|
|||||||
|
|
||||||
channel.set_items(vec![item]);
|
channel.set_items(vec![item]);
|
||||||
|
|
||||||
let output = File::create("rss.txt").unwrap();
|
let output = File::create(rss_file).unwrap();
|
||||||
channel.pretty_write_to(output, ' ' as u8, 2).unwrap();
|
channel.pretty_write_to(output, ' ' as u8, 2).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user