You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyrogram无法提取超级群组指定主题文件名及日期查询问题

解决Pyrogram提取超级群组指定主题文件及日期范围筛选问题

问题分析

原代码存在以下核心问题:

  • 未通过API参数指定主题,导致获取整个群组的消息而非目标主题内容
  • 文件类型判断逻辑不完善,仅处理视频类文件,未覆盖文档、RAR等类型,且直接访问message.document属性存在空指针风险
  • 依赖消息链接判断所属主题,可靠性低且容易出错

修改后的完整代码

from pyrogram import Client
from datetime import datetime

app = Client(
    name="my_account",  # 建议用自定义名称,而非用户名格式
    api_id=27*******,
    api_hash="b5*******************",
    phone_number="+393*******",
    password="********"  # 无密码可直接删除该参数
)

group_id = -1001867911973
topic_id = 692
msg_file_dict = {}
# 指定日期范围(示例:2023年7月1日至8月1日)
start_date = datetime(2023, 7, 1)
end_date = datetime(2023, 8, 1)

with app:
    # 直接指定topic_id获取对应主题的消息历史
    for message in app.get_chat_history(group_id, topic_id=topic_id, limit=None):
        # 筛选日期范围内的消息
        if start_date <= message.date <= end_date:
            msg_id = message.id
            file_name = None
            
            # 处理视频消息
            if message.video:
                file_name = message.video.file_name or f"VID_{msg_id}_{message.video.file_unique_id}.{message.video.mime_type.split('/')[-1]}"
            # 处理文档消息(包含RAR、普通文档等)
            elif message.document:
                file_name = message.document.file_name or f"DOC_{msg_id}_{message.document.file_unique_id}.{message.document.mime_type.split('/')[-1]}"
            
            if file_name:
                msg_file_dict[msg_id] = file_name
                print(f"消息ID: {msg_id},文件名: {file_name}")

print("\n提取到的消息ID列表:", list(msg_file_dict.keys()))
print("提取到的文件名列表:", list(msg_file_dict.values()))

关键修改说明

  1. 指定主题获取消息:在get_chat_history中添加topic_id=topic_id参数,直接从API层面获取目标主题的消息,无需通过链接判断
  2. 完善文件类型处理:
    • 分别判断message.video和message.document是否存在,避免空指针错误
    • 覆盖文档、RAR等所有document类型文件,自动提取原文件名,若原文件名不存在则生成自定义名称
  3. 日期范围筛选:
    • 导入datetime模块定义起止日期
    • 遍历消息时判断message.date是否在指定范围内,仅处理符合条件的消息
  4. 客户端初始化优化:客户端名称建议用普通字符串,密码参数若无需验证可直接删除,避免冗余写法

额外说明

  • 若需要获取更多历史消息,可调整limit参数(设为None表示获取全部符合条件的消息)
  • 若群组消息量较大,建议添加分页处理或限制limit值,避免内存占用过高

内容的提问来源于stack exchange,提问作者Peter Long

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:43:35