如何使用游标使用TweetSharp检索所有Twitter用户?

时间:2012-05-24 21:22:34

标签: c# .net twitter cursor tweetsharp

我在WPF .NET 4.0 C#应用程序中使用TweetSharp并使用经过身份验证的Twitter服务对象。 我在搜索关注者列表时遇到问题,无法检索每个个人资料。我正在使用以下代码:

TwitterCursorList<TwitterUser> followers = twitterService.ListFollowersOf(userID, -1);
while (followers != null)
{
    foreach (TwitterUser follower in followers)
    {
        //Do something with the user profile here
    }
    followers = twitterService.ListFollowersOf(userID, (long)followers.NextCursor);
} 

当我对自己的帐户使用此帐户时,我看到了一种奇怪的行为,截至撰写本文时,该帐户有1271个关注者。第一次运行代码时,我得到一个包含100个关注者的列表,在下一个ListFollowersOf调用中,关注者为null并且循环结束。

这是奇怪的部分:如果我再次运行此代码,无论是在同一个应用程序实例中,还是我停止Visual Studio并重新启动,都没关系,我得到一个额外的ieration和现在我有200个追随者。如果我再次这样做,现在我得到300个粉丝,然后我得到一个null,依此类推。我重复了这么多次,直到上面代码的一次调用返回了所有1271个粉丝。

真正奇怪的是这最终会重置。我认为这与Twitter API限制重置时间有关,但我还没有验证。我会看看这是否与API重置一致。一旦重置发生,我只有100个粉丝,然后是200,依此类推。

我查看了TweetSharp单元测试和以下帖子,但它们对我不起作用:

3 个答案:

答案 0 :(得分:1)

我使用这样的东西:

public static List<TwitterUser> GetFollowers(this TwitterService svc)
{
    List<TwitterUser> ret = new List<TwitterUser>();

    var followers = svc.ListFollowers(-1);
    ret.AddRange(followers);
    while (followers.NextCursor != null && followers.NextCursor.Value > 0)
    {
        followers = svc.ListFollowers(followers.NextCursor.Value);
        ret.AddRange(followers);
    }
    return ret;
}

然后

var f = svc.GetFollowers();

答案 1 :(得分:0)

我没有这个库,但根据示例看起来你应该有这样的东西:

TwitterCursorList<TwitterUser> followers = twitterService.ListFollowersOf(userID, -1);
while (followers.NextCursor != null)
{
    if(followers != null)
    {
        foreach (TwitterUser follower in followers)
        {
            //Do something with the user profile here
        }
    }
    followers = twitterService.ListFollowersOf(userID, (long)followers.NextCursor);
} 

同样,我无法运行代码,因为我没有库(也懒得下载它),但请试一试,让我知道它是否有效。

答案 2 :(得分:0)

如果你得到任何回报,那是因为你的代码工作正常。

很容易找出问题所在,然后开始相应地解决问题。我怀疑你是正确的,并且你受到Twitter的限制。

在while循环后将其添加到代码中:

if(followers == null) {
    Console.WriteLine("Error " + twitterService.Response.Error);
}

事实上,只要有东西返回null,您就可以检查Response对象的错误,看看它是什么TweetSharp认为出错了。 See this