文档章节

基于 NodeJS + MongoDB 实现微信公众号查看器

tao975
 tao975
发布于 2017/08/16 15:08
字数 1471
阅读 152
收藏 1

微信公众号查看器

需求背景

    平时看公众号的时候,觉得同类型的公众号有很多都是重复的文章,比如平时关注的几个技术类的公众号,发布的文章大多数都有重复的,想对看过的文章能够过滤掉不再重复显示,而且还能够对公众号进行分类管理,按照不同的类型浏览文章。最近刚好在学习NodeJS和MongoDB,所以用NodeJS和MongoDB写了一个查看公众号的程序,可以在一个页面集中浏览所有公众号的文章,同时对文章进行分类,还是大图显示哦

程序展示

源代码

github:https://github.com/tao975/WeChatMPViewer

使用技术

  • Node.js                    //  搭建web服务
  • Express.js                //  基于Node.js的 web 开发框架
  • express-session      //  node实现 session 
  • node-schedule       //  node实现定时任务
  • cheerio                   //  node解析Html
  • Angularjs               //  前端JS MVC框架
  • touchjs                  //  移动端手势类库
  • ng-infinite-scroll   //  angularjs 滚动加载控件
  • moment                //  处理日期类库
  • MongoDB             //  非关系文档型数据库

项目结构

实现功能

    1. 爬公众号文章

    爬公众号有两种方式,一种是直接爬微信官方的文章,另一种是爬搜狗微信收录的公众号和文章。

  • 直接爬微信官方内容

    微信公众号的历史文章的页面一般在微信客户端打开,如果用浏览器打开链接要保证3个参数正确才能正常访问:

    用fidder抓包,公众号历史文章的链接如:

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzIyMjMyMjQxOA==&uin=NTMwMTIwMzYw&key=c969774f949c279b04f6d5084dcc41c47b7adcf46689aa839d41edb7d3eb36a026a3e581d86801b637423c65384b5b578318947f1fa7ead227a79ec4dd5e6181172e35f2a2644483b00c5040f7de30f0

    其中关键的3个参数:

__biz : 'MzIyMjMyMjQxOA==', // 公众号id,base64加密
  uin : 'NTMwMTIwMzYw',  // 固定值
  key : 'c969774f949c279b04f6d5084dcc41c47b7adcf46689aa839d41edb7d3eb36a026a3e581d86801b637423c65384b5b578318947f1fa7ead227a79ec4dd5e6181172e35f2a2644483b00c5040f7de30f0'  // key有时效性,会过期

    最难的是key这个参数,160位的字符串,有时效性,一段时间后会过期,考虑过可能是160位加密算法,也可能是5个32位加密组合,没研究出来,就没继续研究了 。微信内置的浏览器有私有的接口WeixinJSBridge,可能是调用这个接口生成key。

    爬搜狗微信比爬微信容易,但有几个问题也是比较麻烦的:

    1)搜狗微信中的公众号历史文章链接和文章链接也有时效性,会超时,有效时间大概是一天左右,所以不能直接保存公众号历史文章链接用于下次直接爬,采取的策略是每次爬文章,要先搜索这个公众号,然后获取这个公众号的历史文章链接,再访问历史文章链接获取历史文章列表,解析最新的文章,同时把之前保存的文章链接也进行更新,一般只更新这几天的文章,太久以前的文章没必要更新。(采用保存网页链接而不是保存整个网页是因为没这么大的储存,土豪请随意~)

    2)爬取过多会要求输入验证码,考虑下面2种方式

  • 验证码自动识别:采用opencv对验证码图片进行预处理,用tesseract进行文字识别,nodejs也有支持这两个技术的第三方类库,node-opencv 和 node-tesseract因为微信的验证码是重叠的,识别的效果不理想,有时间再研究研究吧。

  • 用户填写验证码:当出现需要输入验证码的时候,提示正在使用程序的用户输入验证码,让用户帮忙填写验证码,让爬虫程序能够正常采集。

    3)微信头像和图片外链不能正常显示:在html中加入标签  <meta name="referrer" content="never"> 可以解决图片不能外链的问题。

    2. 查看文章

  • 浏览文章:按时间显示最新发布的文章,大图显示文章

  • 按公众号分类查看文章:可以在公众号管理功能中自定义公众号分类,在文章列表中按公众号的类别进行分类显示

  • 搜索文章:按关键字搜索文章,实际上调用搜狗微信的搜索接口来爬文章

    3. 管理公众号

  • 搜索公众号:按关键字搜索公众号,可以对自己感兴趣的公众号进行搜索并关注,实际上调用搜狗微信的搜索接口来爬公众号信息

  • 关注/取消关注公众号:在公众号管理功能中可以对公众号进行关注和取消关注的操作,文章列表只显示已关注的公众号的文章,方便对不再感兴趣的公众号进行过滤。同时也保留之前关注过的公众号,方便以后再进行关注。

  • 公众号自定义分类:可以对公众号自定义分类,文章列表会按照公众号类型进行分类浏览

    4. 登录注册

  • 使用帐号密码注册和登录,后面考虑使用微信用户授权,减去繁琐的注册登录操作。

后续完善

    租了AWS免费云服务,服务器在国外,网速太慢了,有需要再租个国内的云服务部署,不过没经过严格测试一上线肯定很多问题。后面考虑把程序发布在公众号中,可以在微信上使用,支持微信用户授权,不使用帐号密码登录的方式。还有好多问题没考虑到的,而且还有好多想法,后面有时间再完善完善吧。

© 著作权归作者所有

tao975
粉丝 1
博文 10
码字总数 34471
作品 0
广州
私信 提问
福利丨MongoDB赎金事件的背后,DBA们该如何反思?

最近MongoDB赎金事件闹得沸沸扬扬,一些技术实践者的观点是,本次安全事件的根源不在MongoDB,可能在于不规范的操作和使用,而一些安全战略师则反驳这是意料之中的事故。对此,你怎么看?DBA...

DBAplus社群
2017/01/12
0
0
Node.js进阶教程第三步:Sails框架-何韬-专题视频课程

Node.js进阶教程第三步:Sails框架—7830人已学习 课程介绍 Sails是基于Express的开发框架,能够构建项目,封装了众多细节,结构清晰,另外还有众多的扩展。 本课程通过项目驱动式来学习sai...

pkutao
2016/10/31
0
0
MongooseJS 4.7.0 发布,MongoDB 连接包

MongooseJS 4.7.0 发布了。MongooseJS 是基于 node.js,使用 JavaScript 编程,连接 MongoDB 数据库的软件包,使MongoDB 的文档数据模型变得优雅起来,方便对 MongoDB 文档型数据库的连接和增...

达尔文
2016/11/24
761
0
JS服务端系列-nodejs+express+ejs+mongodb的数据显示

1.我们下载好mongodb数据库,这个程序我放在nodejs的目录下了, 我的nodejs是安装在d: nodejs目录下,看图可以看到我的存放位置,这个随便放置 2.打开cmd窗口,转到mongodb的bin目录下, 执行...

透笔度
2015/08/05
723
0
Node.js进阶教程第六步:MongoDB-何韬-专题视频课程

Node.js进阶教程第六步:MongoDB—4067人已学习 课程介绍 本课程讲述了MongoDB的安装配置和使用,操作数据库,操作数据集,数据类型和嵌套关联,数据的增删查改,聚合,索引,存储过程,备份还原...

pkutao
2017/01/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
56分钟前
4
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部