微贝复盘

什么是微贝

微贝Logo

微贝是我开发的微博全量备份工具,它是一个 Chrome 浏览器的插件,安装后会自动抓取微博 Wap 版本的页面,然后上传到服务器进行分析,并打包成 Zip 供用户下载阅读。

微贝使用微信扫码登入,通过微信支付收取费用。是一个将用户体系和支付系统都建立在微信上的微博辅助产品,这是因为——用微博的授权可能申请不下来。

微贝界面

微贝复盘

今天晚上做一下微贝这个项目的复盘。

需求

首先,跟微博相关的东西都特别难做,一个这么多年的产品,一家产品经理过剩的公司,一般刚性的和挣钱的需求基本都会被官方做了。所以从这点看,备份这个需求它不太可能是一个高频需求。做这个东西呢,最主要还是满足自己的需要。

本来我一直拖着没有自己做,但毕竟现在微博上被删的东西越来越多,然后你辛辛苦苦写了几万条微博,然后很可能一夜之间就没有了。我们之前一个技术号,费劲心思做了规划,一周时间自然粉丝就做到一千了(头几百和几千是最难的),突然有一天就莫名其妙的就没有了,然后去找微博,然后他们的人说这个你只有走司法司法渠道才能告诉你原因,而我们分享的资料全部就都是技术资料啊,这TM做技术媒体都不安全了。

所以被这事一刺激吧,就做了个微博备份的东西。

数据源

先来说数据源,微博本身是有开放平台的,按理说,直接通过OAuth授权就可以把自己的微博数据全部导出来(比如twitter就可以)。但仔细阅读微博文档会发现,它的接口只提供50条最新内容了🙁

微博接口限制

所以呢,走官方渠道是没有办法了,只能抓取了。当你要做抓取这件事情的时候,一定要去看看这个网站的移动版,因为移动版的数据,通常样式更少,更好抓。

于是我去看了下微博的H5版本,这个版本直接就是用VUE写的,数据全部通过JSON输出,非常的干净,URL也非常有规律,page就是页数。

微博H5版本

但当我把页数改到2000多要看第一条微博的时候,发现它只输出了50页的内容。这是合理的,毕竟H5版是下载加载。

这时候想起微博还有一个WAP版,WAP版的页面和数据是不分离的,全部混在一起,只能写正则来分析了。但好处是,这个版本的数据是全的。

微博WAP版本

然后我们来进行工具选型,因为跨域的问题,做成网站肯定是不行了,我们可以做成客户端、或者做成浏览器插件。

客户端的问题是需要安装,且开发成本高,要么开一个web view给用户登录微博来请求数据、要么自己做模拟登录;但客户端的有点是移动性好,用户有真正掌握数据的感觉。

处于我自己的偏好呢,我当然是选择浏览器插件,并将数据下载成 json,这样我有很多的方式可以重用这些数据。另外一个考虑就是,浏览器插件本质上来讲,只是一个自动化工具,并不存在欺骗服务器获取数据的行为,这是合理又合法的。

另一个方面就是,浏览器插件需要模拟登陆,它和用户的行为是完全一致的,只要频率合理,微博就没有理由封锁,我一个正常用户有天抽疯,要把自己所有的微博从头到尾翻一遍,你总得让我翻对吧。于是就决定做插件了。

但插件也有一些问题。本来按我的规划,这个插件是个免费小工具,你把网页分析完了,就写到本地,全部写完就完事。但我测试了下发现,Chrome文档里的文件写入权限不是给浏览器插件的😇 不能对选定目录进行多文件写入,那就只能选择下载单文件了。我把一个网页分析出来的Json复制了两万份,发现有20多M,浏览器打开起来很慢。

加上爬虫类应用最麻烦的就是目标页面更新,如果分析器写死到插件里边,将来页面已调整,所有插件都废了,Google还被墙了,不能自动更新。于是想想还是放到服务器端去做了。

(后来我发现,其实还是有可能全部做到前端的,现在 js 打 zip 包已经很轻松了… 不过那时候后端已经全部做完了 )

js的zip工具,支持RAM和HDD两种缓存

然后我们还得考虑用户怎么消费备份好的数据。你总不能直接给一个普通用户 json 吧。备选貌似就两个,一个是提供客户端、一个是提供网页。第三个备选是都提供了。

考虑到这个需求有多强这事不确定,我们决定先做成网页版看看。

当然,我最开始的想法是说,做一个VUE的HTML页,然后动态的去加载Json,然后这样的话就可以更流畅的来显示内容,但我发现Chome浏览器它不允许读取本地的文件(什么都不许啊!)。

所以我们选择的方案,就是把用户抓取到的内容给Post到云端,然后由云端进行分析,把写完的数据在云端拼接网页,再Zip成一个包,让用户进行下载。

既然要把数据放到云端,那么我们就需要一个账户体系。很多同学觉得我做微博备份,当然应该用微博的账户体系。图样图森破。你要用微博的用户多半申请不下来好吗 😂

于是我们用了微信扫码登录。这个是直接使用了「方糖出品」的 SSO(我自己做的一套微信SSO方案),用户扫码登录后我们还可以给他/她发消息。

这些都做完了,我想云豆快不够用了,于是给加了一个收费功能,因为正好是用微信的用户体系,所以正好就用微信支付了。微信支付的PHP SDK比较坑爹,这个我稍后单独弄一篇文章来说明。

另外一个角度来讲的,如果我们想要对一个插件进行收费,那就应该把一部分核心功能放到云端,因为如果你全部放到客户端的话,实际上是很容易被破解的。Chrome浏览器的插件代码没有任何的加密,开箱即看。当好在我们用了VUE,它会用WebPack对源码进行编译,这样的话,即使别人获取的源代码还是看起来比较乱的。我顺手做了一个link:Starter Kit,大家如果要写的话,可以直接用。

技术上的细节大概就这些吧。从根上来说,「备份自己微博」的这个需求还是太弱。我在微博通过微博备份的关键字搜索了一下,然后把对应的微博都读了下,发现大家对备份这个事情吧,虽然嚷得厉害,但真正付费去备份的并不多,嘛,毕竟这也只是一个有备无患的事情。

这几天运营下来的数据也比较充分的说明这点,微贝相关的微博累积阅读在20万左右,但即使在免费的情况下,通过微信账号登录过的用户也只有几百。这个转化率非常的低,当然浏览器插件因为墙的问题,不能在线安装这件事情影响了一定的转化率,但是从整体的这么一个而使用量和迫切程度来看的话,这个事情是弱需求。

作为自己用的工具,需求强弱都无所谓,但如果要投入精力去做,你很难把一个弱需求做成一个非常非常流行的工具。至少在备份自己微博这事上边,是很低频的。

当然,你可以去发掘周边功能,比如去备份别人的微博,甚至给一些被删除的微博做镜像。因为微博上有不少的大V和热门事件,所以这个路径是通的。但有一点要注意,这些做法是违反微博数据使用协议的,理论上而言,微博随时可以起诉你。

另外关于程序员用户们开源的呼声,我们通过从微贝里边抽离出 catgate 这个通用抓取框架 解决了(见下一篇文章)。

关于微贝的复盘就到这里。这次还有一个意外收获,就是在思考支付方案的时候,意外想到了一个似乎可用的个人支付解决方案,稍后我会做个小工具来测试下稳定性,如果靠谱会分享给大家。