使用Telethon批量下载telegram中任意群组/频道文件
- 克隆或下载本项目代码。
- 将
.env.example复制为.env并按下文说明填写。 - 创建并激活 Python 3 虚拟环境(可选,但推荐)。
- 安装依赖 教程。
- 阅读命令行参数的作用 教程,并按示例运行。
# 必填:在 https://my.telegram.org 获取后填写
API_ID=参见下方教程
API_HASH=参见下方教程
# 账号登录方式(手机号与机器人 Token 二选一填写,另一项留空)
PHONE=手机号
BOT_TOKEN=
# 下载配置
SAVE_PATH=下载文件的保存路径
PROXY=可选,形如 user:pass@ip:port 或 ip:port
# 给频道设置显示名,多个用逗号/分号/换行分隔,格式 chat_id:别名
# ALIAS=-100123456:频道A,-100987654:频道B
# 也可以写成多行(需用引号包裹):
# ALIAS="-100123456:频道A
# -100987654:频道B"
ALIAS=-100123456:给指定频道设置显示名
可参考 https://www.jianshu.com/p/3d047c7516cf ,在 https://my.telegram.org 申请后填写到配置中。
基础运行环境:Python 3.8+。
- 安装基础依赖(必需)
pip3 install -r requirements.txt-
如果需要开启代理参数
--proxy,请额外安装python-socks(可按需手动执行pip3 install python-socks)。 -
上传功能需要的附加依赖(可选):
pip3 install -r requirements_upload.txt
# Linux 安装 python-magic
pip3 install python-magic
# Windows 安装 python-magic-bin
pip3 install python-magic-bin==0.4.14- 如果希望更快的下载速度,建议额外安装
cryptg(已列在requirements.txt,若未自动安装请手动执行pip3 install cryptg)。
CLI 已改为子命令模式,先选择操作类型,再填写对应参数:
python main.py [-c .env] [--proxy user:pass@ip:port]
{refresh,hook,download,upload,print,monit} ...
子命令 refresh:刷新缓存,打印所有频道信息
子命令 hook:执行自定义 Hook 功能
子命令 download:
-id 频道ID,多个频道用|或,分隔;支持 https://t.me/xxx/123 链接
-user 指定下载的用户,支持用逗号或|分隔多个用户名/ID,默认下载所有用户
--range 下载范围,默认">0"表示所有消息
--prefix 通配符,文件名前缀
子命令 upload:
-id 频道ID,多个频道用|或,分隔
-path 上传文件路径
-dau 上传完成后是否删除源文件(Y/N),默认N
-at 上传时增加的标签
子命令 print:
-id 频道ID,多个频道用|或,分隔
子命令 monit:
-id 频道ID,多个频道用逗号分隔
-user 仅监控指定用户的消息,支持用逗号或|分隔多个用户,默认所有用户
--prefix 监控时仅下载匹配通配符的文件名前缀
快速开始:
# 复制配置模版并填写 api_id / api_hash 以及 phone 或 bot_token(二选一)
cp .env.example .env
# 安装依赖(建议在虚拟环境内执行)
pip3 install -r requirements.txt
# 首次运行会引导输入验证码或二步验证密码
python main.py refresh刷新缓存并打印所有频道信息:
python main.py refresh下载两个频道的全部文件,并只保留文件名前缀为 report 的文件:
python main.py download -id 123456789|https://t.me/example_channel/1 --prefix "report*"仅下载指定用户的消息范围,示例中下载 @someone 在频道 1111 里的消息 10~200:
python main.py download -id 1111 -user @someone,@another --range 10..200上传本地目录的文件到多个频道并在完成后删除源文件:
python main.py upload -id 1111,2222 -path /data/files -dau Y -at "#归档"实时监控频道并在新文件出现时触发下载,并只关注指定用户的文件(多个用户用逗号分隔):
python main.py monit -id 3333,4444 -user @someone,@another --prefix "*.pdf"- 如果你想下载速度更快,
pip3 install cryptg - 如果使用上传功能,需要安装额外的依赖。Linux系统安装
python-magic、Windows系统安装python-magic-bin==0.4.14 - 本程序仅支持python3
AttributeError: module 'socks' has no attribute 'SOCKS5',请确认安装了PySocksServer sent a very new message with ID xxxxxxxxxxxxxxxxxxx, ignoring,如果你确定没有在多个设备上使用同一个session文件,那么这个问题是由于当前设备时间与telegram服务器时间差距过大(大于30s)。 解决办法:服务器时间戳是xxxxxxxxxxxxxxxxxxx >> 32,请将本地时间戳修改到与服务器时间戳相差30s以内Could not find the input entity for XXXXXXX,请先刷新缓存