golang实时加密货币价格监控终端应用插件库cryptgo的使用

Golang实时加密货币价格监控终端应用插件库cryptgo的使用

cryptgo简介

Cryptgo是一个基于TUI(终端用户界面)的应用程序,完全用Go编写,用于实时监控和观察加密货币价格!

logo

安装方法

使用Go安装

go get -u github.com/Gituser143/cryptgo

使用Docker安装

运行镜像

设置VERSION为特定版本以获得稳定构建。省略VERSION将使用最新稳定版本,或将版本设置为main将提供最新的(开发中)版本。

# 拉取镜像
make docker-pull

# 拉取特定版本的镜像
VERSION=v1.1.1 make docker-pull

# 运行镜像
make docker-run

# 运行特定版本的镜像
VERSION=v1.1.1 make docker-run

# 使用portfolio命令运行镜像
ARG=portfolio make docker-run

# 使用help命令运行镜像
ARG=help make docker-run

可选地,可以创建一个别名以便于使用:

alias cryptgo='docker run -u $(id -u):$(id -g) -v "$HOME:/home/appuser/" --rm -it bhargavsnv/cryptgo'

然后使用:

cryptgo [flags]
# 或
cryptgo [command]

本地构建镜像

# 克隆仓库
git clone https://github.com/Gituser143/cryptgo

# 进入仓库目录
cd cryptgo

# 构建镜像
make docker-build

# 运行镜像
make docker-run

从源码安装

构建需要安装Go

# 克隆仓库
git clone https://github.com/Gituser143/cryptgo

# 进入仓库目录
cd cryptgo

# 构建可执行文件
make build

Make命令

# 查看所有make目标
make help

cryptgo功能

Cryptgo帮助您从终端查看加密货币价值、详细信息并跟踪您的加密投资组合!

它利用CoinCap.ioCoinGecko提供的API来提供所需详细信息。

主页面

main-page

  • 顶部显示市值排名前3的货币及其图表
  • 提供包含其他货币相关信息的表格
  • 允许您通过将货币添加到收藏表来跟踪您喜欢的货币
  • 可以详细检查从货币表或收藏中选择的货币

键盘快捷键

?可查看键盘快捷键。这将显示帮助提示。

  • 退出: q<C-c>
  • 表格导航
    • k<Up>: 上移
    • j<Down>: 下移
    • <C-u>: 半页上移
    • <C-d>: 半页下移
    • <C-b>: 整页上移
    • <C-f>: 整页下移
    • gg<Home>: 跳转到顶部
    • G<End>: 跳转到底部
    • f: 聚焦收藏表
    • F: 聚焦间隔表
  • 搜索/过滤
    • /: 打开搜索框
    • Esc: 清除过滤文本
  • 排序
    • 使用列号升序排序
    • 使用<F-列号>降序排序
    • 例如: 1在第一列升序排序,F1降序
  • 操作(间隔表)
    • <c>: 从热门列表选择货币
    • <C>: 从完整列表选择货币
    • e: 添加/编辑投资组合中的货币
    • P: 查看投资组合
    • <s>: 收藏,保存到收藏夹
    • <S>: 取消收藏,从收藏夹移除
    • <Enter>: 查看货币信息
    • %: 选择百分比变化持续时间

货币页面

coin-page

  • 货币页面提供特定货币的更深入详细信息
  • 可以从收藏或货币表导航到
  • 价格历史显示在顶部,可以通过底部左侧的图表间隔表查看不同间隔
  • 价格框中流式传输实时价格,详细信息表中描述了其他详细信息

键盘快捷键

?可查看键盘快捷键。这将显示帮助提示。

  • 退出: q<C-c>
  • 表格导航
    • k<Up>: 上移
    • j<Down>: 下移
    • <C-u>: 半页上移
    • <C-d>: 半页下移
    • <C-b>: 整页上移
    • <C-f>: 整页下移
    • gg<Home>: 跳转到顶部
    • G<End>: 跳转到底部
    • f: 聚焦收藏表
    • F: 聚焦间隔表
  • 排序
    • 使用列号升序排序
    • 使用<F-列号>降序排序
    • 例如: 1在第一列升序排序,F1降序
  • 操作(间隔表)
    • <Enter>: 设置间隔
    • <c>: 从热门列表选择货币
    • <C>: 从完整列表选择货币

