racing_scraper/racing/
mod.rs1use chrono::Utc;
2use std::fs;
3use std::thread::sleep;
4use std::time::Duration;
5use crate::common::model::ScrapingError;
6use crate::racing::sports_bet::fetch::{get_event_detail, get_event_list, get_event_srm};
7use crate::racing::sports_bet::models::{EventDetail};
8use crate::racing::sports_bet::utils::{sb_to_event_detail, sbevent_detail_to_event_detail};
9pub mod sports_bet;
10
11pub async fn generate_data() {
12 let events = get_event_list().await.expect("fetch events failed");
13 println!(
14 "number of events returned from event list api: {}",
15 events.len()
16 );
17 let mut count = 0;
18 for event in events {
19 match get_racing_data(&event.id).await {
20 Ok(event_detail) => {
21 if let Err(e) = write_to_file(event_detail) {
22 println!("{:?}", e);
23 } else {
24 count = count + 1;
25 }
26 },
27 Err(e) => {
28 println!("{:?}",e);
29 }
30 }
31 sleep(Duration::from_millis(100));
32
33 }
34 println!("Found valid set for {count} events");
35}
36
37pub async fn get_racing_data(event_id: &u64) -> Result<EventDetail, ScrapingError> {
38 let srm_event_detail_fut = get_event_srm(event_id);
39 let event_detail_fut = get_event_detail(event_id);
40 let sb_event_detail = event_detail_fut.await?;
41 match sb_to_event_detail(&sb_event_detail) {
42 Ok(evt_detail) => Ok(evt_detail),
43 Err(e) => {
44 println!(
45 "Error while building data_set for event id: {} using single api call {:?}",
46 event_id, e
47 );
48 let srm_event_detail = srm_event_detail_fut.await?;
49 let evt_detail = sbevent_detail_to_event_detail(&sb_event_detail, &srm_event_detail)?;
50 Ok(evt_detail)
51 }
52 }
53}
54
55fn write_to_file(event_detail: EventDetail) -> Result<(), ScrapingError>{
56 let path = format!(
57 "{}/{}-{}-{}-{}.json",
58 event_detail.race_type,
59 Utc::now().format("%Y%m%d"),
60 event_detail.race_type,
61 event_detail.meeting_name,
62 event_detail.race_number
63 );
64 fs::create_dir_all(event_detail.race_type.to_string())?;
65 let _ = fs::write(
66 path,
67 serde_json::to_string(&event_detail).unwrap().as_bytes(),
68 )?;
69 Ok(())
70}