在许多场景中,了解频道订阅人数是衡量运营效果的重要指标。虽然Telegram Bot API没有专门的“获取订阅人数”端点,但我们可以通过getChatMemberCount方法轻松实现。本文将从一个机器人的创建开始,逐步讲解如何通过API获取频道订阅人数,并附上完整的Python代码示例,帮助你快速上手。
准备工作:创建机器人并配置频道管理员权限
首先,你需要一个Telegram机器人。如果还没有,请与@BotFather对话,使用/newbot命令创建。创建完成后,你会获得一个API Token。将这个机器人添加到你的目标频道,并设置为管理员,至少需要“添加成员”或“查看成员”权限。通常,管理员权限中“管理频道”或“添加新成员”即可,但为了保险起见,建议只赋予“查看成员”权限,或者赋予全管理员权限以便其他操作。
注意:机器人必须是频道管理员,且频道必须是公共或者机器人可以访问的私有频道(如果是私有频道,机器人必须被添加为成员)。
getChatMemberCount API详解
Telegram Bot API的getChatMemberCount方法用于获取聊天成员数量。对于频道来说,这个数量就是订阅人数。
HTTP请求格式:
POST https://api.telegram.org/bot<token>/getChatMemberCount参数:chat_id(必填)— 频道标识符,可以是频道用户名(如@channelusername)或频道ID(如-1001234567890)。
响应:成功时返回一个JSON对象,包含"ok": true和"result"字段,result是一个整数,表示成员数量。
示例响应:
{"ok":true,"result":12345}需要注意的是,如果是私有频道,必须使用频道ID,且机器人必须在频道内。
Python代码实战:获取频道订阅人数
下面我们使用Python的requests库来实现。首先安装:pip install requests
完整代码如下:
import requests
BOT_TOKEN = "你的机器人TOKEN"
CHAT_ID = "@channelusername" # 或者 -1001234567890
def get_channel_subscriber_count(chat_id):
url = f"https://api.telegram.org/bot/getChatMemberCount"
data = {"chat_id": chat_id}
resp = requests.post(url, data=data)
resp_json = resp.json()
if resp_json.get("ok"):
return resp_json["result"]
else:
raise Exception(f"Error: {resp_json.get('description')}")
if __name__ == "__main__":
try:
count = get_channel_subscriber_count(CHAT_ID)
print(f"频道 当前订阅人数:")
except Exception as e:
print(e)如果你希望使用python-telegram-bot库,可以这样写:
from telegram import Bot
BOT_TOKEN = "你的机器人TOKEN"
CHAT_ID = "@channelusername"
async def get_subscribers():
bot = Bot(token=BOT_TOKEN)
count = await bot.get_chat_member_count(chat_id=CHAT_ID)
print(f"订阅人数:")
# 在事件循环中运行
# import asyncio
# asyncio.run(get_subscribers())注意:python-telegram-bot是异步库,需要Python 3.7+。
常见问题与错误排查
- 机器人不是管理员:如果机器人不是频道管理员,调用
getChatMemberCount会返回403错误,提示“bot is not a member of the channel chat”。请将机器人添加为管理员。 - 私有频道:对于私有频道,机器人必须被添加为成员,且必须使用频道ID(以-100开头),而不是用户名,否则无法获取。
- 频率限制:Telegram API有频率限制,如果频繁调用,可能被限制。建议适当缓存结果,不要每次请求。
- 结果精度:对于超大频道,成员数量可能只是近似值?实际上,
getChatMemberCount返回的是准确的会员计数,但Telegram可能会对超大群组进行限制?一般来说是准确的。
总结
通过本文,你学会了如何使用Telegram Bot API的getChatMemberCount方法获取频道订阅人数。我们详细介绍了权限要求、API参数和Python代码示例。掌握了这些内容,你就可以在自己的机器人中轻松集成频道数据统计功能。
现在,你可以进一步开发,如定时统计并发送报告、制作增长曲线等。