投资组合页面

portfolio-page

  • Cryptgo允许您通过单独定义的页面跟踪您的加密投资组合
  • 可以使用命令cryptgo portfolio访问此页面

键盘快捷键

  • 退出: q<C-c>
  • 表格导航
    • k<Up>: 上移
    • j<Down>: 下移
    • <C-u>: 半页上移
    • <C-d>: 半页下移
    • <C-b>: 整页上移
    • <C-f>: 整页下移
    • gg<Home>: 跳转到顶部
    • G<End>: 跳转到底部
  • 排序
    • 使用列号升序排序
    • 使用<F-列号>降序排序
    • 例如: 1在第一列升序排序,F1降序
  • 操作
    • c: 从热门列表选择货币
    • C: 从完整列表选择货币
    • e: 添加/编辑投资组合中的货币
    • <Enter>: 查看货币信息

迷你投资组合

portfolio

  • Cryptgo还允许您通过迷你投资组合从其他页面查看您的持仓
  • 可以通过在主页面按e添加/修改/删除货币(将持仓量设置为0以删除)
  • 可以通过主页面或投资组合本身修改持仓。下图显示修改持仓时的编辑框

edit-box

实用工具

货币

货币不必固定为美元$,可以从热门货币表(按c)或完整货币表(按C)选择其他货币。

热门货币表

currency

完整货币表

currency-full

搜索/过滤

可以根据输入子字符串过滤/搜索货币。可以在主页面(按/)调出搜索/过滤框。

search

更改百分比间隔

主页面上的变化百分比也可以修改。可以通过按%查看和选择持续时间列表,这将调出下表。

change-duration

更改图表持续时间

货币页面上历史图表的持续时间是可修改的。要列出可能的持续时间并选择一个,请在货币页面按d。这将调出下表。

history-duration

贡献

欢迎提交Pull Requests和Issues!

请查看issues页面以查看可处理的问题,或者创建一些新问题!

致谢

许多设计理念、实用工具、函数和实践都来自:

一定要看看它们!


更多关于golang实时加密货币价格监控终端应用插件库cryptgo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang实时加密货币价格监控终端应用插件库cryptgo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用cryptgo构建Golang实时加密货币价格监控终端应用

cryptgo是一个用于构建加密货币监控终端应用的Go语言库,它提供了简洁的API来获取实时加密货币价格数据。下面我将介绍如何使用cryptgo创建一个功能完善的加密货币价格监控工具。

安装cryptgo

首先需要安装cryptgo库:

go get github.com/pdepip/go-cryptgo

基本使用示例

package main

import (
	"fmt"
	"time"
	
	"github.com/pdepip/go-cryptgo/cryptgo"
)

func main() {
	// 创建新的Cryptgo客户端
	client := cryptgo.New()
	
	// 设置要监控的加密货币对
	pairs := []string{"BTC-USD", "ETH-USD", "XRP-USD"}
	
	// 设置刷新间隔(秒)
	refreshInterval := 5
	
	// 启动实时价格监控
	for {
		// 清屏(Unix-like系统)
		fmt.Print("\033[H\033[2J")
		
		// 获取并显示价格
		for _, pair := range pairs {
			ticker, err := client.GetTicker(pair)
			if err != nil {
				fmt.Printf("Error fetching %s: %v\n", pair, err)
				continue
			}
			
			fmt.Printf("%-8s: $%-10.2f 24h Change: %-6.2f%%\n", 
				pair, 
				ticker.Price, 
				ticker.PercentChange24h)
		}
		
		// 添加分隔线
		fmt.Println("\n" + time.Now().Format("2006-01-02 15:04:05"))
		fmt.Println("----------------------------")
		
		// 等待下一次刷新
		time.Sleep(time.Duration(refreshInterval) * time.Second)
	}
}

高级功能实现

1. 添加价格警报功能

