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 2022年12月23日

#430 in 神奇豆

MIT许可证

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