昨天发现调用Danbooru搜索时候无法正常返回结果。一开始以为是梯子出了问题,还好Clash自己有日志功能,可以看到访问过程中有访问过danbooru.donmai.us,但是在随后没有对cdn.donmai.us的访问,也就是说前一步很可能根本没有获取到图片列表信息。
但是在本地用浏览器打开链接时候却可以正常浏览列表,实在是让人百思不得其解。
最后发现原来是danbooru闷声修改了搜索地址的格式,这里原本的调用网址是https://danbooru.donmai.us/posts.json?login=***&api_key=***&tags=***+***+***+order:score&random=true&limit=10
,最后的 random=true&limit=10
意思是显示10张随机图片。这2个属性是单独提交的,并不包含在tag里。
但是现在当你提交这个请求时,danbooru会直接将你重定向至页面https://danbooru.donmai.us/posts.json?limit=10&tags=order:score+***+***+***+random:10
。也就是说,现在的显示XX张随机图片变为了ramdon:XX这样的一个tag,而不再是一个单独提交的属性。
这个改动本身没什么问题,问题在于danbooru进行这个跳转的时候,丢失了前面的login=***&api_key=***
部分。这也是为什么我在本地测试一直没有发现问题的原因——因为我本地的浏览器一直登陆着danbooru,所以不需要key也可以正常获取内容,但是在其他没有登录的环境下调用时,就会因为未登录而超出tag数限制报错。
这部分改动在wiki的API页面并没有更新,而且是这两天才刚刚发生的,所以属实有点迷惑。
要修复自然很简单,将请求的url直接更改为跳转后的格式,并补上身份验证信息即可,https://danbooru.donmai.us/posts.json?login=***&api_key=***&tags=order:score+***+***+***+random:10
(random tag已经指定了图片数,limit=10也就没有必要了)。