6 个版本
0.1.5 | 2022年1月22日 |
---|---|
0.1.4 | 2022年1月12日 |
0.1.2 | 2021年11月29日 |
0.1.0 | 2020年7月3日 |
11 in #refresh-token
36 个月下载量
31KB
461 行代码
tda-sdk-rs
与 TD Ameritrade API 交互的 SDK。
重要:在开始之前,您需要确保已创建开发应用程序(因此有一个客户端 ID),以及一个有效的刷新令牌。如果您需要帮助完成这些步骤中的任何一个,您应参考以下 API 指南页面
创建客户端并获取新令牌
创建 Client
后,您需要为其提供一个访问令牌。您可以使用数据库或文件系统中的现有令牌,或从 API 获取新的令牌。
use tda_sdk::Client;
let mut client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);
let access_token = client.get_access_token().unwrap();
// We must convert the token response into a token usable by the client.
client.set_access_token(&Some(access_token.into()));
创建客户端并使用旧令牌
use tda_sdk::{AccessToken, Client};
let access_token = AccessToken {
expires_at: 0,
token: "YOUR_TOKEN_STRING".to_string(),
scope: Vec::new(),
};
let client = Client::new("CLIENT_ID", "REFRESH_TOKEN", Some(access_token));
获取所有账户的完整示例
设置令牌后,您可以调用任何 API 方法。您可以在 params 模块中查看所有请求参数。
use tda_sdk::{
Client,
params::GetAccountsParams,
responses::SecuritiesAccount,
};
let mut client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);
let access_token = client.get_access_token().unwrap();
client.set_access_token(&Some(access_token.into()));
let accounts = client.get_accounts(GetAccountsParams::default()).unwrap();
for account in accounts {
match account.securities_account {
SecuritiesAccount::MarginAccount { r#type, account_id, .. } => {
println!("Account ID: {}", account_id);
println!("Account Type: {}", r#type);
}
}
}
令牌结构和过期
此库不处理令牌过期,这取决于用户。但是,AccessToken
结构体提供了一个方便的方法来检测其过期状态。
注意:响应结构 get_access_token()
与客户端期望的令牌结构不同。您需要解析响应。
use tda_sdk::{AccessToken, Client};
let client = Client::new("CLIENT_ID", "REFRESH_TOKEN", None);
let access_token: AccessToken = client.get_access_token().unwrap().into();
if access_token.has_expired() {
panic!("Token has expired!");
}
依赖项
~3.5–5MB
~115K SLoC