加密货币市场波动剧烈,及时掌握价格变动对于投资者至关重要。Telegram作为一款支持机器人高效通讯的工具,搭配外部行情API,可以轻松构建一个24小时不间断的价格提醒系统。本文将以CoinGecko免费API为例,手把手教你从零搭建一个Telegram价格监控机器人,实现实时行情推送与阈值告警。
准备工作:创建Telegram Bot并获取Chat ID
在开始编写代码之前,你需要完成以下准备:
- 在Telegram中搜索@BotFather,发送
/newbot,按照提示输入机器人名称和用户名,即可获得Bot的API Token(形如123456:ABC-DEF...)。 - 获取你的个人Chat ID。向刚创建的Bot发送任意消息,然后访问
https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中找到chat对象中的id字段,这就是你的Chat ID。 - 确保你的电脑已安装Python 3.6+,并安装
requests库:pip install requests。
选择合适的外部加密货币API
选择一个稳定、免费且无需过多配置的API能极大简化开发。这里推荐CoinGecko:
- 完全免费,无需API Key。
- 支持数十种法币计价(USD、CNY、EUR等)。
- 接口简单,实时性足够个人使用。
- 示例请求:
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd,返回{"bitcoin":{"usd": 65432.1}}。
除了CoinGecko,CoinMarketCap与币安API也支持加密行情,但通常需要申请API Key或有频率限制。对于个人提醒用途,CoinGecko是性价比最高的选择。
编写Python脚本:获取价格并发送Telegram消息
下面是一个功能完整的示例脚本,实现了指定币种的实时价格获取与Telegram推送:
import requests
import time
# 配置
BOT_TOKEN = "你的Bot Token"
CHAT_ID = "你的Chat ID"
COINS = ["bitcoin", "ethereum"] # 监控的币种ID
CURRENCY = "usd" # 计价货币
INTERVAL = 60 # 轮询间隔(秒)
# 阈值提醒(可选,设置为None则每次推送)
THRESHOLDS = {
"bitcoin": 70000, # 当BTC价格超过此值时提醒
"ethereum": 4000
}
def get_price(coin_id):
url = f"https://api.coingecko.com/api/v3/simple/price?ids=&vs_currencies="
response = requests.get(url, timeout=10)
data = response.json()
return data[coin_id][CURRENCY]
def send_telegram_message(text):
url = f"https://api.telegram.org/bot/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": text
}
requests.post(url, json=payload, timeout=10)
def check_threshold(coin_id, price):
if coin_id in THRESHOLDS:
return price > THRESHOLDS[coin_id]
return False
def main():
while True:
for coin in COINS:
try:
price = get_price(coin)
message = f"💹 {coin.upper()} 当前价格: ${price:,.2f}"
if check_threshold(coin, price) or coin not in THRESHOLDS:
send_telegram_message(message)
except Exception as e:
print(f"获取价格失败: ")
time.sleep(INTERVAL)
if __name__ == "__main__":
main()
优化:为提醒添加更多智能功能
上述脚本可以正常运行,但实际使用中你还可以进行以下优化:
- 设置涨跌幅提醒:通过访问历史价格API,计算24小时涨跌,并在触发条件时推送。
- 支持多币种自定义别名:比如监控“大饼”时映射到
bitcoin。 - 避免重复推送:记录上次价格,仅当价格变动的绝对值超过百分比才推送,减少噪音。
- 缓存API响应:如果有多个币种,可使用
ids=bitcoin,ethereum一次请求全部价格,而不是循环请求,提高效率。
优化后的核心代码片段如下:
# 一次请求多个币种
response = requests.get(
f"https://api.coingecko.com/api/v3/simple/price?ids={','.join(COINS)}&vs_currencies="
)
prices = response.json()
for coin_id, price_info in prices.items():
price = price_info[CURRENCY]
# 处理提醒逻辑...
部署与定时运行:让机器人7x24小时工作
为了让你在睡觉时也能收到提醒,需要将脚本部署到服务器或常开设备上。推荐以下几种方式:
- VPS(云服务器):使用
nohup python script.py &运行,或通过systemd服务托管。例如创建/etc/systemd/system/crypto-bot.service,配置后使用systemctl enable开机自启。 - 树莓派或NAS:功耗低,适合家庭环境。
- 云函数(如AWS Lambda):结合定时触发器,每隔N分钟执行一次函数,但需要注意无服务器环境的运行时长限制。
如果你不想亲自维护服务,可以考虑使用GitHub Actions的cron job,在云端免费运行脚本,每次运行后发消息即可。具体做法是将脚本作为工作流的一部分,设定schedule为cron表达式。
总结
通过本文的步骤,你已经成功搭建了一个Telegram加密货币价格提醒机器人。整个过程利用了Telegram Bot API和免费的CoinGecko外部API,结合简单的Python脚本,实现了轮询价格、阈值判断和自动推送。你可以根据自己的需求扩展监控币种、调整提醒逻辑,甚至接入其他API(如股票、天气等)。现在,让你的Telegram变成实时行情监控中心吧!