我是从发布点赞中抽奖才发现的这个问题。
如图,当点赞数量超过200后,后面的头像图标都不会显示,假如我用GPT随机抽到200以上数字就无法确定是谁中奖,希望可以修复这个问题,辛苦大佬了。
网址+楼层就可以直接跳转到具体楼层了,这比一行行数方便
比如本楼层:点赞显示上限限制 - #2,来自 zhong_little
可是全显示的话,有的帖子就太长了
我当时是设置的评论和点赞中各抽一人
可以设置分页,就是有点麻烦
哦哦原来说的是点赞
对啊,如果修复不了就只能用抽楼层方式
控制台输入下这个代码 看看有没有输出302个 |・ω・`) (我没有那么多赞的帖子尝试不了)
还有点回应的 那得多加一个
fetch('https://linux.do/user_actions.json?limit=1000&username=naihe&filter=2') .then(response => response.json())
.then(data => {
// 筛选特定 PostId 的数据
const specificPostId = 2232219;
const filteredData = data.user_actions.filter(action => action.post_id === specificPostId);
// 提取 acting_username
const usernames = filteredData.map(action => action.acting_username);
// 打印或处理 usernames 数组
console.log(usernames);
})
.catch(error => console.error('Error fetching data:', error));
因为有人是点回应不是点赞 我还在写 这两个不一样 (下面这种)
让gpt合了一下 应该可以了|・ω・`)
// 将两个 fetch 请求放入 Promise.all 中,以便同时执行
Promise.all([
fetch('https://linux.do/user_actions.json?limit=1000&username=naihe&filter=2').then(response => response.json()),
fetch('https://linux.do/discourse-reactions/posts/reactions-received.json?limit=1000&username=naihe').then(response => response.json())
]).then(data => {
// data[0] 是第一个请求的结果,data[1] 是第二个请求的结果
const specificPostId = 2232219;
// 从第一个请求结果中筛选和提取 acting_username
const filteredUserActions = data[0].user_actions.filter(action => action.post_id === specificPostId);
const actingUsernames = filteredUserActions.map(action => action.acting_username);
// 从第二个请求结果中筛选和提取 username
const filteredReactionsReceived = data[1].filter(item => item.post_id === specificPostId);
const usernames = filteredReactionsReceived.map(item => item.user.username);
// 合并两个结果
const combinedUsernames = actingUsernames.concat(usernames);
// 打印或处理合并后的 usernames 数组
console.log(combinedUsernames);
}).catch(error => {
console.error('Error fetching data:', error);
});
输出的其实是倒序 多了个响应还挺尴尬 试一下这个吧 拿创建时间排了下序
Promise.all([
fetch('https://linux.do/user_actions.json?limit=1000&username=naihe&filter=2').then(response => response.json()),
fetch('https://linux.do/discourse-reactions/posts/reactions-received.json?limit=1000&username=naihe').then(response => response.json())
]).then(data => {
const specificPostId = 2232219;
// 从第一个请求结果中筛选和提取 acting_username 和创建时间
const filteredUserActions = data[0].user_actions.filter(action => action.post_id === specificPostId);
const userActionsInfo = filteredUserActions.map(action => ({
username: action.acting_username,
createdAt: action.created_at
}));
// 从第二个请求结果中筛选和提取 username 和创建时间
const filteredReactionsReceived = data[1].filter(item => item.post_id === specificPostId);
const reactionsInfo = filteredReactionsReceived.map(item => ({
username: item.user.username,
createdAt: item.created_at
}));
// 合并两个信息数组
const combinedInfo = userActionsInfo.concat(reactionsInfo);
// 按创建时间排序,从最早到最新
combinedInfo.sort((a, b) => new Date(a.createdAt) - new Date(b.createdAt));
// 提取排序后的用户名数组
const sortedUsernames = combinedInfo.map(info => info.username);
// 打印或处理排序后的 usernames 数组
console.log(sortedUsernames);
}).catch(error => {
console.error('Error fetching data:', error);
});
很完美,感谢大佬!
https://linux.do/discourse-reactions/posts/${articleElement.dataset.postId}/reactions-users.json
这个感觉还可以再改善一下
刚刚试了一下破千赞的帖,然而这个 json 只会返回一部分的点赞…
要通用的话把这个限制调大一点就行 设置1万 (默认其实是30 要offset 一点点翻页)
(看楼主的获赞总数去改的 怕一次拉太多数据 )
也可以加判断就是 提前获取一下帖子的创建时间 如果返回数据没有比发帖早的 就继续在拉一些数据 直到覆盖整个发帖 比如20号发的贴 获取的数据只到21号 就继续获取 直到获取了19号的数据 就说明把帖子相关的获赞通知都拉完了