如何从JSON获取最高收益加密货币?Bash动态挖矿脚本开发问题
搞定动态挖矿币种切换:用jq解析whattomine API的实操方案
嘿,我来帮你解决这个Bash脚本的问题!你已经拿到了whattomine的coins.json数据,接下来用jq提取收益最高的币种其实很简单,我给你两种靠谱的方案,还有完整的脚本示例。
首先得说下这个API的结构:它返回的是一个JSON对象,每个键就是币种名称,对应的值里包含你要的profitability24字段。咱们分两种情况来处理:
方案1:直接取首项(如果API已经按收益排序)
你提到JSON里的首项就是收益最高的币种——如果whattomine确实是按profitability24降序返回的,那直接取第一个键就行,超简单:
# 拉取数据并提取首个币种(收益最高) top_coin=$(curl -s http://whattomine.com/coins.json | jq -r 'keys[0]') echo "当前最赚的币种是:$top_coin"
这里keys[0]是取出JSON对象的第一个键,-r参数让jq返回不带引号的纯文本,方便后续脚本使用。
方案2:手动筛选最高收益(更稳妥)
要是担心哪天API的排序规则变了,咱们就手动遍历所有币种,找出profitability24最大的那个,这样更可靠:
# 筛选出profitability24最高的币种 top_coin=$(curl -s http://whattomine.com/coins.json | jq -r 'to_entries | sort_by(.value.profitability24) | last | .key') echo "当前收益最高的币种是:$top_coin"
我给你拆解开这个jq命令的逻辑:
to_entries:把顶层的JSON对象转换成键值对数组,每个元素是{"key": "币种名", "value": {"profitability24": ...}}这样的结构sort_by(.value.profitability24):按profitability24的值从小到大排序last:取排序后的最后一个元素(也就是收益最高的那个).key:提取这个元素的键,也就是咱们要的币种名称
完整的动态切换脚本
把这些逻辑整合起来,再加上错误检查(比如jq有没有装、API能不能连上),就是一个能用的脚本了:
#!/bin/bash # 先检查jq有没有安装,没有的话提示用户 if ! command -v jq &> /dev/null; then echo "哎,jq工具没装哦!先装一下:Ubuntu/Debian用sudo apt install jq,Mac用brew install jq" exit 1 fi echo "正在拉取最新挖矿收益数据..." # 拉取API数据存到变量里 coin_data=$(curl -s http://whattomine.com/coins.json) # 检查curl有没有成功拿到数据 if [ $? -ne 0 ]; then echo "糟糕,连不上whattomine的API!检查下网络哦" exit 1 fi # 提取收益最高的币种 top_coin=$(echo "$coin_data" | jq -r 'to_entries | sort_by(.value.profitability24) | last | .key') # 检查有没有提取到有效币种 if [ -z "$top_coin" ]; then echo "哎呀,没拿到有效的币种数据,可能API返回格式变了?" exit 1 fi echo "当前收益最高的币种是:*$top_coin*" # 这里就可以加你切换挖矿的逻辑啦,比如停掉当前挖矿进程,启动对应币种的挖矿命令 # 举个例子: # echo "正在切换到$top_coin挖矿..." # pkill your_miner_process_name # /path/to/your/miner --coin $top_coin
小补充
要是你还想同时拿到收益数值,可以把jq命令改成这样:
top_coin_info=$(curl -s http://whattomine.com/coins.json | jq -r 'to_entries | sort_by(.value.profitability24) | last | "\(.key) 的24小时收益:\(.value.profitability24)"') echo "$top_coin_info"
另外,注意别太频繁调用API哦,whattomine可能有访问限制,建议脚本里加个延迟,比如每小时检查一次(加个sleep 3600)。
内容的提问来源于stack exchange,提问作者Justin Tasset
相关产品推荐
相关产品推荐

