2

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 を停止して再起動しても、問題はありません。1 つの余分な反復が得られ、今では 200 人のフォロワーが戻ってきます。このトリックをもう一度実行すると、null になる前に 300 人のフォロワーが戻ってきます。上記のコードの 1 回の呼び出しで 1271 人のすべてのフォロワーが返されるまで、これを何度も繰り返しました。

本当に奇妙なことは、これが最終的にリセットされることです。Twitter APIの制限リセット時間と関係があると思いますが、確認していません。これが API リセットと一致するかどうかを確認します。リセットが行われると、フォロワーが 100 人、次に 200 人というように増えます。

TweetSharp 単体テストと次の投稿を確認しましたが、うまくいきませんでした:

4

3 に答える 3

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();
于 2013-01-08T07:02:53.520 に答える
0

何かが返ってくるのは、コードが正常に機能しているからです。

何が問題なのかを見つけて、それに応じて問題の修正を開始するのは簡単です。あなたは正しく、Twitter によってレート制限されているのではないかと思います。

while ループの後にこれをコードに追加します。

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

実際、何かが返されたnullときはいつでも、Response オブジェクトの Error をチェックして、TweetSharp が何を間違っていると考えているかを確認できます。これを参照してください

于 2013-03-20T23:44:55.173 に答える
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);
} 

繰り返しますが、ライブラリがないためコードを実行できません (ダウンロードするのも面倒です) が、試してみて、機能するかどうかをお知らせください。

于 2012-05-25T15:08:06.243 に答える