8个版本 (4个重大变更)
0.6.0 | 2023年12月7日 |
---|---|
0.5.1 | 2023年3月20日 |
0.4.3 | 2023年2月28日 |
0.4.2 | 2023年1月30日 |
0.1.1 |
|
#430 in 神奇豆
135KB
2K SLoC
crypto-botters
这是一个用于与加密货币交易所API通信的Rust库。
此库
- 是异步的
- 支持WebSocket
- 支持将响应反序列化为用户定义的类型
支持交易所
目前支持以下交易所。
交易所 | 官方API文档 | 此库的示例用法 |
---|---|---|
Binance | API文档 | 示例 |
bitFlyer | API文档 | 示例 |
Bybit | API文档 | 示例 |
Coincheck | API文档 | 示例 |
用法
在示例目录中可以找到20多个示例。
Cargo.toml
[dependencies]
crypto-botters = { version = "0.6", features = ["binance", "bitflyer", "bybit", "coincheck"] }
启用您使用的交易所功能。
示例
HTTP
use std::env;
use crypto_botters::{Client, binance::{BinanceAuth, BinanceHttpUrl, BinanceOption}};
#[tokio::main]
async fn main() {
let key = env::var("BINANCE_API_KEY").expect("no API key found");
let secret = env::var("BINANCE_API_SECRET").expect("no API secret found");
let mut client = Client::new();
client.update_default_option(BinanceOption::Key(key));
client.update_default_option(BinanceOption::Secret(secret));
let dusts: serde_json::Value = client.post_no_body(
"https://api.binance.com/sapi/v1/asset/dust-btc",
[BinanceOption::HttpAuth(BinanceAuth::Sign)],
).await.expect("failed get dusts");
println!("My dust assets(BTC):\n{:?}", dusts["totalTransferBtc"]);
}
上面的代码使用Binance API查询可转换为BNB的资产。
选项
在发出请求时,您将一些选项传递给,例如,post_no_body
函数。在示例中,[BinanceOption::HttpAuth(BinanceAuth::Sign)]
是选项。您通常会传递一个选项数组。
选项用于
- 设置API密钥/密钥
- 启用身份验证
等。
传递的选项类型决定了所使用的交易所。在上面的示例中,库知道请求是针对Binance的,因为传递的选项类型是BinanceOption
。当使用Bybit时,您将传递一个BybitOption
数组。
默认选项
一些选项在所有请求中都是相同的。例如,您可能会为每个请求使用相同的API密钥。对于这些选项,您可以针对 Client
设置 默认选项。默认选项将应用于所有请求。
在上面的示例中,client.update_default_option(BinanceOption::Key(key));
将Binance API密钥设置为默认选项。因此,在 post_no_body()
中传递API密钥选项是不必要的。
响应类型
响应将自动反序列化为指定的类型。在上面的示例中,由于指定了 dusts
的类型,响应类型为 serde_json::Value
。任何实现 DeserializeOwned
的类型都受到支持。
WebSocket
use std::time::Duration;
use log::LevelFilter;
use crypto_botters::{binance::{BinanceOption, BinanceWebSocketUrl}, Client};
#[tokio::main]
async fn main() {
let client = Client::new();
let connection = client.websocket(
"/ws/btcusdt@trade",
|message| println!("{}", message),
[BinanceOption::WebSocketUrl(BinanceWebSocketUrl::Spot443)],
).await.expect("failed to connect websocket");
// receive messages
tokio::time::sleep(Duration::from_secs(10)).await;
}
上述代码打开了一个WebSocket连接,并监视在Binance发生的BTCUSDT交易。
Client::websocket()
方法返回一个 WebSocketConnection
。使用此连接,您可以发送消息、请求重新连接或关闭连接。
日本語
这是一个用于与虚拟货币交易所API通信的Rust库。
特点
- 异步
- 支持WebSocket
- 将响应转换为用户定义的类型
支持的交易所
以下交易所受支持。
交易所名 | 官方API文档 | 本库使用示例 |
---|---|---|
Binance | API文档 | 示例 |
bitFlyer | API文档 | 示例 |
Bybit | API文档 | 示例 |
Coincheck | API文档 | 示例 |
用法
examples 目录 中有20多个示例。
Cargo.toml
[dependencies]
crypto-botters = { version = "0.6", features = ["binance", "bitflyer", "bybit", "coincheck"] }
请启用您想使用的交易所的feature。
示例
HTTP
use std::env;
use crypto_botters::{Client, binance::{BinanceAuth, BinanceHttpUrl, BinanceOption}};
#[tokio::main]
async fn main() {
let key = env::var("BINANCE_API_KEY").expect("no API key found");
let secret = env::var("BINANCE_API_SECRET").expect("no API secret found");
let mut client = Client::new();
client.update_default_option(BinanceOption::Key(key));
client.update_default_option(BinanceOption::Secret(secret));
let dusts: serde_json::Value = client.post_no_body(
"https://api.binance.com/sapi/v1/asset/dust-btc",
[BinanceOption::HttpAuth(BinanceAuth::Sign)],
).await.expect("failed get dusts");
println!("My dust assets(BTC):\n{:?}", dusts["totalTransferBtc"]);
}
此示例中,我们在Binance中获取了可以转换为BNB的资产。
选项
发送请求时,您可以设置选项。在此示例中,[BinanceOption::HttpAuth(BinanceAuth::Sign)]
是选项。选项可以是任何迭代器。在此示例中,我们使用数组。
选项
- 用于指定API密钥或密钥
- 启用认证
等。
指定选项类型以确定使用哪个交易所。在此示例中,我们传递了 BinanceOption
类型,因此将使用Binance的认证算法。传递 BybitOption
类型将使请求被视为对Bybit的请求。
默认选项
也有一些选项在多个请求之间保持不变。例如,您可能会在所有请求中使用相同的API密钥。对于这些选项,您可以将其作为 默认选项 设置到 Client
中。默认选项将应用于使用该 Client
发送的所有请求。您也可以通过传递选项来覆盖每个请求中的选项。
在此示例中,我们通过 client.update_default_option(BinanceOption::Key(key));
将API密钥选项设置为默认选项。因此,在 post_no_body()
中指定API密钥选项是不必要的。
响应类型
响应将自动转换为指定的类型。在此示例中,由于指定了 dusts
的类型,因此响应将自动转换为 serde_json::Value
类型。您可以通过指定实现 DeserializeOwned
的任何类型来实现。
WebSocket
use std::time::Duration;
use log::LevelFilter;
use crypto_botters::{binance::{BinanceOption, BinanceWebSocketUrl}, Client};
#[tokio::main]
async fn main() {
let client = Client::new();
let connection = client.websocket(
"/ws/btcusdt@trade",
|message| println!("{}", message),
[BinanceOption::WebSocketUrl(BinanceWebSocketUrl::Spot443)],
).await.expect("failed to connect websocket");
// receive messages
tokio::time::sleep(Duration::from_secs(10)).await;
}
在此示例中,我们正在实时接收Binance的BTCUSDT交易。
Client::websocket()
方法返回 WebSocketConnection
类型。您可以使用它发送消息、请求重新连接或断开连接。
其他
开发者:@negi_grass
依赖关系
~7–22MB
~352K SLoC