豆瓣回复机器人

date
Jul 19, 2021
slug
doubanbot
status
Published
summary
写了点在摸索GitHub上一个写好的机器人程序上踩到的坑
tags
Code
代码阅读
type
Post
由于豆瓣官方不提供公开的API,所以能做的就是使用网页端模拟人的操作,这种方法会遇到很多验证码,就算是降低频率也不行
还有一个就是从APP里面拔下来API,好处在于没有验证码的限制,但是过程比较繁琐,一不小心就会出错,这里写的是这种方法的踩坑过程。
 

主要用到的博客或者其他资料有:

这个代码库(里面有一个参数过时了,所以白费了这么长的时间😭😭😭
这个库也差不多,不过能看多个小组的:
APP抓包过程,没什么难度,主要是找抓到的数据包有点费眼😇
Fiddler for mac+安卓模拟器抓包豆瓣APP
网上好多博客都是momo+fiddler的,而且抄来抄去,很少有真的能用的。 这里记一次fiddler for mac的使用体验。 点击右上角的设置图标 选择connections选项卡 勾选allow remote computer to connect 调整fiddler listens on port(随便设置,不超过65535,不与其他程序占用的端口冲突即可) 查看电脑ip,终端输入 ifconfig | grep "inet" 我这里选择的是 网易mumu安卓模拟器 。 打开模拟器,系统应用-设置-WLAN。鼠标 长按 yiAXCBD就会出现下图中的选项。 选择修改网络,代理选择手动,填入主机ip和刚才设置的端口号 ps.也许安装其他安卓模拟器也可以,但是我是过夜神模拟器,下载证书的时候提示需要sd卡,可能是存储空间不够了吧,我找了半天也没找到调整的地方,就放弃了。 我们打开安卓模拟器的浏览器,在地址栏输入我们之前得到的fildder的ip地址(以下是我的) 点击下载下面的链接FiddlerRoot certificate 点击下载完成的证书,证书名称随意,后面要设置pin或者手势之类的也都随意。 Fiddler左上角开启decode 在模拟器中安装豆瓣app(这一步应该在之前就做好了) 打开豆瓣app就可以抓包了。 fiddler for Mac 豆瓣app 网络请求签名算法分析与解密 豆瓣APP 登陆sign算法分析 我只是想搞个豆瓣回帖机器人罢了,怎么这么麻烦啊🆘
Fiddler for mac+安卓模拟器抓包豆瓣APP

简述一下我做的过程

  1. 在模拟器里下载一个全新的豆瓣(我的电脑因为开启了hyper-v导致用不了模拟器,还是用的同学电脑完成了抓包😅),按照上面的博文完成抓包,没什么难度,注意要最好完成下拉刷新、发言、点赞等几个功能,把这些API全都扒出来,省的到时候又得重新抓包。
  1. 然后就是分析,找到下拉刷新的那个请求
    1. notion image
      双击打开先,然后看看程序需要哪些参数
      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 的值都能一眼找到
      notion image
notion image

一个关键的参数

group_topics_url 这个参数,一开始我被程序里的参数限制住了,认为有这几个参数足够获得正确的返回值,但是一直不成,直到最后死马当活🐜,我直接把group_topics_url 替换成
notion image
这条链接,也就是把所有的参数都给放上去,然后才得到正确返回值😅
然后就没啥问题了,剩下的机器人扩展功能就是调用API了,比如接入微软小冰,自动回复之类的,等有时间再做吧😇
以及程序里面设置了检测评论为0才会评论,简单修改一下就好
在这:
notion image
还有就是代理IP不足似乎会导致没法发评论的样子,我看看能不能不用代理IP,或者把每个IP的利用次数提高一点。
 
 
 
效果:
IP池:
notion image
发送评论:
notion image
 
相关的博文为了防止失联我就都备份在下面了
notion image
notion image
 
 
 
下面是我问之前出过一样问题的人有没有解决办法,最后我写出来了,不知道能不能帮到人😇
notion image
 
 
 

以及这个过程中体会到的就是:

过老的框架只能指引前进的大概方向,遵循全部的细节那就完蛋了👋
 

© Craig Hart 2021 - 2022