订阅微博并同步至Telegram
实现了什么功能?
订阅某个博主的微博,如果博主有发新微博、编辑、转发微博等动态,则及时将微博最新动态发送到指定的Telegram频道,支持图片和视频备份到Telegram。
实现该功能的初衷
觉得有些博主的文章质量比较高,想要不错过这些博主的微博,又不是一直刷微博,把想看的微博推送到自己的消息渠道。本来之前有好几个小程序/公众号可以订阅微博,后面都不断关闭该功能,于是考虑用Telegram作为信息渠道。
- 微博博文中的表情包会被过替换为文字
粉丝可见
、好友可见
、分组可见
、仅自己可见
等非公开微博
无法被获取到- 推送到Telegram的图片最大5MB,视频最大20MB,超过限制会被压缩
效果预览
快速开始
目录:
下载
git clone git@github.com:derotyoung/weibo-subscribe-public.git
cd weibo-subscribe-public
配置
-
初始化数据库。需要MySQL数据库,新建一个
weibo_user
数据库,执行初始化脚本weibo_user
微博用户配置表,参考阅读如何获取微博数字IDhistory_post
微博推送记录表
-
在表
weibo_user
配置需要订阅的微博用户,可在运行过程中添加订阅,👇示例:
只说明必填字段,其他字段为非必填,含义见注释或者顾名思义即可
user_id
-- 微博用户ID
open_flag
-- 是否开启订阅(1=开启,0=关闭),便于随时停止订阅
sync_update_flag
-- 是否同步微博编辑更新(1=开启,0=关闭),开启后Telegram会同步更新消息,不会针对编辑重新推送消息
max_push
-- 每篇文章最大推送次数(0=不限制) -
修改配置文件application.yml,参考阅读如何创建bot & 获取token
必填 | 配置项 | 代表含义 | 示例 |
---|---|---|---|
✅ | spring.database.url | 数据库地址 | localhost:3306 |
✅ | spring.database.username | 数据库用户名 | root |
✅ | spring.database.password | 数据库密码 | 123456 |
✅ | weibo.subscribe.telegramChatId | 在Telegram申请的bot token | 886947303:AAFGhtD3s5KDJ… |
✅ | weibo.subscribe.telegramBotToken | 在Telegram创建的频道ID | -1003769903788 |
× | weibo.subscribe.concurrentNum | 同时查询的微博的并发数,默认为10,太大会查询失败 | 10 |
× | weibo.subscribe.cyclePeriod | 定时执行周期,单位:秒,系统默认为15(要么注释此项,否则一定要填值) | 15 |
× | weibo.subscribe.proxy | http或者socks代理,推荐socks代理,用于访问Telegram服务器 | socks://127.0.0.1:7890或者http://127.0.0.1:7890 |
运行
上述步骤完成后,打成jar
包运行
- 进入项目根目录
cd weibo-subscribe-public
- 编译成
jar
mvn clean -DskipTests package
-
运行
- Linux
-Xms200M -Xmx200M -Xss1M -XX:MetaspaceSize=85M -XX:MaxMetaspaceSize=85M
nohup java -Xms200M -Xmx200M -Xss1M -XX:MetaspaceSize=85M -XX:MaxMetaspaceSize=85M -jar target/weibo-subscribe-public-1.0.0 &
-
Windows
java -Xms200M -Xmx200M -Xss1M -XX:MetaspaceSize=85M -XX:MaxMetaspaceSize=85M -jar .\target\weibo-subscribe-public-1.0.0.jar
- Linux
-Xms200M -Xmx200M -Xss1M -XX:MetaspaceSize=85M -XX:MaxMetaspaceSize=85M
参考阅读
目录:
获取微博用户ID
Web端在用户主页链接(https://weibo.com/u/2803301701)中能直接获取微博用户ID,如下。移动端同样在`用户主页` -> 右上角···
-> 复制链接
,复制出的链接和Web端的格式一样
Telegram创建BOT & 获取token
🔔需要保证有国际网络环境
-
私聊
@BotFather
发送/newbot
创建一个Telegram Bot -
按照提示发送bot名字,名字中英文都可以
-
输入bot的唯一id,只能是数字、字母、下划线为组合,必须以
bot
结尾,如XZgakYDobot
、bzONCofs_bot
都可以, 下述以WeiboSyncBot
为例 -
然后就可以获得到bot的token(示例:5458704928:AAHBqZFKpu4T8EEGAJFPDT4FNfGqwxoOlGs)
Telegram创建频道/群组 & 添加Bot
🔔需要保证有国际网络环境
区别:频道类似公众号,只有管理员才可以发言;群组类似QQ群,所有加群人都可以一起发言;
选择自己喜欢的类型就可以,一般情况只是追星或者特意关注某个博主,建议选择创建频道;如果是一边关注博主动态,一边有和朋友们一起聊天,可以选择群组。
以 Telegram Web 端为例
- 创建频道
new Channel
- 搜索并添加刚刚创建的机器人进频道
- 设置频道头像以及名字
Channel name
,可以为中文,设置频道描述Description(optional)
可以为空 - 设置频道类型,是公开
Public Channel
还是私密Private Channel
,公开频道可以自定义链接,任何人都可以加入;私密频道无法自定义链接,只能通过生成的连接邀请加入 - 创建最后一步,把Bot添加进频道(第2步无效)并设置为管理员
6. 获取Telegram频道ID
🔔需要保证有国际网络环境
- 取Telegram创建Bot & 获取token中获取的token,访问
https://api.telegram.org/bot+刚才创建bot时申请的token+/getupdates
,直接在浏览器地址栏打开即可,如下 - 访问
https://api.telegram.org/bot+刚才创建bot时申请的token+/getupdates
, 直接在浏览器地址栏打开即可https://api.telegram.org/bot5458704928:AAHBqZFKpu4T8EEGAJFPDT4FNfGqwxoOlGs/getupdates
- 如发现返回结果为空,先把Bot移出频道再重新添加进频道为管理员,再进行步骤2即可,如下。在访问结果里找到
"chat":{"id":-1001385856968, "title":……}
,其中的-1001885177644
就是频道ID