手搓RSS订阅微信公众号文章

类别:信息技术 作者:ATScore 发布日期:2023年8月6日

file

阅读微信公众号文章的意义

部分微信公众号文章质量比较高,阅读会启发人往正道上思考,不偏激,不愚昧。学会多方位、多角度地去思考。

为什么使用RSS阅读

RSS是一项信息汇聚技术,它从特定网站抓取信息,并通过RSS阅读器将信息汇总呈现在你的眼前。 减少了你四处登陆,处理广告,寻找信息的时间。

调研情况

获取微信公众号文章有许多思路:

通过sogou的微信搜索接口

sogou接口只能查看前10页搜索结果。通过修改URL中的参数,还能搜索公众号。 该方案优点是sogou看起来比较稳定。但缺点是很难获取最新公众号文章。它在展示公众号时倒是能够显示最新的一篇文章,不太符合查看最近文章的要求。另外,它的最新文章的时延并不小。

通过第三方爬虫方案

github上有许多大神的数据抓取方案。 优点是不用重复造轮子。缺点是很容易被微信反制而失效。陷于各种与微信的斗智斗勇,看似有趣,实则消耗精力。 目前看起来比较好的方案有以下

  • wnma3mz/wechat_articles_spider
  • 1061700625/WeChat_Article 不一一列举。 不少项目中还一并分享了各种抓取思路。本文同样从中获准良多。

fiddle等嗅探工具抓包

通过fiddle等嗅探工具,可以抓包微信与服务器的交互信息。利用截获的地址,即可做RSS。 该方法十分彻底,但缺点是不太好自动处理。 有人提到可以使用anyproxy这个编程化工具,它实现了类似fiddle的功能,允许编程式地使用,方便自动化处理。

以公众号搜索公众号

在编写公众号文章时,可以搜索其他公众号。再通过抓包,同样可以抓到文章地址。

模拟微信

微信程序有公众号功能,如果能模拟微信,就可以得到公众号相关的信息。 比如wechaty。 经测试,wechaty似乎要收费了,而且是微信的反制大户,很不稳定。多作为广告的客户端,自带黑背景,并不推荐。

hook微信

模拟微信的变种,使用真实的微信,通过api来操控它。 上限十分强大,但需要很多前置基础知识。比较费时间。

总结

上述是我调研的结果,我认为用拦截嗅探的方法不适用,因为需要爬虫、反爬、反反爬的知识。 模拟、hook的方法也不好,我认为应该用正规合理的方式去使用微信。 如果微信自己能提供微信的SDK,那就再好不过了,我认为微信应该这样做。 微信应该去阻拦坏人,而不是给所有人增加门槛。

我的方法

再三思索后我认为应该用正规合理的方式去使用微信。 所以我的方案由以下子方案构成

模拟鼠标键盘,打开公众号文章 拦截浏览器,获取公众号文章 生成公众号文章列表 制作RSS源 由ttrss订阅RSS源

模拟鼠标键盘 - RPA

使用pyautogui也可以,但我选择RPA工具。算是学习一下RPA的使用。 顺便一说,我感觉RPA就是个图形化编程工具。但能力还是非常的弱。 过程中遇到inpsect窗口的问题,它是层层pane套下来的,大概有十几层,最后是button。 都能看到msg list了,但不知道为什么窗口刷新后就再也获取不到了。应该是微信有所控制。 所以还是鼠标点击比较实际。

解决远程执行时窗口消失导致RPA报错的问题

通常使用远程桌面来持续运行rpa任务。远程桌面工具我们通常又会使用微软自带mstsc。该工具在断开连接时,会将远程机进行锁定。该工具在最小化时,会让远程机的桌面变成非活动状态。这两种情况都会导致rpa任务运行与窗口有关(在pywinauto文档中介绍了受影响的函数,如click_input,set_focus等)的功能时出错。 pywinauto文档在此 https://pywinauto.readthedocs.io/en/latest/remote_execution.html 解决断开连接的方法,使用tscon切换远程连接,使远程机并不断开连接。 https://support.smartbear.com/testcomplete/docs/testing-with/running/via-rdp/keeping-computer-unlocked.html 即以下代码,并以管理员权限执行。实测有效。

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console1
)

解决远程执行RPA报错的问题

经过几天的测试,上述的命令在多次使用后会导致无法再远程连接,原因未知。 现在采用了某文档中建议的VNC的方法

拦截浏览器 - selenium

selenium是一个浏览器自动化库,可以拿到title和url,这对我来说就足够了。我并不需要全文输出RSS,只需要能跳转就可以。

生成公众号文章列表 - python

拿到title和url后,直接自己生成一个html的文章列表是小CASE,然后启动一个http服务器供抓取就好了。

制作RSS源 - RSSHub

感谢RSSHub作者和社区,这是非常好的工具。 通过RSSHub抓取上述生成的文章列表,RSSHub就会制作出一个RSS源供订阅。 当然RSSHub的抓取代码需要自己写,找内置实例试试,研究一下就会了。 用nodejs实现的,不会nodejs真难受。

订阅RSS - TTRSS

如图,是不是很好呢嘿嘿 file

总体部署

综上,部署共分为五部分: RPA server: 打开公众号 Article server: 生成文章列表 Http server: 文章列表服务器 Rsshub server: 制作rss源 TTRSS server: rss阅读器

希望

希望微信能开放微信操作SDK

写在最后

微信公众号上同样有很多糟粕,非常多的糟粕。要学会自己甄别。毕竟丑帝对我们的渗透无处不在。擦亮双眼,冷静思考,不要自觉的戴上愤怒和自恨的鼻环。