Twitter API v2如何直接查询指定用户是否点赞特定推文
高赞推文点赞用户校验性能优化方案
你当前的实现逻辑性能瓶颈非常明确:热门推文的点赞用户量级可达十万甚至百万级,全量拉取遍历会消耗大量API请求配额,响应延迟极高。
Twitter v2 API 目前没有为tweetLikedBy(推文点赞用户列表)接口提供按用户ID过滤的参数,不支持直接传入目标用户ID返回匹配结果,也没有开放单点校验「某用户是否点赞某条推文」的独立接口,但可以通过反向查询的方案把遍历数据量级降低几个数量级,完全满足性能要求。
最优实现思路
放弃拉取推文的全量点赞用户列表,改为调用用户维度的点赞推文接口,拉取目标用户自己的点赞列表,遍历判断目标推文是否存在于列表中:
- 普通用户的总点赞量远低于热门推文的总点赞量,需要遍历的数据集规模从百万级降到千级甚至百级
- 遍历过程中只要匹配到目标推文ID就可以立刻终止分页拉取,不需要拉完所有数据
- 单页请求拉取接口支持的最大上限100条结果,进一步减少请求次数
优化后代码
const client = twitterApi({ token, secret }) // 拉取待校验目标用户的点赞推文列表 const likedTweetsPaginator = await client.v2.userLikedTweets(userIdTwitter, { asPaginator: true, max_results: 100, // 单页拉取最大允许值,减少请求轮次 }) for await (const tweet of likedTweetsPaginator) { if (tweet.id === target) { await task.related('users').attach([userId]) return response.ok({}) } } return response.notFound()
注意事项
- 如果你使用的是Twitter API基础访问层级,接口最多只能回溯目标用户最近800条点赞记录,如果目标推文发布时间极早、且用户总点赞量超过800,存在小概率漏判可能,需要更高准确率可以申请提升API访问权限
- 高并发场景下可以给校验过的「用户ID-推文ID」点赞关系加10~30分钟的短缓存,避免重复请求接口消耗配额
内容的提问来源于stack exchange,提问作者Leonardo Nascimento
相关产品推荐
相关产品推荐

