ttop5/blog

做一只快乐的舔狗

ttop5 opened this issue · 0 comments

ttop5 commented

相关代码及具体使用说明:https://github.com/ttop5/douban-status-push-to-wechat

本篇文主要讲述一下这个小项目的实现思路和前因后果,顺便探讨一下相关的一些话题。

事情起因

你是否也像我一样,脑海中总有一个心心念念挥之不去的人,对 ta 所在经历的事情,你都想第一时间知道,但是因为各种原因你又不好得直接关注人家。

于是你每天不知疲倦的一遍又一遍的刷新着人家的主页,希望能第一时间看到 ta 的最新动态。啊,这样手动舔也太累了吧,还是用程序去完成这种重复性劳动吧。

实现思路

思路一:RSS + RSSHub

image

主动接收信息,实时性不高。适合 RSS 重度用户(我算是半个重度用户)并且由于种种原因没法直接关注此人的情况。此方式相当于变相关注了这个用户,之所以借助 RSSHub 是因为豆瓣官方没有提供用户动态的 Feed,只提供了用户收藏的 Feed。

思路二:数据爬取 + 微信推送

image

被动接收消息,实时性很高。适合所有使用微信的用户(几乎大部分国人),可以关注的不可以关注的人都适合,想第一时间知道某人动态及时跪舔的必备工具。

以上两种我均做了实践,由于第一种没什么好讲的,这里就主要介绍一下第二种方案的一些细节。

具体实现

代码:https://github.com/ttop5/douban-status-push-to-wechat/blob/master/src/douban.js

1. 爬取用户动态

不必使用 cookie 爬虫,直接调用接口:
https://m.douban.com/rexxar/api/v2/status/user_timeline/${USERID}?max_id=&ck=eUUA&for_mobile=1

由于豆瓣接口对请求源进行了限制,所以需要在 HTTP 请求头部加上:
Referer: `https://m.douban.com/people/${USERID}/statuses`,

2. 将数据推送到微信

这里我们借助 Server 酱来完成,就不多做赘述。

3. 其他

为了简化,爬取到的数据不进行持久化保存(感觉没必要),随之而来的我们面临着以下的问题。

循环爬取周期

因为怕爬取对象在短时间内连续发表多条动态,从而导致漏推送的情况出现。我把周期时间设置为5s,但在实际部署的时候我改成了10s,怕请求太频繁官方封我 ip 。

请求太过于频繁除了怕被封 ip 外,如果服务量变大了还会外增加服务器的负担,在考虑是否可以通过爬取对象的时区进行间歇性爬取(比如白天爬取,半夜凌晨不爬)。

动态推送策略

因为 Server 酱提供的免费推送次数的限制,加上我们不想看到重复的推送,所以我们需要对数据进行过滤后再进行推送。

由于数据不保存到数据库,于是我们将其存在临时变量中,把爬到的数据创建时间和上一次爬到的数据创建时间作对比,不一致则认为爬取对象更新了动态,将数据推送到用户微信。

最终效果

客户端界面

服务器日志

关于舔狗

“一切不平等的关系都是从舔狗开始的;舔狗舔到最后一无所有;舔狗不得好死!” —— 鲁迅

image image image

结论:舔狗,必将自食其果!老哥,我劝你还是不要当舔狗🐶。