2012-05-24 118 views
2

我在WPF .NET 4.0 C#應用程序中使用TweetSharp並使用經過身份驗證的Twitter服務對象。 我在通過關注者列表迭代來檢索每個單個配置文件時遇到問題。我使用下面的代碼:如何使用遊標檢索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調用中,關注者爲空,循環結束。

這裏是怪異的一部分:如果我再次運行此代碼,無論是在同一個應用程序實例,或者如果我停止Visual Studio和重啓,沒關係,我得到一個額外的ieration現在我得到200追隨者回來。如果我再次執行這個技巧,現在我得到300個追隨者,然後我得到一個空值,等等。我重複了很多次,直到上面代碼的一個調用返回了所有1271個關注者。

真的很奇怪的是這最終重置。我認爲這與Twitter API限制重置時間有關,但我沒有證實。我會看到這是否與API重置一致。一旦重置發生,我只有100個追隨者,然後200,等等。

我已審查TweetSharp單元測試及以下職位,他們沒有爲我工作:

+1

你試過'while(followers.NextCursor!= null)'? while循環在'followers'爲'null'時停止,但當'NextCursor'爲'null'時,鏈接問題中的其他示例停止。 – Kiril

+0

我有。 followers.NextCursor返回一個long ?,問題是一旦追隨者變爲null(並且如上所述),我會得到拋出的空引用異常。 – ActiveNick

+0

[與源碼一起提供的測試]之一(https://github.com/danielcrenna/tweetsharp/blob/master/src/net40/TweetSharp.Next.Tests/Service/TwitterServiceTests.cs)檢查「NextCursor」是否爲'null',並且你將它轉換爲long,所以它看起來像是某種引用(我沒有代碼來檢查它)。這裏是檢查:'Assert.IsNotNull(followers.NextCursor);'你仍然可以檢查'followrs'是否爲'null',如果它是'null'則不會引用它,但它看起來像你的while循環應該繼續直到'NextCursor'爲'null' ......至少從其他例子看起來是這樣。 – Kiril

回答

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); 
} 

再說一遍,由於我沒有圖書館(我懶得下載它),所以我無法運行代碼,但是給它一個鏡頭,讓我知道它是否有效。

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(); 
0

如果你得到任何東西,那是因爲你的代碼工作得很好。

很容易找出發生了什麼問題,然後開始相應地解決您的問題。我懷疑你是正確的,並且你被Twitter限制了速度。

您while循環之後添加到您的代碼:

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

事實上,任何時候的東西返回null可以檢查響應對象的錯誤,看看它是TweetSharp自以爲出了問題。 See this

相關問題