豆瓣回复机器人
date
Jul 19, 2021
slug
doubanbot
status
Published
summary
写了点在摸索GitHub上一个写好的机器人程序上踩到的坑
tags
Code
代码阅读
type
Post
由于豆瓣官方不提供公开的API,所以能做的就是使用网页端模拟人的操作,这种方法会遇到很多验证码,就算是降低频率也不行
还有一个就是从APP里面拔下来API,好处在于没有验证码的限制,但是过程比较繁琐,一不小心就会出错,这里写的是这种方法的踩坑过程。
主要用到的博客或者其他资料有:
这个代码库(里面有一个参数过时了,所以白费了这么长的时间😭😭😭
这个库也差不多,不过能看多个小组的:
APP抓包过程,没什么难度,主要是找抓到的数据包有点费眼😇
简述一下我做的过程
- 在模拟器里下载一个全新的豆瓣(我的电脑因为开启了hyper-v导致用不了模拟器,还是用的同学电脑完成了抓包😅),按照上面的博文完成抓包,没什么难度,注意要最好完成下拉刷新、发言、点赞等几个功能,把这些API全都扒出来,省的到时候又得重新抓包。
- 然后就是分析,找到下拉刷新的那个请求

双击打开先,然后看看程序需要哪些参数
在
douban-auto-reply 库里面的config.py 可以看到需要的参数# 豆瓣小组的id
group_id = "" #接在请求连接上面的那串数字
"""
通过抓豆瓣app登录包获得的client_secret
参考:https://bbs.125.la/thread-14226779-1-1.html
"""
client_secret = "bf7dddc7c9cfe6f7" # 这是不变的(如果官方没改动的话
"""
通过抓豆瓣app小组首页帖子列表获得的headers和小组信息
"""
authorization = "" # 每次重新登录后都要更新
headers = {
"Authorization": "Bearer " + authorization,
"User-Agent": "", # 这里也需要填入信息补全
"Host": "frodo.douban.com",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip",
"Content-Type": "application/x-www-form-urlencoded",
}
device_info = "os_rom=&apikey=&channel=&udid=" # 抓包后填入相应的值
# get并不要去实时更新sig和ts,可以使用固定的链接
#重点在这里,下面的参数过时了!!!
#重点在这里,下面的参数过时了!!!
#重点在这里,下面的参数过时了!!!
group_topics_url = (
"https://frodo.douban.com/api/v2/group/"
+ group_id
+ "/topics?count=50&sortby=new&"
+ device_info
+ "&_sig=&_ts="
) # 第一次抓包后填入相应的值authorization 、device_info 、User-Agent 的值都能一眼找到

一个关键的参数
group_topics_url 这个参数,一开始我被程序里的参数限制住了,认为有这几个参数足够获得正确的返回值,但是一直不成,直到最后死马当活🐜,我直接把group_topics_url 替换成
这条链接,也就是把所有的参数都给放上去,然后才得到正确返回值😅
然后就没啥问题了,剩下的机器人扩展功能就是调用API了,比如接入微软小冰,自动回复之类的,等有时间再做吧😇
以及程序里面设置了检测评论为0才会评论,简单修改一下就好
在这:

还有就是代理IP不足似乎会导致没法发评论的样子,我看看能不能不用代理IP,或者把每个IP的利用次数提高一点。
效果:
IP池:

发送评论:

相关的博文为了防止失联我就都备份在下面了
以及这个过程中体会到的就是:
过老的框架只能指引前进的大概方向,遵循全部的细节那就完蛋了👋




