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

如何用Python实现Telegram全公开频道Hashtag搜索?

用Telethon实现Telegram跨公开频道Hashtag搜索

核心结论

你找到的channels.SearchPostsRequest完全对应Telegram新增的全公开频道Hashtag搜索功能,不用纠结,就是它了。

解决offset_peer参数问题

你代码里的问题是offset_peer不能直接传字符串用户名,它需要接收Telethon的Peer实体对象(比如types.InputPeerChannel),或者第一次搜索时用空占位符。具体处理方式:

  • 首次搜索:offset_peer传types.InputPeerEmpty(),同时offset_rate和offset_id设为0,因为还没有分页偏移的起点
  • 后续翻页:用返回结果里的next_offset_peer、next_offset_rate、next_offset_id作为下一次请求的参数,实现分页加载更多内容

修正后的代码示例

from telethon.sync import TelegramClient
from telethon import functions, types

# 替换成你的账号信息
API_ID = 123456
API_HASH = 'your_api_hash_here'
SESSION_NAME = 'my_session'

with TelegramClient(SESSION_NAME, API_ID, API_HASH) as client:
    # 首次搜索:offset_peer用空占位符,offset_rate和offset_id设为0
    result = client(functions.channels.SearchPostsRequest(
        hashtag='你的目标Hashtag',  # 比如'#tech'
        offset_rate=0,
        offset_peer=types.InputPeerEmpty(),
        offset_id=0,
        limit=100  # 每次请求最多返回100条结果
    ))
    
    # 打印结果(可以根据需求遍历处理每条帖子)
    print(result.stringify())
    
    # 翻页示例:如果有下一页,继续请求
    while result.next_offset_id != 0:
        result = client(functions.channels.SearchPostsRequest(
            hashtag='你的目标Hashtag',
            offset_rate=result.next_offset_rate,
            offset_peer=result.next_offset_peer,
            offset_id=result.next_offset_id,
            limit=100
        ))
        print(result.stringify())

注意事项

  • 确保你的Telethon是最新版本,因为这个功能是Telegram近期新增的,旧版本可能不支持该方法
  • 该方法只能搜索公开频道的内容,私有频道、群组的内容无法通过此方式检索
  • 每次请求的limit最大值为100,超过会被自动截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:12