diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..ba055f6 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,4 @@ +https://ark-funds.com/ark-trade-notifications/ +https://etfs.ark-funds.com/hubfs/idt/trades/ARK_Trade_06072023_0800PM_EST_6480efd1294b5.xls + + diff --git a/src/util.rs b/src/util.rs index f358070..07c8c70 100644 --- a/src/util.rs +++ b/src/util.rs @@ -36,13 +36,6 @@ impl Ticker { } } -#[derive(Clone, Copy)] -pub enum Source { - Ark, - ApiIncremental, - ApiFull, -} - pub fn merge_csv_to_parquet(ticker: Ticker) -> Result<(), Box> { let mut dfs = vec![]; for x in glob(&format!("data/csv/{}/*", ticker))?.filter_map(Result::ok) { @@ -61,6 +54,12 @@ pub fn merge_csv_to_parquet(ticker: Ticker) -> Result<(), Box> { Ok(()) } +pub enum Source { + Ark, + ApiIncremental, + ApiFull, +} + pub fn update_parquet(ticker: Ticker, source: Source) -> Result<(), Box> { let mut df = read_parquet(ticker)?; let last_day = df.clone().collect()?.column("date").unwrap().max(); @@ -249,26 +248,7 @@ pub fn get_api(ticker: Ticker, last_day: Option) -> Result Result> { @@ -276,7 +256,15 @@ pub fn get_csv_ark(ticker: Ticker) -> Result> { Ticker::ARKVC => "https://ark-ventures.com/wp-content/uploads/funds-etf-csv/ARK_VENTURE_FUND_HOLDINGS.csv".to_owned(), _ => format!("https://ark-funds.com/wp-content/uploads/funds-etf-csv/ARK_{}_ETF_{}_HOLDINGS.csv", ticker.value(), ticker), }; + get_data_url(url, Reader::Csv) +} +pub enum Reader { + Csv, + Json, +} + +pub fn get_data_url(url: String, reader: Reader) -> Result> { let response = Client::builder() .user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3") .build()?.get(url).send()?; @@ -291,10 +279,19 @@ pub fn get_csv_ark(ticker: Ticker) -> Result> { let data = response.text()?.into_bytes(); - let df = CsvReader::new(Cursor::new(data)) - .has_header(true) - .finish()? - .lazy(); + let df = match reader { + Reader::Csv => CsvReader::new(Cursor::new(data)) + .has_header(true) + .finish()? + .lazy(), + Reader::Json => { + let json_string = String::from_utf8(data)?; + let json: Value = serde_json::from_str(&json_string)?; + JsonReader::new(Cursor::new(json.to_string())) + .finish()? + .lazy() + } + }; Ok(df) }