RSS订阅微信公众号--基于 EFB 和 Telegram

要用到微信的网页版,以前苦于微信网页版登录被禁止,一直没有成功搭建。最近微信上线了新的功能,扫码直接传输文件,发现使用了这个功能之后,即可登录微信网页版。
需要用到个人的VPS,模仿 ZMonster 提供的程序和方法。

首先参照 小众软件 ,利用EFB关联Telegram和微信

拉取 EFB 镜像

docker pull royx/docker-efb                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

配置 Telegram Bot 机器人

EFB 目前实现的 Telegram 与 微信 互通的原理是这样的:

Telegram bot > EFB > 微信网页版 > 微信

所以我们先来配置 Telegram bot:

  1. 在 Telegram 里搜索 @ botfather  并和他对话
  2. 对 @botfather 说话,输入 /newbot
  3. 给你的机器人 bot 起个名字
  4. 继续给机器人起用户名,和上面的名字可以相同,但必须以 bot 结尾
  5. 获得机器人 Token,下图红色部分,一会要用到

EFB 简明安装教程:用 Telegram 收发微信 [基于 Docker] 3

设置 bot 隐私权限

bot 可能会接收不了非 “/” 开头的消息,所以需要设置一下,让 bot 接收全部内容:

继续与 @botfather 对话,输入 /setprivacy,选择刚刚创建的机器人,点击 Disable

获得 Telegram ID

再和另外一个机器人 @ get_id_bot 对话,点击 start 即可获得你的 Telegram ID,一串数字(Chat ID)。

至此,Telegram 的配置完成,我们得到两个重要的数字:token、Telegram ID

配置 EFB

这里是最简单的一份配置文件,

master_channel = 'plugins.eh_telegram_master', 'TelegramChannel'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
slave_channels = [('plugins.eh_wechat_slave', 'WeChatChannel')]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
eh_telegram_master = {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    "token": "12345678:QWFPGJLUYarstdheioZXCVBKM",                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    "admins": [13456782],                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    "bing_speech_api": ["xxx", "xxx"],                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    "baidu_speech_api": {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
        "app_id": 0,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
        "api_key": "xxx",                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
        "secret_key": "xxx"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
    }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

保存在文件夹中,例如/root/efb/config.py ,注意把上面 token以及 admins 冒号后面的部分替换成刚刚获得的 token 和 Chat ID。

即:下面的红色部分:

“token”: “12345678:QWFPGJLUYarstdheioZXCVBKM”,
“admins”: [13456782],

**注意 **xxx 部分可以自己申请,也可以参考 官方提供 的内容。

再新建一个 tgdata.db 文件:

touch tgdata.db                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

至此,EFB 的配置完成,我们得到两个文件: config.py、tgdata.db,在这里我们举例将这两个文件保存在 /root/efb/config.py 和 /root/efb/tgdata.db 这两个位置。

通过 Docker 运行 EFB

docker run -d --restart=always --name=ehforwarderbot -v /root/efb/config.py:/opt/ehForwarderBot/config.py -v /root/efb/tgdata.db:/opt/ehForwarderBot/plugins/eh_telegram_master/tgdata.db royx/docker-efb                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

所有安装、配置、运行已完成。

登录微信

docker logs ehforwarderbot                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

在屏幕上,你会看到一个二维码,用微信扫描,登录,大功告成。

绑定公众号

首先在 Telegram 中创建一个新的群组,比如“微信.公众号”,然后将你的机器人邀请进来。根创建的bot对话:
/link 晚点LatePost
EFB 会自动帮你搜索微信联系人,并显示搜索结果,点击你需要的联系人名:

EFB 简明安装教程:用 Telegram 收发微信 [基于 Docker] 4

再点击 Link,此时 Telegram 会弹出联系人选单,选择刚刚创建的群组,即完成了微信联系人与 Telegram 群组的绑定。

EFB 简明安装教程:用 Telegram 收发微信 [基于 Docker] 5

现在已经这个公众号所发布的文章不光会发送打bot上,也会转发到这个群组,重复操作,可以绑定多个公众号。

安装 Huginn

docker安装非常方便:
docker run -it -p 3000:3000 -v /root/huginn/mysql-data:/var/lib/mysql huginn/huginn
根据服务器不同,搭建时间可能略长,多等一会。
这里最好做好域名的设置,因为有些客户端不支持80以外的端口。
访问域名,认的用户名为admin,密码为password,登录。
在Scenarios选择导入,导入ZMonster编写的配置文件,每个公众号都用一个特定的配置。

efb_scenario_template.json

推荐使用ZMonster大神的 项目 生成,安装之后,运行
zs-rss gen-wx-scenario -n name t -i postlate -o postlate.json
其中name是自定义的公众号名称,postlate是设定的id,体现在链接里,postlate.json是定义的配置名称,运行后将会在运行目录下生成postlate.json。
创建好 Huginn Scenario 后,点击进入“微信公众号 Webhooks”这个 Agent,获取 webhooks 链接,比如:https://myhuginn.com/users/1/web_requests/318/4SXo3X2T2X7HCDjv

创建数据库

zs-rss create-db
这条命令会在 $HOME/.zs/data 目录下新建一个数据文件 rss.db,注意给予写权限。
在 $HOME/.zs/config 目录下新建配置文件 rss.json,写入刚才获得的 webhooks 链接,如
{ "huginn_webhooks": { "default": "https://myhuginn.com/users/1/web_requests/372/d742b76e", "晚点LatePost": "https://myhuginn.com/users/1/web_requests/372/4SXo3X2T2X7HCDjv" } }
这个配置的意思是,公众号“晚点LatePost”的更新发送到一个 webhooks,其他的发送到另外的 webhooks。如果每个公众号都要输出一个 RSS,那么就需要为每个公众号都设置一个 webhooks 链接;如果有多个公众号想要合并输出一个 RSS,那么可以不设置 webhooks 而使用 default 对应的 webhooks。

定时更新

7,17,27,37,47,57 * * * * zs-rss fetch-wx-articles -n 微信.公众号 >> log.txt */10 * * * * zs-rss send-wx-articles >> log.txt
具体的时间频率可以自己调整。
其中第一条定时任务需要 Telegram 的授权认证,具体来说是需要在 $HOME/.zs/config/telegram.json 中有如下内容
{ "api_id": "561071", "api_hash": "22691769c5decd501fd49d96ecff58e3", "session": "AUTHENTICATION SESSION CODE" }
其中 “api_id” 和 “api_hash” 可以在 https://my.telegram.org/ 上获取,而 session 的值会在第一次运行时生成并自动写入到上面的配置文件里。
转到电报页面之后,新建app,填好各项之后,即可获得。
订阅的链接在Huginn面板中,可以放到rss里。
在arm64的机器上可以用akyakya/efb-v2和zhorvath83/huginn来代替,用法一样,部署文档里里写的很清楚。