研究过微信文章阅读和点赞数的同学都知道,如何获取这两个数字,关键在于获取微信有效的key.这个key的作用时间大概是2小时,而且也有访问频率的限制.访问频率可以用代码控制,大概10秒一次的速度就不会被屏蔽.接下来说如何完全自动获取有效的key.
可能大部分同学都会去搞手机上的key,一来我不知道怎么搞(Java开发不会Android囧),二来也是打算直接在PC端实现这个抓取过程.于是就从研究微信的网页客户端.其实这个key非常好获取,转发一个公众号的文章到网页客户端,从客户端打开就可以在链接里看到这个key.
我实现的思路是:
用chrome浏览器插件模拟点击网页版的客户端里的公众号微信文章,获取到这个链接中的key和uin这两个参数.通过websocket传到本机的Java中(抓取的时候调通过websocket发送消息给chrome,然后返回key和uin).
chrome的插件已经写完了.具体的使用步骤就是,打开你的server端(启动你的websocket server),点击那个微信的图标,插件图标(这一步是连接websocket client 到server).保证文件转发助手里有一条公众号的文章(任意一篇),接下来程序就可以调用了.
Java拿到的key
现在整个抓取过程已经写完了,而且也能用(我的抓取量很小,量的同学请再研究别的办法.).整个抓取过程中我认为另一点比较重要的就是获取微信文章的列表(抓搜狗被屏蔽了...).因为我有公众号的账号密码,所以刚开始直接从公众号的素材管理里直接抓,但是那个不准,一是上面的时间编辑时间而不是发布时间,二是,通过从里面抓取的文章的mid和sn这两个参数获取到的点赞数都是0,阅读数都是2.所以我猜发布前和发布后微信是有两套mid和sn的.多亏了大神,一眼云烟分享了微信查询历史的接口(他抓手机端的包拿到的).反正是http,于是乎我拿来直接用.这样就搞定了.
调用微信查询历史数据接口获取发布文章的地址.biz这个参数每个公众号是固定的,可以从链接中取到.只需key和uin就可以获取到某个公众号过去一周的文章.接口地址:http://mp.weixin.qq.com/mp/getmasssendmsg
拿到文章列表取出biz,mid,sn和idx等参数加上key和uin就可以调接口(http://mp.weixin.qq.com/mp/getappmsgext)获取点赞数和阅读数了.需要注意的是UA用手机的UA
Http调用返回的json,like_num就是点赞数了.
插件下载地址:http://download.csdn.net/detail/owen292/8956043