Telegram使用外部API获取加密货币价格提醒:从零搭建你的行情监控机器人

本教程将指导你如何结合Telegram Bot与外部加密货币API,如CoinGecko,搭建一个自动化的价格提醒系统。从机器人创建、API选择、Python脚本编写到定时部署,全程详解,让你及时掌握币价变动。

阅读提示建议先浏览小标题,再根据需要深入阅读具体段落。

加密货币市场波动剧烈,及时掌握价格变动对于投资者至关重要。Telegram作为一款支持机器人高效通讯的工具,搭配外部行情API,可以轻松构建一个24小时不间断的价格提醒系统。本文将以CoinGecko免费API为例,手把手教你从零搭建一个Telegram价格监控机器人,实现实时行情推送与阈值告警。

准备工作:创建Telegram Bot并获取Chat ID

在开始编写代码之前,你需要完成以下准备:

  1. 在Telegram中搜索@BotFather,发送/newbot,按照提示输入机器人名称和用户名,即可获得Bot的API Token(形如123456:ABC-DEF...)。
  2. 获取你的个人Chat ID。向刚创建的Bot发送任意消息,然后访问https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中找到chat对象中的id字段,这就是你的Chat ID。
  3. 确保你的电脑已安装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小时工作

为了让你在睡觉时也能收到提醒,需要将脚本部署到服务器或常开设备上。推荐以下几种方式:

  1. VPS(云服务器):使用nohup python script.py &运行,或通过systemd服务托管。例如创建/etc/systemd/system/crypto-bot.service,配置后使用systemctl enable开机自启。
  2. 树莓派或NAS:功耗低,适合家庭环境。
  3. 云函数(如AWS Lambda):结合定时触发器,每隔N分钟执行一次函数,但需要注意无服务器环境的运行时长限制。

如果你不想亲自维护服务,可以考虑使用GitHub Actions的cron job,在云端免费运行脚本,每次运行后发消息即可。具体做法是将脚本作为工作流的一部分,设定schedulecron表达式。

总结

通过本文的步骤,你已经成功搭建了一个Telegram加密货币价格提醒机器人。整个过程利用了Telegram Bot API和免费的CoinGecko外部API,结合简单的Python脚本,实现了轮询价格、阈值判断和自动推送。你可以根据自己的需求扩展监控币种、调整提醒逻辑,甚至接入其他API(如股票、天气等)。现在,让你的Telegram变成实时行情监控中心吧!

FAQ

安装与配置指南

常见问题

如何获取我的Telegram Chat ID?

向你的Bot发送任意消息后,使用浏览器访问 https://api.telegram.org/bot<你的Token>/getUpdates ,在返回的JSON中查找chat->id字段即可。

CoinGecko API有调用次数限制吗?

CoinGecko免费版大约每分钟可调用10-30次,对于个人价格提醒足够。建议将轮询间隔设置为60秒或更长,避免频繁请求。如果你需要更快的更新频率,可以考虑使用WebSocket或付费API。

可以同时监控多种加密货币吗?

当然可以。在脚本的COINS列表中添加对应的币种ID(如bitcoin、ethereum、dogecoin等)即可。CoinGecko支持一次请求传入多个ID,提高效率。