Telegram电商商品查询Bot重复消息发送问题求助
解决Telegram Bot重复推送同一商品的问题
问题描述
我正在学习Python,开发了一款查询电商商品的Telegram Bot,会推送符合预设价格的商品信息,每5分钟执行一次新搜索。但目前Bot会重复推送同一商品,尝试过schedule、time模块后仍存在这个问题,寻求解决方法。
现有代码
def send_to_telegram(message): apiToken = 'xxxxx' chatID = '-xxxx' bot = telebot.TeleBot(apiToken) if placa and fabricante_1 in marca: bot.send_message( chat_id=chatID, text=f"<b>Modelo:</b> {marca} \n<b>Fabricante:</b> {fabricante_1}\n<b>Preço a vista:</b> R$ {valor_preco_avista} \n<b>Preço a prazo:</b> R$ {valor_preco_prazo} \n<b>Loja:</b> {loja} \n\n<b>Link Produto:</b> {url_completa}", parse_mode='HTML')
解决方案
核心思路是记录已推送过的商品唯一标识,每次推送前检查该商品是否已推送过,未推送才执行发送操作。
1. 选择唯一标识
商品的url_completa(商品链接)是天然的唯一标识,用它来区分不同商品即可;如果商品有官方SKU/唯一ID,用ID替代URL会更可靠(避免URL参数变化导致误判)。
2. 实现推送记录管理
用集合存储已推送的商品标识(集合查询效率远高于列表),如果需要程序重启后保留记录,可将集合持久化到文件中。
修改后的代码示例
# 初始化已推送商品链接集合,程序启动时加载历史记录 sent_items = set() try: with open('sent_items.txt', 'r', encoding='utf-8') as f: # 读取每行链接并加入集合 for line in f: sent_items.add(line.strip()) except FileNotFoundError: # 文件不存在则创建空集合 pass def send_to_telegram(): apiToken = 'xxxxx' chatID = '-xxxx' bot = telebot.TeleBot(apiToken) # 先检查当前商品是否已推送 if url_completa not in sent_items: if placa and fabricante_1 in marca: bot.send_message( chat_id=chatID, text=f"<b>Modelo:</b> {marca} \n<b>Fabricante:</b> {fabricante_1}\n<b>Preço a vista:</b> R$ {valor_preco_avista} \n<b>Preço a prazo:</b> R$ {valor_preco_prazo} \n<b>Loja:</b> {loja} \n\n<b>Link Produto:</b> {url_completa}", parse_mode='HTML' ) # 推送成功后,将链接加入已推送集合 sent_items.add(url_completa) # 写入文件持久化记录 with open('sent_items.txt', 'a', encoding='utf-8') as f: f.write(url_completa + '\n')
补充说明
- 原函数的
message参数未被使用,可直接移除。 - 定时任务逻辑(schedule/time模块)无需改动,只需确保每次搜索到商品后,先执行上述检查再推送。
内容的提问来源于stack exchange,提问作者Renato Moraes
相关产品推荐
相关产品推荐