func setupPriceAlerts(client *cryptgo.Cryptgo) {
	alerts := map[string]float64{
		"BTC-USD": 50000.0,
		"ETH-USD": 3000.0,
	}
	
	go func() {
		for {
			for pair, threshold := range alerts {
				ticker, err := client.GetTicker(pair)
				if err != nil {
					continue
				}
				
				if ticker.Price >= threshold {
					fmt.Printf("\nALERT: %s reached $%.2f!\n", pair, ticker.Price)
					// 这里可以添加声音提醒或其他通知方式
				}
			}
			time.Sleep(30 * time.Second)
		}
	}()
}

2. 多交易所价格比较

func compareExchanges(client *cryptgo.Cryptgo, pair string) {
	exchanges := []string{"binance", "coinbase", "kraken"}
	
	fmt.Printf("\nExchange comparison for %s:\n", pair)
	for _, exchange := range exchanges {
		ticker, err := client.GetExchangeTicker(pair, exchange)
		if err != nil {
			fmt.Printf("%-10s: error\n", exchange)
			continue
		}
		
		fmt.Printf("%-10s: $%-10.2f Volume: $%-15.2f\n", 
			exchange, 
			ticker.Price, 
			ticker.Volume24h)
	}
}

3. 历史价格图表(ASCII)

func showPriceHistory(client *cryptgo.Cryptgo, pair string, hours int) {
	history, err := client.GetHistory(pair, hours)
	if err != nil {
		fmt.Printf("Error getting history for %s: %v\n", pair, err)
		return
	}
	
	fmt.Printf("\nPrice history for %s (last %d hours):\n", pair, hours)
	
	min, max := getMinMax(history.Prices)
	scale := 10.0 // 图表高度
	
	for i := len(history.Prices) - 1; i >= 0; i-- {
		price := history.Prices[i]
		height := int((price - min) / (max - min) * scale)
		
		fmt.Printf("%-8.2f |", price)
		for j := 0; j < height; j++ {
			fmt.Print("#")
		}
		fmt.Println()
	}
}

func getMinMax(prices []float64) (min, max float64) {
	min, max = prices[0], prices[0]
	for _, p := range prices {
		if p < min {
			min = p
		}
		if p > max {
			max = p
		}
	}
	return min, max
}

完整应用示例

package main

import (
	"fmt"
	"time"
	
	"github.com/pdepip/go-cryptgo/cryptgo"
)

func main() {
	client := cryptgo.New()
	pairs := []string{"BTC-USD", "ETH-USD", "SOL-USD"}
	refreshInterval := 5
	
	// 设置价格警报
	setupPriceAlerts(client)
	
	for {
		fmt.Print("\033[H\033[2J") // 清屏
		
		// 显示实时价格
		for _, pair := range pairs {
			ticker, err := client.GetTicker(pair)
			if err != nil {
				fmt.Printf("Error fetching %s: %v\n", pair, err)
				continue
			}
			
			fmt.Printf("%-8s: $%-10.2f 24h Change: %-6.2f%%\n", 
				pair, 
				ticker.Price, 
				ticker.PercentChange24h)
		}
		
		// 显示时间戳
		fmt.Println("\n" + time.Now().Format("2006-01-02 15:04:05"))
		fmt.Println("----------------------------")
		
		// 每30秒显示一次交易所比较
		if time.Now().Second()%30 < 5 {
			compareExchanges(client, "BTC-USD")
		}
		
		// 每分钟显示一次价格历史
		if time.Now().Second() < 5 {
			showPriceHistory(client, "BTC-USD", 24)
		}
		
		time.Sleep(time.Duration(refreshInterval) * time.Second)
	}
}

注意事项

  1. cryptgo可能需要API密钥才能访问某些交易所的数据
  2. 频繁请求可能导致API限制,建议合理设置刷新间隔
  3. 生产环境中应考虑添加错误处理和重试机制
  4. 对于更复杂的可视化,可以考虑集成termui或tview等终端UI库

这个示例展示了cryptgo库的基本用法和一些高级功能实现。你可以根据需要扩展更多功能,如添加更多加密货币对、实现更复杂的警报逻辑或集成到更大的应用中。

回到顶部