10 个版本 (5 个破坏性更新)

0.6.0 2023年3月6日
0.5.0 2022年12月30日
0.4.0 2021年3月13日
0.3.0 2021年3月8日
0.1.4 2021年1月2日

#161 in 金融

每月 26 次下载

MITLGPL-3.0-or-later

125KB
3.5K SLoC

Rust etrade

封装了 etrade API 并实现了所需的 oauth1 流程。

状态存储

该软件包的默认功能包括一个线程安全的内存存储用于 oauth 令牌。有一个可选功能 keychain,它将使用操作系统本地的密钥存储来跟踪令牌信息。

您只需要初始化一次消费者密钥/密钥,临时凭证将由会话管理。

用法

use anyhow::{anyhow, Result};
use etrade::orders::{ListOrdersRequest, OrderStatus, TransactionType};
use etrade::KeychainStore;
use etrade::{self, SortOrder};
use etrade::{accounts, MarketSession, SecurityType};
use accounts::BalanceRequest;

#[tokio::main]
async fn main() -> Result<()> {
  let mode: etrade::Mode = etrade::Mode::Live;
  let session = Arc::new(etrade::Session::new(mode, KeychainStore));
  let accounts = etrade::accounts::Api::new(session.clone());

  let msg1 = "Consumer key:\n";
  io::stderr().write_all(msg1.as_bytes()).await?;

  let mut consumer_token = String::new();
  io::BufReader::new(io::stdin()).read_line(&mut consumer_token).await?;

  let msg2 = "Consumer secret:\n";
  io::stderr().write_all(msg2.as_bytes()).await?;

  let mut consumer_secret = String::new();
  io::BufReader::new(io::stdin()).read_line(&mut consumer_secret).await?;

  session
    .initialize(consumer_token.trim().to_string(), consumer_secret.trim().to_string())
    .await?;
  println!("updated the {} consumer token and key", mode);

  let account_list = accounts.list(etrade::OOB).await?;

  for account in &account_list {
    let balance = accounts
        .balance(
          &account.account_id_key,
          BalanceRequest::default(),
          etrade::OOB,
        )
        .await?;
    println!("{:?}", balance);
  }

  Ok(())
}

依赖项

~40–55MB
~610K SLoC