| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- use std::str::FromStr;
- use rust_decimal::Decimal;
- use rust_decimal_macros::dec;
- use tracing::{error, info};
- use crate::binance_swap::binance_swap_standard;
- use crate::gate_swap::gate_swap_standard;
- use crate::struct_standard::{AggTrades, Trades};
- pub async fn get_gate_ticker_info(symbol: &str, start_at: &str, end_at: &str) -> Vec<Trades> {
- let market_info = gate_swap_standard::standard_market(symbol).await;
- let ct_val = market_info.unwrap().ct_val;
- let mut end_time = end_at.to_string();
- let mut ticker_info_list: Vec<Trades> = vec![];
- loop {
- info!("正在查询 Gate 信息,请稍后!");
- let ticker_info = gate_swap_standard::standard_trades(symbol, start_at, &end_time, Option::from(ct_val)).await;
- match ticker_info {
- Ok(value) => {
- ticker_info_list.extend(value.clone());
- if value.len() >= 1000 {
- end_time = (Decimal::from_str(&value[0].create_time).unwrap() / dec!(1000)).ceil().to_string();
- } else {
- break;
- }
- }
- Err(err) => {
- error!("{}", err.to_string());
- }
- };
- };
- let mut set = std::collections::HashSet::new();
- ticker_info_list.clone().into_iter().filter(|e| set.insert(e.clone())).collect()
- }
- pub async fn get_binance_ticker_info(symbol: &str, start_at: &str, end_at: &str) -> Vec<Trades> {
- let mut agg_ticker_info_list: Vec<AggTrades> = vec![];
- let start_at_d = Decimal::from_str(start_at).unwrap();
- let end_at_d = Decimal::from_str(end_at).unwrap();
- let end_time = if end_at_d - start_at_d > dec!(3600) { (start_at_d + dec!(3600)).to_string() } else { end_at_d.to_string() };
- info!("正在查询 Binance 信息,请稍后!");
- let agg_trades_first = binance_swap_standard::standard_agg_trades(symbol, start_at, &end_time, "").await.unwrap();
- agg_ticker_info_list.extend(agg_trades_first.clone());
- if agg_trades_first.len() >= 1000 {
- let mut trade_id = (Decimal::from_str(&agg_trades_first[agg_trades_first.len() - 1].id.clone()).unwrap() + Decimal::ONE).to_string();
- loop {
- info!("正在查询 Binance 信息,请稍后!");
- let agg_trades_info = binance_swap_standard::standard_agg_trades(symbol, "", "", &trade_id).await;
- match agg_trades_info {
- Ok(value) => {
- agg_ticker_info_list.extend(value.clone());
- if value.len() >= 1000 && value[value.len() - 1].create_time <= end_at.to_string() {
- trade_id = (Decimal::from_str(&value[value.len() - 1].id.clone()).unwrap() + Decimal::ONE).to_string();
- } else {
- break;
- }
- }
- Err(err) => {
- error!("{}", err.to_string());
- }
- }
- }
- }
- agg_ticker_info_list = agg_ticker_info_list.iter().filter(|item| item.create_time <= end_at.to_string()).cloned().collect();
- let mut ticker_info_list: Vec<Trades> = vec![];
- for agg_trades in agg_ticker_info_list.clone() {
- ticker_info_list.push(Trades {
- id: agg_trades.start_id,
- symbol: agg_trades.symbol,
- create_time: agg_trades.create_time,
- size: agg_trades.size,
- price: agg_trades.price,
- })
- // let id_diff = Decimal::from_str(&agg_trades.end_id).unwrap() - Decimal::from_str(&agg_trades.start_id).unwrap();
- // if id_diff > Decimal::ONE {
- // println!("{},{},{},{}", agg_ticker_info_list[agg_ticker_info_list.len() - 1].id, agg_trades.id, agg_trades.start_id, agg_trades.end_id);
- // let trades_info = binance_swap_standard::standard_trades(symbol, &(id_diff + dec!(1)).to_string(), &agg_trades.start_id).await;
- // ticker_info_list.extend(trades_info.unwrap());
- // } else {
- // ticker_info_list.push(Trades {
- // id: agg_trades.start_id,
- // symbol: agg_trades.symbol,
- // create_time: agg_trades.create_time,
- // size: agg_trades.size,
- // price: agg_trades.price,
- // })
- // }
- }
- ticker_info_list
- }
|