HeadmasterTan / zhi-plugin

Yunzai-Bot的一个插件,添加了B站动态推送功能,覆盖了表情功能
59 stars 4 forks source link

B站推送ck问题 #39

Closed GOOD-AN closed 1 year ago

GOOD-AN commented 1 year ago

大佬你好,这个ck的问题,感觉怕过期,在想是不是可以通过两种方式来及时解决:

一是开一个自定义ck的指令,然后上传自己的B站ck进行请求。

二是,今天下午在和别人尝试请求B站接口的时候,想到的:用请求头带user-agent等参数请求类似https://space.bilibili.com/{uid}/dynamic的页面,直接从返回头中set-cookie拿到一个临时cookie,然后用这个cookie去请求其他接口。

HeadmasterTan commented 1 year ago

不太建议上传自己的ck,或者由使用者上传ck,这不过是最后手段了。

昨晚我就在思考怎么自动获取ck了,但是叔叔下毒了,只能拿到3个ck,还有3个没找到来源,方法的话跟你说的差不多吧。 但是测试的时候发现3个ck有时候能推,有时候又不能推,挺怪的。

GOOD-AN commented 1 year ago

我是觉得反正ck存在自己的服务器,也不经过其他人的接口,提前提示个风险自担呗,程序原有ck不删,是否启用自定义ck由使用者自行决定。

嗯,自动获取ck这块,实在不好测试哪些参数是必须的,触发风控判断点是什么。而且本地程序跑多了以后,不登录直接浏览器访问会触发验证码。

GOOD-AN commented 1 year ago

隔壁项目issue里看到个方法 https://github.com/SocialSisterYi/bilibili-API-collect/issues/686#issuecomment-1573888658 整个ck仅包含一个随机生成的DedeUserID

HeadmasterTan commented 1 year ago

隔壁项目issue里看到个方法 SocialSisterYi/bilibili-API-collect#686 (comment) 整个ck仅包含一个随机生成的DedeUserID

秀啊,刚刚翻了下阿B的源码,确实找到了这个DedeUserID,但因为混淆了也不大看得出来作用,他居然发现了,牛的。

让别人上传ck倒也不是完全因为安全问题,主要还是因为麻烦,我自己都懒得传ck🤣一劳永逸是最好不过的

HeadmasterTan commented 1 year ago

刚刚也顺便翻了翻ck的来源和生成规则,有3个是从api就能拿到的,有两个可以用阿B的代码直接生成,但是还差最后一个实在不好处理。

先用着大哥方案撑一段时间吧🤣

GOOD-AN commented 1 year ago

确实,多个功能是挺麻烦的🤣

源码我也翻了,确实想不到是DedeUserID这个参数,因为正常只在正常登录的用户ck中使用,混淆完看着是真头疼,这个方法先用着,到时候研究出来再搞呗。

还有个点就是我在想要不要学闲心插件,把动态转成图片。

feilongproject commented 1 year ago

确实,多个功能是挺麻烦的🤣

源码我也翻了,确实想不到是DedeUserID这个参数,因为正常只在正常登录的用户ck中使用,混淆完看着是真头疼,这个方法先用着,到时候研究出来再搞呗。

还有个点就是我在想要不要学闲心插件,把动态转成图片。

puppeteer就可以, 引包之后直接截就完事了, 不过有些按钮(比如关注之类的)需要remove一下

GOOD-AN commented 1 year ago

puppeteer就可以, 引包之后直接截就完事了, 不过有些按钮(比如关注之类的)需要remove一下

就是说直接去请求页面,然后删掉不要的元素,直接截取页面发送,这个想过,确实想来是简单的,但是有一个问题,如果页面元素被变更,删错了或者没删掉都是问题,而且目前接口本身就可以拿到几乎所有的 json 格式数据,只需将其放置到拟定好的模板里就可以了,链接直接通过库生成二维码,加到里面就行。

