前言
自己telegram
的私人频道上存了一堆杂七杂八的文件,telegram
的官方api
下载又限速+中文搜索实在不忍直视,于是有了把telegram
上的文件丢Google Drive
上的想法,去Github
上面搜了下还真有这类项目,初步试用了两个,暂以此文记录使用体验。
snow922841大佬的
优缺点
优点
- 配置相较于另外一个更加方便,
telegram
的bot
操作相对较为直观。 - 带有自动调用
*clone
(*=r/g/f
)上传的功能。 - 会自动重命名按时间排序文件,解决了我频道里面一堆名字相同文件的痛点。
缺点(其实也不能算缺点,只是个人用着不爽罢了)
- 调用的是官方的
telethon api
,存在限速的情况(对于我这种媒体文件较多的人来说简直难受)。 - 下载文件存在莫名其妙停止的情况,下载音频文件时大概300-400个文件左右就会停止,需要手动停止再开启,有部分人提过
issue
但仍然没有解决。这个算是我较为在意的一点,希望作者能够在之后解决该问题(作者说了他有正式工作,这个只是业余兴趣,所以可能要挺久才能修复的了.教程
其实我觉得作者的教程已经挺详细的了就直接copy
过来了(只是把pip
库安装位置改在了项目目录下)
Telegram 频道/群组 文件下载脚本
脚本需要python3环境,具体安装教程自行搜索。
测试环境 Ubuntu 18.04.5 LTS & Python 3.6.9
1. 前提
从 https://my.telegram.org/apps 获取自己的Telegram API密钥。
下载脚本
git clone https://github.com/snow922841/telegram_channel_downloader.git
安装fclone(可选用gclone/rclone)
wget https://github.com/mawaya/rclone/releases/download/fclone-v0.4.1/fclone-v0.4.1-linux-amd64.zip -O fclone.zip && unzip fclone.zip && mv fclone*/fclone /usr/bin && chmod +x /usr/bin/fclone && fclone version
若需要更改为gclone/rclone,只需要把脚本内的fclone改为gclone/rclone即可
2. 使用
- 进入脚本目录
cd telegram_channel_downloader
- 安装依赖(安装到项目根目录下)
pip3 install -r requirements.txt -t .
修改telegram_channel_downloader.py文件内的 api_id 和 api_hash 为你自己的
修改脚本内的bot_token 、 admin_id等必填配置
鉴于网友需要上传GD,特添加了使用gclone自动上传到团队盘的功能,需要在配置区域设置。具体查看脚本内注释
运行
python3 tg_channel_downloader.py
按照提示输入telegram绑定的手机号获取验证码并输入
配置完成后需要给bot发送 /start 频道的链接 0 才会正式开始运行脚本,否则无法启动 0代表开始下载消息的ID,可以自行修改。
3. 常见问题
- 关于获取admin_id
可以在电报中给@get_id_bot这个bot发消息获取
- 关于上传到OneDrive
在脚本中找到一下参数:drive_id=’’,drive_name=’onedrive’, onedrive 就是你配置rclone的时候填的盘名称, 还有102行的fclone替换为rclone,rclone需要自行安装。
点击查看更新日志
2021-07-29更新
- 添加对私有群组的支持
2020-09-15更新
- 移除下载上传进度条显示。
- 使用异步并发,默认10个任务同时进行。
- 修复异常重试
- 远程添加任务,方便下载多个频道消息。
- 移除redis保存任务
- 增加全部频道、群组新消息监控,请在配置区域自行修改。
2020-09-03更新
- ref超时异常自动重试
2020-09-01更新
- 使用bot启动,并使脚本持久化,
- 优化代码
- 修复一些bug
2020-08-29更新
- 更换telegram的第三方库
- 默认上传到GD,目前未配置不上传,所以需要安装gclone
- 默认过滤贴纸、动态贴纸、gif格式文件
- 优化了下载和上传进度条的显示
- 上传失败后会把消息ID保存在脚本所在的文件夹,方便以后可以手动下载
2020-08-19更新
- 添加自动上传到Googledrive的功能
- 使用redis缓存已经遍历的消息ID
我自己修改的版本
- 更新
Pyrogram
版本以适配大文件下载 - 将
ytdl
更新为yt-dlp
- 修改为
sqlite
模式而非postgresql
本来最开始想改成本地json
,但懒得改sql
请求就算了 - 修改为
async
异步,理论提升性能 -
Telegram
下载文件名修改为时间+文件名
,以解决同名文件下载的问题。 - 更新认证方式,从
urn:ietf:wg:oauth:2.0:oob
更新为localhost
模式。
优点
支持大文件下载,同时相较于老项目更加轻量,使用异步,更好处理同名文件。
缺点
没有测试过yt-dlp
功能(主要是依赖于其软件本身版本更新,所以不想自己去支持了),没有优化代码架构,可读性较低(自己懒)。
教程
至于搭建教程,直接去原项目看README
吧。