Skip to content

Commit

Permalink
feat: Add returning of flight data
Browse files Browse the repository at this point in the history
  • Loading branch information
zachary-cauchi committed Dec 30, 2024
1 parent 608076e commit 68bee59
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 16 deletions.
49 changes: 38 additions & 11 deletions src/data_providers/flightradar24_provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ use chrono::{DateTime, NaiveDateTime, NaiveTime, Utc};
use reqwest::blocking::Client;
use scraper::{Html, Selector};

use crate::models::{
flight_geodata::FlightGeodata,
result::{GTError, GTResult},
use crate::{
models::{
flight_geodata::FlightGeodata,
result::{GTError, GTResult},
},
parsers::json_parser::{FlightRadar24JsonParser, JsonParser},
};

use super::FlightDataProvider;
Expand All @@ -16,6 +19,7 @@ pub struct FlightRadar24ApiProvider {

impl FlightRadar24ApiProvider {
const WEBSITE_URL: &'static str = "https://www.flightradar24.com";
const API_URL: &'static str = "https://api.flightradar24.com/common/v1";

const FLIGHTS_TABLE_SELECTOR: &'static str = "#tbl-datatable tbody";

Expand All @@ -30,7 +34,7 @@ impl FlightRadar24ApiProvider {
Self { flight_code, dod }
}

fn get_flight_id(&self, client: &Client) -> GTResult<String> {
fn get_data_link(&self, client: &Client) -> GTResult<String> {
let flights_response = client
.get(format!(
"{}/data/flights/{}",
Expand Down Expand Up @@ -75,11 +79,34 @@ impl FlightRadar24ApiProvider {
));
};

return Ok(hex.to_string());
let Some(data_timestamp) = playback_btn.attr("data-timestamp") else {
return Err(GTError::HtmlSelection(
"No data-timestamp found in expected location.".to_string(),
));
};

let url = format!(
"{}/flight-playback.json?flightId={}&timestamp={}",
Self::API_URL,
hex,
data_timestamp
);

return Ok(url);
}

fn download_flight_data(&self, client: &Client, flight_id: String) -> GTResult<()> {
Ok(())
fn download_flight_data(
&self,
client: &Client,
flight_data_url: String,
) -> GTResult<FlightGeodata> {
let response = client.get(flight_data_url).send()?.error_for_status()?;
let parsed_json: serde_json::Value = serde_json::from_str(response.text()?.as_str())?;

let parser = FlightRadar24JsonParser {};
let flight_data = parser.try_parse_geodata(parsed_json)?;

Ok(flight_data)
}
}

Expand All @@ -97,12 +124,12 @@ impl FlightDataProvider for FlightRadar24ApiProvider {

println!("Getting flight Id.");

let flight_id_hex = self.get_flight_id(&client)?;
let flight_data_url = self.get_data_link(&client)?;

println!("Found Id: {flight_id_hex}, downloading flight data.");
println!("Obtained url. Downloading data from '{flight_data_url}'.");

let data = self.download_flight_data(&client, flight_id_hex)?;
let data = self.download_flight_data(&client, flight_data_url)?;

Ok(FlightGeodata::new(self.flight_code.clone(), vec![]))
Ok(data)
}
}
4 changes: 0 additions & 4 deletions src/image_geotagger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,6 @@ impl ImageGeotagger {

let timestamp = self.get_image_timestamp(&exif)?;

for field in exif.fields() {
println!("Tag: {}, Value: {field:?}", field.tag);
}

println!("Done.\nGetting new GPS metadata.");
let new_fields = self.flight_data.get_gps_exif_from_datetime(timestamp)?;

Expand Down
2 changes: 1 addition & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ fn run(args: TagArgs) -> GTResult<()> {
let provider = args.try_get_provider()?;
let flight_data = provider.load_data()?;

return Ok(());
println!("Obtained data: {flight_data}");

let output_dir = args.images_dir.join("geotagged");
let mapper = ImageGeotagger::new(output_dir, flight_data);
Expand Down

0 comments on commit 68bee59

Please sign in to comment.