我正在尝试使用以下代码段获取所有关注者列表。每个通话都会吸引200位关注者,因此我在循环中总结了所有关注者。用户有23.1万个关注者,但达到2800个关注者时出现“ Rate Limit”超出错误。我发现twitter允许每个用户15个请求,有什么办法可以修复下面的代码来吸引所有关注者?
private static async Task<List<User>> GetTwitterFollowersAsync(
ulong twitterUserId, SingleUserAuthorizer auth, int? maxFollowers)
{
var followerss = maxFollowers ?? 15000;
long nextCursor = -1;
var users = new List<User>();
try
{
while (nextCursor != 0)
{
var twitterCtx = new TwitterContext(auth);
var friends = await twitterCtx.Friendship
.Where(f => f.Type == FriendshipType.Show
&& f.SourceScreenName == "John_Papa"
&& f.Count == followerss && f.Cursor == nextCursor)
.Select(f => new TwitterData()
{
NewCursor = f.CursorMovement.Next,
Followers = f.Users.Where(t => !t.Protected)
.Take(followerss).Select(s => s).ToList()
})
.SingleOrDefaultAsync();
nextCursor = friends.NewCursor;
users.AddRange(friends.Followers);
}
return users;
}
catch (Exception ex)
{
return null;
}
}
最佳答案
LINQ to Twitter在TwitterContext上具有RateLimitXxx属性,该属性在每次查询后都会更新。它们反映了Twitter上此速率限制文档中描述的信息:
https://dev.twitter.com/docs/rate-limiting/1
对于每种查询类型,您都有一个15分钟的窗口,并且每种查询的速率都有限制。您可以使用以下逻辑将代码封闭在循环中:
执行查询
如果您需要所有结果,请中断循环。
查看速率限制
如果超出了速率限制,请等待15分钟。
如果未超过速率限制,请继续循环播放。
关于c# - 使用Linq将所有关注者带到Twitter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22268889/