Twitter API GET users/suggestions/:slug/members返回重复用户问题排查
看起来你遇到的问题是调用Twitter推荐用户API时,结果始终没有更新——哪怕已经关注了返回的用户,下次调用还是拿到相同的列表对吧?结合你用的thujohn/twitter包和Laravel框架,我来帮你梳理几个最可能的问题点:
1. 先排查缓存问题
thujohn/twitter包默认会缓存API请求结果,这是很多人忽略的点!如果缓存开着,哪怕你已经关注了推荐用户,重复调用时拿到的还是旧的缓存数据,不会触发实时请求。
你可以先检查配置:
- 如果还没发布包的配置文件,先运行:
php artisan vendor:publish --provider="Thujohn\Twitter\TwitterServiceProvider" - 打开
config/twitter.php,看看cache选项是不是设为true了。如果是,要么改成false全局关闭缓存,要么在每次API调用时强制禁用:
// 控制器里调用API时加上['cache' => false]参数 $recommendedUsers = Twitter::getUsersRecommendations(['cache' => false]);
2. 确认你调用的是正确的API端点
如果你用的是users/suggestions/:slug/members这类端点,它返回的是Twitter官方预设分类下的固定推荐用户,不是基于当前用户的个性化推荐——不管你关注多少人,这个列表都不会变。
如果需要的是和当前用户兴趣匹配的个性化推荐,应该调用users/recommendations端点(注意需要用户授权该接口权限),用包调用的方式是:
$personalizedRecs = Twitter::getUsersRecommendations(['cache' => false]);
另外,API本身不会自动过滤已关注用户,你需要自己做筛选:
// 先获取当前用户已关注的所有用户ID $followingIds = Twitter::getFriendsIds(['screen_name' => auth()->user()->twitter_screen_name])->ids; // 获取个性化推荐 $allRecs = Twitter::getUsersRecommendations(['cache' => false]); // 过滤掉已关注的用户 $unfollowedRecs = collect($allRecs)->filter(function($user) use ($followingIds) { return !in_array($user->id, $followingIds); });
3. 检查认证信息是否绑定了当前用户
如果你的代码只配置了应用级的consumer key/secret,没有传入当前登录用户的access token和secret,那调用的是应用级API,返回的是通用推荐,不是针对该用户的个性化结果。
确保调用API前切换到当前用户的认证信息:
// 假设你的User模型存储了twitter_token和twitter_secret字段 $currentUser = auth()->user(); // 重新配置包的认证信息 Twitter::reconfig([ 'token' => $currentUser->twitter_token, 'secret' => $currentUser->twitter_secret, ]); // 再调用推荐API $personalizedRecs = Twitter::getUsersRecommendations(['cache' => false]);
4. 确认参数传递的是当前用户的信息
如果你传入的screen_name或user_id是固定值(比如测试账号),而不是当前登录用户的Twitter账号信息,结果自然不会随用户行为变化。一定要确保参数是动态的:
$params = [ 'user_id' => auth()->user()->twitter_user_id, // 或者用screen_name字段 'cache' => false ]; $recs = Twitter::getUsersRecommendations($params);
先从缓存和API端点这两个最常见的问题入手排查,应该能解决你的问题!
内容的提问来源于stack exchange,提问作者user9334443