还有个问题就是,请求页面其实很麻烦,因为默认是个空页面或者模板,很多数据都是后加的,单请求页面是拿不到所有数据的,数据基本都是从接口来的 json 数据,而且还要请求 css 和 js 文件,然后再渲染,完全是兜了一圈,又回来了,工作量还多了。

feilongproject commented 1 year ago

就是说直接去请求页面,然后删掉不要的元素,直接截取页面发送,这个想过,确实想来是简单的,但是有一个问题,如果页面元素被变更,删错了或者没删掉都是问题,而且目前接口本身就可以拿到几乎所有的 json 格式数据,只需将其放置到拟定好的模板里就可以了,链接直接通过库生成二维码,加到里面就行。

还有个问题就是,请求页面其实很麻烦,因为默认是个空页面或者模板,很多数据都是后加的,单请求页面是拿不到所有数据的,数据基本都是从接口来的 json 数据,而且还要请求 css 和 js 文件,然后再渲染,完全是兜了一圈,又回来了,工作量还多了。

可以看看puppeteer的实现原理, 他是模拟浏览器来实现网页截取的, 对于请求页面其实很麻烦这个问题, 其实puppeteer已经做好处理了, 通过截图后获取的界面就是正常浏览器观看的界面(因为他就是个浏览器)

对于如果页面元素被变更,删错了或者没删掉都是问题, 删错的概率其实基本上不会存在, 因为他是通过selector来筛选指定节点的(除非b站程序员抽风把title命名成content), 没删掉的话做适配就行, 我现在用了半年, 基本上没有出现没删掉的情况

GOOD-AN commented 1 year ago

可以看看puppeteer的实现原理, 他是模拟浏览器来实现网页截取的, 对于请求页面其实很麻烦这个问题, 其实puppeteer已经做好处理了, 通过截图后获取的界面就是正常浏览器观看的界面(因为他就是个浏览器)

对于如果页面元素被变更,删错了或者没删掉都是问题, 删错的概率其实基本上不会存在, 因为他是通过selector来筛选指定节点的(除非b站程序员抽风把title命名成content), 没删掉的话做适配就行, 我现在用了半年, 基本上没有出现没删掉的情况

我明白你什么意思了,是个思路,还有一点就怕出验证码,B站现在的风控阴晴不定的,我本地这边不登陆账号已经百分百跳验证码了。

如果通过接口可以几乎不触发风控,长期检测还是最优解,因为我这边订阅的up数量还是不少的。

feilongproject commented 1 year ago

我明白你什么意思了,是个思路,还有一点就怕出验证码,B站现在的风控阴晴不定的,我本地这边不登陆账号已经百分百跳验证码了。

如果通过接口可以几乎不触发风控,长期检测还是最优解,因为我这边订阅的up数量还是不少的。

如果up多的话建议专门开一个小号去关注这些up, 然后只需要获取小号的关注列表的动态, 这样就不需要一次性获取所有up的动态了

GOOD-AN commented 1 year ago

如果up多的话建议专门开一个小号去关注这些up, 然后只需要获取小号的关注列表的动态, 这样就不需要一次性获取所有up的动态了

可以这样,但是逻辑和功能就得改,得加不少东西,作者大佬也说了,想找一个通用的方法,尽量避免绑定自己的ck来处理,功能尽量精简,这就实在没办法了才用。

我的习惯是,能不碰网页就不碰网页,能从接口拿数据就接口拿数据,因为返回状态与返回信息处理起来能方便不少,排查问题也方便。

feilongproject commented 1 year ago

可以这样,但是逻辑和功能就得改,得加不少东西,作者大佬也说了,想找一个通用的方法,尽量避免绑定自己的ck来处理

那估计如果大量up的情况下可行性不大, 毕竟b站对于非登录用户来说, api的调用还是有限制的

ywstratus commented 1 year ago

蹲一个大佬的通用方法,小的先摆了

GOOD-AN commented 1 year ago

今日临测记录,很奇怪,今日只需拿到buvid3和设置正确的user-agent,大量请求竟然毫无问题。