#downloader #cryptocurrency #utils

pikmin

一个可扩展的下载数据获取器,可从交易所API同时获取交易数据。

6个版本

0.1.7 2019年6月1日
0.1.6 2019年3月26日
0.1.4 2019年2月5日

#83 in #downloader

MIT许可证

54KB
1.5K SLoC

Pikmin

一个可扩展的下载数据获取器,可从交易所API同时获取交易数据。

Build Status crates.io Documentation codecov

pikmin是一个加密货币交易所(如BitMex、bitFlyer、Liquid等)的交易(执行)数据下载器。这个库不仅提供了一些预构建的下载数据获取器,还允许用户根据需求构建自定义的下载数据获取器。

预构建的下载数据获取器

目前,这个库有以下下载数据获取器

  • BitMex(指定时间,按时间顺序)
  • bitFlyer(指定id,按时间顺序的逆序)
  • Liquid(指定时间,按时间顺序)

内置的Writer

Writer是交易数据和目标(通常是数据库)之间的处理器。Pikmin有一些内置的Writer

  • MySQL
  • stdout

您可以轻松创建自己的Writer。

示例

一个简单的Liquid下载数据获取器,写入stdout。这个程序创建./qn-progress.txt以记录进度,因此如果您想从起点再次运行,请删除它。

use std::path::PathBuf;
use std::thread;
use std::time::Duration;

use chrono::offset::TimeZone;
use chrono::Utc;

use pikmin::downloader::Downloader;
use pikmin::FileRecorder;
use pikmin::LiquidDownloader;
use pikmin::StdOutWriter;

fn main() {
    // by using thread, you can run multiple downloaders
    let liquid = thread::spawn(move || {
        while {
            // download data from 2019-01-01T01:01:01Z to 2019-01-01T01:03:01Z
            // output the downloaded data to standard out (println!)
            let downloader = LiquidDownloader::new(
                Utc.ymd(2019, 1, 1).and_hms(1, 1, 1),
                Utc.ymd(2019, 1, 1).and_hms(1, 3, 1),
            );

            // Locate progress file to `/tmp/qn-progress.txt`.
            // You can control the starting point of downloading
            // by preparing this file before you run.
            let mut recorder = FileRecorder::new(PathBuf::from("/tmp/qn-progress.txt"));

            // write out to standard out. simple writer for debugging
            let mut writer = StdOutWriter::default();

            println!("start QnDownloader");

            // run!
            match downloader.run(&mut writer, &mut recorder) {
                Ok(_) => {
                    println!("finished");
                    false
                }
                Err(e) => {
                    println!("error: {}", e);
                    println!("retry...");
                    thread::sleep(Duration::from_secs(5));
                    true
                }
            }
        } {}
    });

    match liquid
        .join()
        {
            Ok(_) => println!("finish all"),
            Err(_) => println!("threading error"),
        }
}

其他示例可以在./examples中找到。

未来工作

  • 为其他交易所创建预构建的下载数据获取器
  • 参数化下载数据的方向(按时间顺序或不是)
  • 进度写入器的抽象

依赖关系

~28MB
~592K SLoC