You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel5调用Twitter API获取授权用户全部点赞的方法及限流问题

关于Laravel中获取Twitter用户全部点赞的问题解答

咱们先聊聊你的实现思路:整体方向是对的,因为Twitter(现在叫X)的API本身不支持一次性拉取所有点赞内容——单请求返回的数量有上限(v1.1接口最多200条,v2接口最多100条),所以必须通过分页循环,每次用最后一条点赞的id_str(对应v1.1的max_id参数,v2则用pagination_token)来获取下一页数据。不过有几个细节需要调整:

  • 别完全依赖favorite_count来控制循环次数:这个数字是用户主页显示的点赞统计,实际可通过API获取的点赞数可能更少(比如部分内容被删除、账号被冻结,或者API权限限制你看不到某些内容),正确的终止条件应该是当API返回空数组,或者没有下一页的分页标记时停止循环。
  • 确认API端点的正确性:如果用的是v1.1版本,调用的是GET favorites/list;如果是v2版本,调用的是GET /2/users/{user_id}/liked_tweets,两者的分页参数逻辑略有不同,别搞混了。

接下来解决你遇到的[88] Rate limit exceeded错误:
这个错误是触发了X API的速率限制,不同版本的API限制差异很大:

  • v1.1的favorites/list接口:每15分钟最多15次请求,每次最多返回200条。你要拉取1136条理论上只需要6次请求,但如果你的循环没有添加延迟,或者短时间内发起了过多请求,就会触发限流。
  • v2的liked_tweets接口:每15分钟最多900次请求(用户认证场景),这个限制宽松很多,更适合批量拉取数据。

给你几个解决限流的实用方案:

  • 添加请求延迟:在每次循环的请求之后,添加1-2秒的延迟(用PHP的sleep()函数即可),避免短时间内挤太多请求到API服务器。
  • 主动处理限流响应:捕获429状态码(对应错误码88),然后通过响应头的x-rate-limit-reset字段获取限流窗口的重置时间,计算需要等待的时长,等窗口重置后再继续请求。
  • 升级到API v2:如果还在使用v1.1,建议升级到v2,它的速率限制更友好,而且接口设计更清晰。

这里给你一段Laravel中处理分页和限流的伪代码参考:

$twitterUserId = auth()->user()->twitter_user_id;
$allLikedTweets = [];
$maxId = null;

do {
    try {
        // 发起API请求(以v1.1为例)
        $response = Http::withToken(env('TWITTER_ACCESS_TOKEN'))
            ->get('https://api.twitter.com/1.1/favorites/list.json', [
                'user_id' => $twitterUserId,
                'count' => 200,
                'max_id' => $maxId,
            ]);

        // 处理限流情况
        if ($response->status() === 429) {
            $resetTime = $response->header('x-rate-limit-reset');
            $waitSeconds = $resetTime - time();
            sleep($waitSeconds + 1); // 多等1秒确保窗口完全重置
            continue;
        }

        $tweets = $response->json();
        if (empty($tweets)) break; // 没有更多内容,终止循环

        $allLikedTweets = array_merge($allLikedTweets, $tweets);
        $maxId = end($tweets)['id_str']; // 更新下一页的max_id

        // 添加延迟,避免触发限流
        sleep(1);
    } catch (\Exception $e) {
        // 处理其他异常,比如网络问题
        logger()->error('获取Twitter点赞失败:' . $e->getMessage());
        break;
    }
} while (true);

内容的提问来源于stack exchange,提问作者Abdullah Albdrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:07:57